65 lines
1.9 KiB
Go
65 lines
1.9 KiB
Go
package handler
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"testing"
|
|
|
|
s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTransformS3Errors(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
err error
|
|
expected s3errors.ErrorCode
|
|
}{
|
|
{
|
|
name: "simple std error to internal error",
|
|
err: errors.New("some error"),
|
|
expected: s3errors.ErrInternalError,
|
|
},
|
|
{
|
|
name: "layer access denied error to s3 access denied error",
|
|
err: frostfs.ErrAccessDenied,
|
|
expected: s3errors.ErrAccessDenied,
|
|
},
|
|
{
|
|
name: "wrapped layer access denied error to s3 access denied error",
|
|
err: fmt.Errorf("wrap: %w", frostfs.ErrAccessDenied),
|
|
expected: s3errors.ErrAccessDenied,
|
|
},
|
|
{
|
|
name: "layer node access denied error to s3 access denied error",
|
|
err: tree.ErrNodeAccessDenied,
|
|
expected: s3errors.ErrAccessDenied,
|
|
},
|
|
{
|
|
name: "layer gateway timeout error to s3 gateway timeout error",
|
|
err: frostfs.ErrGatewayTimeout,
|
|
expected: s3errors.ErrGatewayTimeout,
|
|
},
|
|
{
|
|
name: "s3 error to s3 error",
|
|
err: s3errors.GetAPIError(s3errors.ErrInvalidPart),
|
|
expected: s3errors.ErrInvalidPart,
|
|
},
|
|
{
|
|
name: "wrapped s3 error to s3 error",
|
|
err: fmt.Errorf("wrap: %w", s3errors.GetAPIError(s3errors.ErrInvalidPart)),
|
|
expected: s3errors.ErrInvalidPart,
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
err := transformToS3Error(tc.err)
|
|
s3err, ok := err.(s3errors.Error)
|
|
require.True(t, ok, "error must be s3 error")
|
|
require.Equalf(t, tc.expected, s3err.ErrCode,
|
|
"expected: '%s', got: '%s'",
|
|
s3errors.GetAPIError(tc.expected).Code, s3errors.GetAPIError(s3err.ErrCode).Code)
|
|
})
|
|
}
|
|
}
|