From 7bd32a2cfaeaff152a7d7efd1a5324687a2df638 Mon Sep 17 00:00:00 2001 From: jonaustin09 Date: Thu, 31 Oct 2024 18:30:07 -0400 Subject: [PATCH] fix: Changes the PutBucketTagging action response status code from 200(OK) to 204(No Content) --- s3api/controllers/base.go | 1 + s3api/controllers/base_test.go | 2 +- tests/integration/group-tests.go | 2 ++ tests/integration/tests.go | 39 ++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/s3api/controllers/base.go b/s3api/controllers/base.go index 6f1207b..00e5ec5 100644 --- a/s3api/controllers/base.go +++ b/s3api/controllers/base.go @@ -1150,6 +1150,7 @@ func (c S3ApiController) PutBucketActions(ctx *fiber.Ctx) error { MetricsMng: c.mm, Action: metrics.ActionPutBucketTagging, BucketOwner: parsedAcl.Owner, + Status: http.StatusNoContent, }) } diff --git a/s3api/controllers/base_test.go b/s3api/controllers/base_test.go index a8881d4..635af42 100644 --- a/s3api/controllers/base_test.go +++ b/s3api/controllers/base_test.go @@ -750,7 +750,7 @@ func TestS3ApiController_PutBucketActions(t *testing.T) { req: httptest.NewRequest(http.MethodPut, "/my-bucket?tagging", strings.NewReader(tagBody)), }, wantErr: false, - statusCode: 200, + statusCode: 204, }, { name: "Put-bucket-ownership-controls-invalid-ownership", diff --git a/tests/integration/group-tests.go b/tests/integration/group-tests.go index 47ede0c..bf87006 100644 --- a/tests/integration/group-tests.go +++ b/tests/integration/group-tests.go @@ -116,6 +116,7 @@ func TestPutBucketTagging(s *S3Conf) { PutBucketTagging_non_existing_bucket(s) PutBucketTagging_long_tags(s) PutBucketTagging_success(s) + PutBucketTagging_success_status(s) } func TestGetBucketTagging(s *S3Conf) { @@ -703,6 +704,7 @@ func GetIntTests() IntTests { "PutBucketTagging_non_existing_bucket": PutBucketTagging_non_existing_bucket, "PutBucketTagging_long_tags": PutBucketTagging_long_tags, "PutBucketTagging_success": PutBucketTagging_success, + "PutBucketTagging_success_status": PutBucketTagging_success_status, "GetBucketTagging_non_existing_bucket": GetBucketTagging_non_existing_bucket, "GetBucketTagging_unset_tags": GetBucketTagging_unset_tags, "GetBucketTagging_success": GetBucketTagging_success, diff --git a/tests/integration/tests.go b/tests/integration/tests.go index 8ad971b..6d97472 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -2672,6 +2672,45 @@ func PutBucketTagging_success(s *S3Conf) error { }) } +func PutBucketTagging_success_status(s *S3Conf) error { + testName := "PutBucketTagging_success_status" + return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { + tagging := types.Tagging{ + TagSet: []types.Tag{ + { + Key: getPtr("key"), + Value: getPtr("val"), + }, + }, + } + + taggingParsed, err := xml.Marshal(tagging) + if err != nil { + return fmt.Errorf("err parsing tagging: %w", err) + } + + req, err := createSignedReq(http.MethodPut, s.endpoint, fmt.Sprintf("%v?tagging=", bucket), s.awsID, s.awsSecret, "s3", s.awsRegion, taggingParsed, time.Now(), nil) + if err != nil { + return fmt.Errorf("err signing the request: %w", err) + } + + client := http.Client{ + Timeout: shortTimeout, + } + + resp, err := client.Do(req) + if err != nil { + return fmt.Errorf("err sending request: %w", err) + } + + if resp.StatusCode != http.StatusNoContent { + return fmt.Errorf("expected the response status code to be %v, instad got %v", http.StatusNoContent, resp.StatusCode) + } + + return nil + }) +} + func GetBucketTagging_non_existing_bucket(s *S3Conf) error { testName := "GetBucketTagging_non_existing_object" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {