| 
									
										
										
										
											2016-07-26 08:53:55 +08:00
										 |  |  | /* | 
					
						
							|  |  |  |  * Minio Cloud Storage, (C) 2016 Minio, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 07:23:42 +08:00
										 |  |  | package cmd | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-17 08:26:27 +08:00
										 |  |  | import ( | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Test validates for duplicate configs.
 | 
					
						
							|  |  |  | func TestCheckDuplicateConfigs(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		qConfigs        []queueConfig | 
					
						
							|  |  |  | 		expectedErrCode APIErrorCode | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		// Error for duplicate queue configs.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			qConfigs: []queueConfig{ | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					QueueARN: "arn:minio:sqs:us-east-1:1:redis", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					QueueARN: "arn:minio:sqs:us-east-1:1:redis", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedErrCode: ErrOverlappingConfigs, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Valid queue configs.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			qConfigs: []queueConfig{ | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					QueueARN: "arn:minio:sqs:us-east-1:1:redis", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedErrCode: ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// ... validate for duplicate queue configs.
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							|  |  |  | 		errCode := checkDuplicateQueueConfigs(testCase.qConfigs) | 
					
						
							|  |  |  | 		if errCode != testCase.expectedErrCode { | 
					
						
							|  |  |  | 			t.Errorf("Test %d: Expected %d, got %d", i+1, testCase.expectedErrCode, errCode) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Tests for validating filter rules.
 | 
					
						
							|  |  |  | func TestCheckFilterRules(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		rules           []filterRule | 
					
						
							|  |  |  | 		expectedErrCode APIErrorCode | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		// Valid prefix and suffix values.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			rules: []filterRule{ | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "prefix", | 
					
						
							|  |  |  | 					Value: "test/test1", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "suffix", | 
					
						
							|  |  |  | 					Value: ".jpg", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedErrCode: ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid filter name.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			rules: []filterRule{ | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "unknown", | 
					
						
							|  |  |  | 					Value: "test/test1", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedErrCode: ErrFilterNameInvalid, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Cannot have duplicate prefixes.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			rules: []filterRule{ | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "prefix", | 
					
						
							|  |  |  | 					Value: "test/test1", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "prefix", | 
					
						
							|  |  |  | 					Value: "test/test1", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedErrCode: ErrFilterNamePrefix, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Cannot have duplicate suffixes.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			rules: []filterRule{ | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "suffix", | 
					
						
							|  |  |  | 					Value: ".jpg", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "suffix", | 
					
						
							|  |  |  | 					Value: ".txt", | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedErrCode: ErrFilterNameSuffix, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Filter value cannot be bigger than > 1024.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			rules: []filterRule{ | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					Name:  "prefix", | 
					
						
							|  |  |  | 					Value: strings.Repeat("a", 1025), | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expectedErrCode: ErrFilterValueInvalid, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							|  |  |  | 		errCode := checkFilterRules(testCase.rules) | 
					
						
							|  |  |  | 		if errCode != testCase.expectedErrCode { | 
					
						
							|  |  |  | 			t.Errorf("Test %d: Expected %d, got %d", i+1, testCase.expectedErrCode, errCode) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Tests filter name validation.
 | 
					
						
							|  |  |  | func TestIsValidFilterName(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		filterName string | 
					
						
							|  |  |  | 		status     bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		// Validate if 'prefix' is correct.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			filterName: "prefix", | 
					
						
							|  |  |  | 			status:     true, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Validate if 'suffix' is correct.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			filterName: "suffix", | 
					
						
							|  |  |  | 			status:     true, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid filter name empty string should return false.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			filterName: "", | 
					
						
							|  |  |  | 			status:     false, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid filter name random character should return false.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			filterName: "unknown", | 
					
						
							|  |  |  | 			status:     false, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							|  |  |  | 		status := isValidFilterName(testCase.filterName) | 
					
						
							|  |  |  | 		if testCase.status != status { | 
					
						
							|  |  |  | 			t.Errorf("Test %d: Expected \"%t\", got \"%t\"", i+1, testCase.status, status) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Tests list of valid and invalid events.
 | 
					
						
							|  |  |  | func TestValidEvents(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		events  []string | 
					
						
							|  |  |  | 		errCode APIErrorCode | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		// Return error for unknown event element.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			events: []string{ | 
					
						
							|  |  |  | 				"s3:UnknownAPI", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			errCode: ErrEventNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Return success for supported event.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			events: []string{ | 
					
						
							|  |  |  | 				"s3:ObjectCreated:Put", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			errCode: ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Return success for supported events.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			events: []string{ | 
					
						
							|  |  |  | 				"s3:ObjectCreated:*", | 
					
						
							|  |  |  | 				"s3:ObjectRemoved:*", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			errCode: ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Return error for empty event list.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			events:  []string{""}, | 
					
						
							|  |  |  | 			errCode: ErrEventNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							|  |  |  | 		errCode := checkEvents(testCase.events) | 
					
						
							|  |  |  | 		if testCase.errCode != errCode { | 
					
						
							|  |  |  | 			t.Errorf("Test %d: Expected \"%d\", got \"%d\"", i+1, testCase.errCode, errCode) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Tests queue arn validation.
 | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | func TestQueueARN(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 	rootPath, err := newTestConfig("us-east-1") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatalf("unable initialize config file, %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer removeAll(rootPath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 		queueARN string | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		errCode  APIErrorCode | 
					
						
							|  |  |  | 	}{ | 
					
						
							| 
									
										
										
										
											2017-01-10 06:22:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Valid webhook queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:webhook", | 
					
						
							|  |  |  | 			errCode:  ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		// Valid redis queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:redis", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 			errCode:  ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Valid elasticsearch queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:elasticsearch", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 			errCode:  ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Valid amqp queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:amqp", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 			errCode:  ErrNone, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid empty queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 			errCode:  ErrARNNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-08-18 07:34:03 +08:00
										 |  |  | 		// Invalid notification service type.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sns:us-east-1:1:listen", | 
					
						
							|  |  |  | 			errCode:  ErrARNNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		// Invalid region 'us-west-1' in queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-west-1:1:redis", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 			errCode:  ErrRegionNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-08-18 07:34:03 +08:00
										 |  |  | 		// Invalid queue name empty in queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:", | 
					
						
							|  |  |  | 			errCode:  ErrARNNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid queue id empty in queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sqs:us-east-1::redis", | 
					
						
							|  |  |  | 			errCode:  ErrARNNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid queue id and queue name empty in queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sqs:us-east-1::", | 
					
						
							|  |  |  | 			errCode:  ErrARNNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Missing queue id and separator missing at the end in queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sqs:us-east-1:amqp", | 
					
						
							|  |  |  | 			errCode:  ErrARNNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		// Missing queue id and empty string at the end in queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sqs:us-east-1:", | 
					
						
							|  |  |  | 			errCode:  ErrARNNotification, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-18 07:34:03 +08:00
										 |  |  | 	// Validate all tests for queue arn.
 | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 	for i, testCase := range testCases { | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 		errCode := checkQueueARN(testCase.queueARN) | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		if testCase.errCode != errCode { | 
					
						
							|  |  |  | 			t.Errorf("Test %d: Expected \"%d\", got \"%d\"", i+1, testCase.errCode, errCode) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | // Test unmarshal queue arn.
 | 
					
						
							| 
									
										
										
										
											2016-10-21 16:25:17 +08:00
										 |  |  | func TestUnmarshalSQSARN(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 	rootPath, err := newTestConfig("us-east-1") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatalf("unable initialize config file, %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defer removeAll(rootPath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 		queueARN string | 
					
						
							|  |  |  | 		Type     string | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 	}{ | 
					
						
							| 
									
										
										
										
											2017-01-10 06:22:10 +08:00
										 |  |  | 		// Valid webhook queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:webhook", | 
					
						
							|  |  |  | 			Type:     "webhook", | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		// Valid redis queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:redis", | 
					
						
							|  |  |  | 			Type:     "redis", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		// Valid elasticsearch queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:elasticsearch", | 
					
						
							|  |  |  | 			Type:     "elasticsearch", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		// Valid amqp queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:amqp", | 
					
						
							|  |  |  | 			Type:     "amqp", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid empty queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "", | 
					
						
							|  |  |  | 			Type:     "", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid region 'us-west-1' in queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-west-1:1:redis", | 
					
						
							|  |  |  | 			Type:     "", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		// Partial queue arn.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:", | 
					
						
							|  |  |  | 			Type:     "", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		// Invalid queue service value.
 | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 			queueARN: "arn:minio:sqs:us-east-1:1:*", | 
					
						
							|  |  |  | 			Type:     "", | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							| 
									
										
										
										
											2016-08-05 13:01:58 +08:00
										 |  |  | 		mSqs := unmarshalSqsARN(testCase.queueARN) | 
					
						
							|  |  |  | 		if testCase.Type != mSqs.Type { | 
					
						
							|  |  |  | 			t.Errorf("Test %d: Expected \"%s\", got \"%s\"", i+1, testCase.Type, mSqs.Type) | 
					
						
							| 
									
										
										
										
											2016-07-26 15:01:35 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |