From bd2be82f5a49093e27559e7e4f7bef8327979f1a Mon Sep 17 00:00:00 2001 From: Danielle Miu <29378233+DanielleMiu@users.noreply.github.com> Date: Mon, 15 Jul 2024 18:12:25 -0400 Subject: [PATCH] update certain error codes --- internal/errors/error.go | 11 +++++++ internal/errors/error_test.go | 14 ++++----- plugin/service/storage/error_test.go | 2 +- plugin/service/storage/plugin_test.go | 44 +++++++++++++-------------- 4 files changed, 41 insertions(+), 30 deletions(-) diff --git a/internal/errors/error.go b/internal/errors/error.go index 571baf8..5487601 100644 --- a/internal/errors/error.go +++ b/internal/errors/error.go @@ -55,6 +55,12 @@ const ( // The InvalidObjectState error is returned when trying to // access an object that was moved into cold storage. awsErrorInvalidObjectState = "InvalidObjectState" + + // RequestTimeout is returned when an http request takes longer than allowed + awsErrorRequestTimeout = "RequestTimeout" + + // RequestTimeoutException is returned when an http request takes longer than allowed + awsErrorRequestTimeoutException = "RequestTimeoutException" ) // InvalidArgumentError returns an grpc invalid argument status error. @@ -141,6 +147,11 @@ func ParseAWSError(err error, msg string) (st *status.Status, permission *pb.Per case awsErrorInvalidObjectState: statusMsg := fmt.Sprintf("aws %s error: %s", serviceName, msg) return status.New(codes.NotFound, statusMsg), nil + case awsErrorRequestTimeout: + fallthrough + case awsErrorRequestTimeoutException: + statusMsg := fmt.Sprintf("aws %s error: %s", serviceName, msg) + return status.New(codes.DeadlineExceeded, statusMsg), nil } } diff --git a/internal/errors/error_test.go b/internal/errors/error_test.go index ca884a6..ec41ab5 100644 --- a/internal/errors/error_test.go +++ b/internal/errors/error_test.go @@ -90,7 +90,7 @@ func Test_ParseAWSError(t *testing.T) { name: "http-status-code-request-timeout", err: TestAwsHttpResponseError(http.StatusRequestTimeout, "request timeout"), expectedStatusCode: codes.DeadlineExceeded, - expectedStatusMsg: "aws service unknown: connectivity error: test", + expectedStatusMsg: "aws service unknown: timeout error: test", expectedPermission: &pb.Permission{ State: pb.StateType_STATE_TYPE_UNKNOWN, }, @@ -98,7 +98,7 @@ func Test_ParseAWSError(t *testing.T) { { name: "http-status-code-internal-server-error", err: TestAwsHttpResponseError(http.StatusInternalServerError, "internal server error"), - expectedStatusCode: codes.DeadlineExceeded, + expectedStatusCode: codes.Unavailable, expectedStatusMsg: "aws service unknown: connectivity error: test", expectedPermission: &pb.Permission{ State: pb.StateType_STATE_TYPE_UNKNOWN, @@ -107,7 +107,7 @@ func Test_ParseAWSError(t *testing.T) { { name: "http-status-code-bad-gateway", err: TestAwsHttpResponseError(http.StatusBadGateway, "bad gateway"), - expectedStatusCode: codes.DeadlineExceeded, + expectedStatusCode: codes.Unavailable, expectedStatusMsg: "aws service unknown: connectivity error: test", expectedPermission: &pb.Permission{ State: pb.StateType_STATE_TYPE_UNKNOWN, @@ -116,7 +116,7 @@ func Test_ParseAWSError(t *testing.T) { { name: "http-status-code-service-unavailable", err: TestAwsHttpResponseError(http.StatusServiceUnavailable, "service unavailable"), - expectedStatusCode: codes.DeadlineExceeded, + expectedStatusCode: codes.Unavailable, expectedStatusMsg: "aws service unknown: connectivity error: test", expectedPermission: &pb.Permission{ State: pb.StateType_STATE_TYPE_UNKNOWN, @@ -126,7 +126,7 @@ func Test_ParseAWSError(t *testing.T) { name: "http-status-code-gateway-timeout", err: TestAwsHttpResponseError(http.StatusGatewayTimeout, "gateway timeout"), expectedStatusCode: codes.DeadlineExceeded, - expectedStatusMsg: "aws service unknown: connectivity error: test", + expectedStatusMsg: "aws service unknown: timeout error: test", expectedPermission: &pb.Permission{ State: pb.StateType_STATE_TYPE_UNKNOWN, }, @@ -261,7 +261,7 @@ func Test_ParseAWSError(t *testing.T) { name: "aws-request-timeout", err: TestAwsError("RequestTimeout", "request timeout"), expectedStatusCode: codes.DeadlineExceeded, - expectedStatusMsg: "aws service unknown: connectivity error: test", + expectedStatusMsg: "aws unknown error: test", expectedPermission: &pb.Permission{ State: pb.StateType_STATE_TYPE_UNKNOWN, }, @@ -270,7 +270,7 @@ func Test_ParseAWSError(t *testing.T) { name: "aws-request-timeout-exception", err: TestAwsError("RequestTimeoutException", "request timeout exception"), expectedStatusCode: codes.DeadlineExceeded, - expectedStatusMsg: "aws service unknown: connectivity error: test", + expectedStatusMsg: "aws unknown error: test", expectedPermission: &pb.Permission{ State: pb.StateType_STATE_TYPE_UNKNOWN, }, diff --git a/plugin/service/storage/error_test.go b/plugin/service/storage/error_test.go index 3671a7b..8ee5712 100644 --- a/plugin/service/storage/error_test.go +++ b/plugin/service/storage/error_test.go @@ -123,7 +123,7 @@ func Test_ParseS3Error(t *testing.T) { req: &pb.GetObjectRequest{}, err: TestAwsS3Error("RequestTimeout", "action", "request timeout"), expectedStatusCode: codes.DeadlineExceeded, - expectedStatusMsg: "aws service s3: connectivity error: test", + expectedStatusMsg: "aws s3 error: test", expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ diff --git a/plugin/service/storage/plugin_test.go b/plugin/service/storage/plugin_test.go index 9283484..5674fb7 100644 --- a/plugin/service/storage/plugin_test.go +++ b/plugin/service/storage/plugin_test.go @@ -179,7 +179,7 @@ func TestStoragePlugin_OnCreateStorageBucket(t *testing.T) { )), }, expectedErrContains: "aws service s3: invalid credentials error: failed to put object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -212,7 +212,7 @@ func TestStoragePlugin_OnCreateStorageBucket(t *testing.T) { )), }, expectedErrContains: "aws service s3: throttling error: failed to put object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -246,7 +246,7 @@ func TestStoragePlugin_OnCreateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to get object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -281,7 +281,7 @@ func TestStoragePlugin_OnCreateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: throttling error: failed to get object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -315,7 +315,7 @@ func TestStoragePlugin_OnCreateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to head object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -350,7 +350,7 @@ func TestStoragePlugin_OnCreateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: throttling error: failed to head object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -385,7 +385,7 @@ func TestStoragePlugin_OnCreateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to delete object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Delete: &pb.Permission{ @@ -921,7 +921,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { )), }, expectedErrContains: "aws service s3: invalid credentials error: failed to put object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -954,7 +954,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { )), }, expectedErrContains: "aws service s3: throttling error: failed to put object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -988,7 +988,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to get object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -1023,7 +1023,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: throttling error: failed to get object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -1057,7 +1057,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to head object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -1092,7 +1092,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: throttling error: failed to head object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -1256,7 +1256,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to head object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -1364,7 +1364,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to put object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -1600,7 +1600,7 @@ func TestStoragePlugin_OnUpdateStorageBucket(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to put object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -2426,7 +2426,7 @@ func TestStoragePlugin_ValidatePermissions(t *testing.T) { )), }, expectedErrContains: "aws service s3: invalid credentials error: failed to put object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -2459,7 +2459,7 @@ func TestStoragePlugin_ValidatePermissions(t *testing.T) { )), }, expectedErrContains: "aws service s3: throttling error: failed to put object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Write: &pb.Permission{ @@ -2493,7 +2493,7 @@ func TestStoragePlugin_ValidatePermissions(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to get object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -2528,7 +2528,7 @@ func TestStoragePlugin_ValidatePermissions(t *testing.T) { ), }, expectedErrContains: "aws service s3: throttling error: failed to get object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -2562,7 +2562,7 @@ func TestStoragePlugin_ValidatePermissions(t *testing.T) { ), }, expectedErrContains: "aws service s3: invalid credentials error: failed to head object", - expectedErrCode: codes.PermissionDenied, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{ @@ -2597,7 +2597,7 @@ func TestStoragePlugin_ValidatePermissions(t *testing.T) { ), }, expectedErrContains: "aws service s3: throttling error: failed to head object", - expectedErrCode: codes.Unavailable, + expectedErrCode: codes.FailedPrecondition, expectedDetails: &pb.StorageBucketCredentialState{ State: &pb.Permissions{ Read: &pb.Permission{