Translate s3 gateway errors at object layer (#5006)
parent
670e3e0c8b
commit
13a7033505
@ -0,0 +1,120 @@ |
|||||||
|
/* |
||||||
|
* 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 ( |
||||||
|
"errors" |
||||||
|
"testing" |
||||||
|
|
||||||
|
minio "github.com/minio/minio-go" |
||||||
|
) |
||||||
|
|
||||||
|
func errResponse(code string) minio.ErrorResponse { |
||||||
|
return minio.ErrorResponse{ |
||||||
|
Code: code, |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func TestS3ToObjectError(t *testing.T) { |
||||||
|
testCases := []struct { |
||||||
|
inputErr error |
||||||
|
expectedErr error |
||||||
|
bucket, object string |
||||||
|
}{ |
||||||
|
{ |
||||||
|
inputErr: errResponse("BucketAlreadyOwnedByYou"), |
||||||
|
expectedErr: BucketAlreadyOwnedByYou{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("BucketNotEmpty"), |
||||||
|
expectedErr: BucketNotEmpty{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("InvalidBucketName"), |
||||||
|
expectedErr: BucketNameInvalid{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("NoSuchBucketPolicy"), |
||||||
|
expectedErr: PolicyNotFound{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("NoSuchBucket"), |
||||||
|
expectedErr: BucketNotFound{}, |
||||||
|
}, |
||||||
|
// with empty Object in minio.ErrorRepsonse, NoSuchKey
|
||||||
|
// is interpreted as BucketNotFound
|
||||||
|
{ |
||||||
|
inputErr: errResponse("NoSuchKey"), |
||||||
|
expectedErr: BucketNotFound{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("NoSuchUpload"), |
||||||
|
expectedErr: InvalidUploadID{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("XMinioInvalidObjectName"), |
||||||
|
expectedErr: ObjectNameInvalid{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("AccessDenied"), |
||||||
|
expectedErr: PrefixAccessDenied{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("XAmzContentSHA256Mismatch"), |
||||||
|
expectedErr: SHA256Mismatch{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: errResponse("EntityTooSmall"), |
||||||
|
expectedErr: PartTooSmall{}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
inputErr: nil, |
||||||
|
expectedErr: nil, |
||||||
|
}, |
||||||
|
// Special test case for NoSuchKey with object name
|
||||||
|
{ |
||||||
|
inputErr: minio.ErrorResponse{ |
||||||
|
Code: "NoSuchKey", |
||||||
|
}, |
||||||
|
expectedErr: ObjectNotFound{}, |
||||||
|
bucket: "bucket", |
||||||
|
object: "obbject", |
||||||
|
}, |
||||||
|
|
||||||
|
// N B error values that aren't of expected types
|
||||||
|
// should be left untouched.
|
||||||
|
// Special test case for error that is not of type
|
||||||
|
// minio.ErrorResponse
|
||||||
|
{ |
||||||
|
inputErr: errors.New("not a minio.ErrorResponse"), |
||||||
|
expectedErr: errors.New("not a minio.ErrorResponse"), |
||||||
|
}, |
||||||
|
// Special test case for error value that is not of
|
||||||
|
// type (*Error)
|
||||||
|
{ |
||||||
|
inputErr: errors.New("not a *Error"), |
||||||
|
expectedErr: errors.New("not a *Error"), |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
for i, tc := range testCases { |
||||||
|
actualErr := s3ToObjectError(tc.inputErr, tc.bucket, tc.object) |
||||||
|
if e, ok := actualErr.(*Error); ok && e.e != tc.expectedErr { |
||||||
|
t.Errorf("Test case %d: Expected error %v but received error %v", i+1, tc.expectedErr, e.e) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue