3 changed files with 51 additions and 11 deletions
-
10weed/s3api/s3api_object_handlers_copy_unified.go
-
16weed/s3api/s3api_object_handlers_put.go
-
36weed/s3api/s3api_object_handlers_put_test.go
@ -1,55 +1,73 @@ |
|||||
package s3api |
package s3api |
||||
|
|
||||
import ( |
import ( |
||||
|
"errors" |
||||
|
"fmt" |
||||
"testing" |
"testing" |
||||
|
|
||||
"github.com/seaweedfs/seaweedfs/weed/s3api/s3err" |
"github.com/seaweedfs/seaweedfs/weed/s3api/s3err" |
||||
|
weed_server "github.com/seaweedfs/seaweedfs/weed/server" |
||||
"github.com/seaweedfs/seaweedfs/weed/util/constants" |
"github.com/seaweedfs/seaweedfs/weed/util/constants" |
||||
) |
) |
||||
|
|
||||
func TestFilerErrorToS3Error(t *testing.T) { |
func TestFilerErrorToS3Error(t *testing.T) { |
||||
tests := []struct { |
tests := []struct { |
||||
name string |
name string |
||||
errString string |
|
||||
|
err error |
||||
expectedErr s3err.ErrorCode |
expectedErr s3err.ErrorCode |
||||
}{ |
}{ |
||||
|
{ |
||||
|
name: "nil error", |
||||
|
err: nil, |
||||
|
expectedErr: s3err.ErrNone, |
||||
|
}, |
||||
{ |
{ |
||||
name: "MD5 mismatch error", |
name: "MD5 mismatch error", |
||||
errString: constants.ErrMsgBadDigest, |
|
||||
|
err: errors.New(constants.ErrMsgBadDigest), |
||||
expectedErr: s3err.ErrBadDigest, |
expectedErr: s3err.ErrBadDigest, |
||||
}, |
}, |
||||
|
{ |
||||
|
name: "Read only error (direct)", |
||||
|
err: weed_server.ErrReadOnly, |
||||
|
expectedErr: s3err.ErrAccessDenied, |
||||
|
}, |
||||
|
{ |
||||
|
name: "Read only error (wrapped)", |
||||
|
err: fmt.Errorf("create file /buckets/test/file.txt: %w", weed_server.ErrReadOnly), |
||||
|
expectedErr: s3err.ErrAccessDenied, |
||||
|
}, |
||||
{ |
{ |
||||
name: "Context canceled error", |
name: "Context canceled error", |
||||
errString: "rpc error: code = Canceled desc = context canceled", |
|
||||
|
err: errors.New("rpc error: code = Canceled desc = context canceled"), |
||||
expectedErr: s3err.ErrInvalidRequest, |
expectedErr: s3err.ErrInvalidRequest, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: "Context canceled error (simple)", |
name: "Context canceled error (simple)", |
||||
errString: "context canceled", |
|
||||
|
err: errors.New("context canceled"), |
||||
expectedErr: s3err.ErrInvalidRequest, |
expectedErr: s3err.ErrInvalidRequest, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: "Directory exists error", |
name: "Directory exists error", |
||||
errString: "existing /path/to/file is a directory", |
|
||||
|
err: errors.New("existing /path/to/file is a directory"), |
||||
expectedErr: s3err.ErrExistingObjectIsDirectory, |
expectedErr: s3err.ErrExistingObjectIsDirectory, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: "File exists error", |
name: "File exists error", |
||||
errString: "/path/to/file is a file", |
|
||||
|
err: errors.New("/path/to/file is a file"), |
||||
expectedErr: s3err.ErrExistingObjectIsFile, |
expectedErr: s3err.ErrExistingObjectIsFile, |
||||
}, |
}, |
||||
{ |
{ |
||||
name: "Unknown error", |
name: "Unknown error", |
||||
errString: "some random error", |
|
||||
|
err: errors.New("some random error"), |
||||
expectedErr: s3err.ErrInternalError, |
expectedErr: s3err.ErrInternalError, |
||||
}, |
}, |
||||
} |
} |
||||
|
|
||||
for _, tt := range tests { |
for _, tt := range tests { |
||||
t.Run(tt.name, func(t *testing.T) { |
t.Run(tt.name, func(t *testing.T) { |
||||
result := filerErrorToS3Error(tt.errString) |
|
||||
|
result := filerErrorToS3Error(tt.err) |
||||
if result != tt.expectedErr { |
if result != tt.expectedErr { |
||||
t.Errorf("filerErrorToS3Error(%q) = %v, want %v", tt.errString, result, tt.expectedErr) |
|
||||
|
t.Errorf("filerErrorToS3Error(%v) = %v, want %v", tt.err, result, tt.expectedErr) |
||||
} |
} |
||||
}) |
}) |
||||
} |
} |
||||
|
|||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue