mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
	
	
		
			143 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			143 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | /* | ||
|  |  * Minio Cloud Storage, (C) 2017 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. | ||
|  |  */ | ||
|  | 
 | ||
|  | package cmd | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"net/http" | ||
|  | 	"reflect" | ||
|  | 	"testing" | ||
|  | 
 | ||
|  | 	"github.com/Azure/azure-sdk-for-go/storage" | ||
|  | ) | ||
|  | 
 | ||
|  | // Test canonical metadata.
 | ||
|  | func TestCanonicalMetadata(t *testing.T) { | ||
|  | 	metadata := map[string]string{ | ||
|  | 		"accept-encoding":  "gzip", | ||
|  | 		"content-encoding": "gzip", | ||
|  | 	} | ||
|  | 	expectedCanonicalM := map[string]string{ | ||
|  | 		"Accept-Encoding":  "gzip", | ||
|  | 		"Content-Encoding": "gzip", | ||
|  | 	} | ||
|  | 	actualCanonicalM := canonicalMetadata(metadata) | ||
|  | 	if !reflect.DeepEqual(actualCanonicalM, expectedCanonicalM) { | ||
|  | 		t.Fatalf("Test failed, expected %#v, got %#v", expectedCanonicalM, actualCanonicalM) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // Add tests for azure to object error.
 | ||
|  | func TestAzureToObjectError(t *testing.T) { | ||
|  | 	testCases := []struct { | ||
|  | 		actualErr      error | ||
|  | 		expectedErr    error | ||
|  | 		bucket, object string | ||
|  | 	}{ | ||
|  | 		{ | ||
|  | 			nil, nil, "", "", | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			traceError(errUnexpected), errUnexpected, "", "", | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			traceError(errUnexpected), traceError(errUnexpected), "", "", | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			traceError(storage.AzureStorageServiceError{ | ||
|  | 				Code: "ContainerAlreadyExists", | ||
|  | 			}), BucketExists{Bucket: "bucket"}, "bucket", "", | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			traceError(storage.AzureStorageServiceError{ | ||
|  | 				Code: "InvalidResourceName", | ||
|  | 			}), BucketNameInvalid{Bucket: "bucket."}, "bucket.", "", | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			traceError(storage.AzureStorageServiceError{ | ||
|  | 				StatusCode: http.StatusNotFound, | ||
|  | 			}), ObjectNotFound{ | ||
|  | 				Bucket: "bucket", | ||
|  | 				Object: "object", | ||
|  | 			}, "bucket", "object", | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			traceError(storage.AzureStorageServiceError{ | ||
|  | 				StatusCode: http.StatusNotFound, | ||
|  | 			}), BucketNotFound{Bucket: "bucket"}, "bucket", "", | ||
|  | 		}, | ||
|  | 		{ | ||
|  | 			traceError(storage.AzureStorageServiceError{ | ||
|  | 				StatusCode: http.StatusBadRequest, | ||
|  | 			}), BucketNameInvalid{Bucket: "bucket."}, "bucket.", "", | ||
|  | 		}, | ||
|  | 	} | ||
|  | 	for i, testCase := range testCases { | ||
|  | 		err := azureToObjectError(testCase.actualErr, testCase.bucket, testCase.object) | ||
|  | 		if err != nil { | ||
|  | 			if err.Error() != testCase.expectedErr.Error() { | ||
|  | 				t.Errorf("Test %d: Expected error %s, got %s", i+1, testCase.expectedErr, err) | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // Test azureGetBlockID().
 | ||
|  | func TestAzureGetBlockID(t *testing.T) { | ||
|  | 	testCases := []struct { | ||
|  | 		partID  int | ||
|  | 		md5     string | ||
|  | 		blockID string | ||
|  | 	}{ | ||
|  | 		{1, "d41d8cd98f00b204e9800998ecf8427e", "MDAwMDEuZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2U="}, | ||
|  | 		{2, "a7fb6b7b36ee4ed66b5546fac4690273", "MDAwMDIuYTdmYjZiN2IzNmVlNGVkNjZiNTU0NmZhYzQ2OTAyNzM="}, | ||
|  | 	} | ||
|  | 	for _, test := range testCases { | ||
|  | 		blockID := azureGetBlockID(test.partID, test.md5) | ||
|  | 		if blockID != test.blockID { | ||
|  | 			t.Fatalf("%s is not equal to %s", blockID, test.blockID) | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // Test azureParseBlockID().
 | ||
|  | func TestAzureParseBlockID(t *testing.T) { | ||
|  | 	testCases := []struct { | ||
|  | 		partID  int | ||
|  | 		md5     string | ||
|  | 		blockID string | ||
|  | 	}{ | ||
|  | 		{1, "d41d8cd98f00b204e9800998ecf8427e", "MDAwMDEuZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2U="}, | ||
|  | 		{2, "a7fb6b7b36ee4ed66b5546fac4690273", "MDAwMDIuYTdmYjZiN2IzNmVlNGVkNjZiNTU0NmZhYzQ2OTAyNzM="}, | ||
|  | 	} | ||
|  | 	for _, test := range testCases { | ||
|  | 		partID, md5, err := azureParseBlockID(test.blockID) | ||
|  | 		if err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 		if partID != test.partID { | ||
|  | 			t.Fatalf("%d not equal to %d", partID, test.partID) | ||
|  | 		} | ||
|  | 		if md5 != test.md5 { | ||
|  | 			t.Fatalf("%s not equal to %s", md5, test.md5) | ||
|  | 		} | ||
|  | 	} | ||
|  | 	_, _, err := azureParseBlockID("junk") | ||
|  | 	if err == nil { | ||
|  | 		t.Fatal("Expected azureParseBlockID() to return error") | ||
|  | 	} | ||
|  | } |