From 39ee1754843f483caff1242de9bd76f22cb222e1 Mon Sep 17 00:00:00 2001 From: niksis02 Date: Mon, 29 Dec 2025 21:10:52 +0400 Subject: [PATCH 1/2] fix: fixes the PutBucketPolicy response status Fixes #1712 A successful `PutBucketPolicy` call returns `204`(No Content) http status. This PR fixes the response status code, by sending correct `204`, insted of `200`. --- s3api/controllers/bucket-put.go | 1 + s3api/controllers/bucket-put_test.go | 6 +++++- tests/integration/PutBucketPolicy.go | 24 ++++++++++++++++++++++++ tests/integration/group-tests.go | 2 ++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/s3api/controllers/bucket-put.go b/s3api/controllers/bucket-put.go index 143f9a1..ff4c9bf 100644 --- a/s3api/controllers/bucket-put.go +++ b/s3api/controllers/bucket-put.go @@ -314,6 +314,7 @@ func (c S3ApiController) PutBucketPolicy(ctx *fiber.Ctx) (*Response, error) { return &Response{ MetaOpts: &MetaOptions{ BucketOwner: parsedAcl.Owner, + Status: http.StatusNoContent, }, }, err } diff --git a/s3api/controllers/bucket-put_test.go b/s3api/controllers/bucket-put_test.go index 689fef9..3440cde 100644 --- a/s3api/controllers/bucket-put_test.go +++ b/s3api/controllers/bucket-put_test.go @@ -641,7 +641,10 @@ func TestS3ApiController_PutBucketPolicy(t *testing.T) { }, output: testOutput{ response: &Response{ - MetaOpts: &MetaOptions{BucketOwner: "root"}, + MetaOpts: &MetaOptions{ + BucketOwner: "root", + Status: http.StatusNoContent, + }, }, err: s3err.GetAPIError(s3err.ErrNoSuchBucket), }, @@ -656,6 +659,7 @@ func TestS3ApiController_PutBucketPolicy(t *testing.T) { response: &Response{ MetaOpts: &MetaOptions{ BucketOwner: "root", + Status: http.StatusNoContent, }, }, }, diff --git a/tests/integration/PutBucketPolicy.go b/tests/integration/PutBucketPolicy.go index 5bbfe2c..d17e9be 100644 --- a/tests/integration/PutBucketPolicy.go +++ b/tests/integration/PutBucketPolicy.go @@ -17,6 +17,8 @@ package integration import ( "context" "fmt" + "net/http" + "time" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/versity/versitygw/s3err" @@ -693,3 +695,25 @@ func PutBucketPolicy_success(s *S3Conf) error { return nil }) } + +func PutBucketPolicy_status(s *S3Conf) error { + testname := "PutBucketPolicy_status" + return actionHandler(s, testname, func(s3client *s3.Client, bucket string) error { + doc := genPolicyDoc("Allow", `"*"`, `"s3:GetObject"`, fmt.Sprintf(`"arn:aws:s3:::%s/*"`, bucket)) + req, err := createSignedReq(http.MethodPut, s.endpoint, bucket+"?policy", s.awsID, s.awsSecret, "s3", s.awsRegion, []byte(doc), time.Now(), nil) + if err != nil { + return err + } + + resp, err := s.httpClient.Do(req) + if err != nil { + return err + } + + if resp.StatusCode != http.StatusNoContent { + return fmt.Errorf("expected the response status code to be %v, instead got %v", http.StatusNoContent, resp.StatusCode) + } + + return nil + }) +} diff --git a/tests/integration/group-tests.go b/tests/integration/group-tests.go index 91af97d..0ae5d65 100644 --- a/tests/integration/group-tests.go +++ b/tests/integration/group-tests.go @@ -560,6 +560,7 @@ func TestPutBucketPolicy(ts *TestState) { ts.Run(PutBucketPolicy_any_char_match) ts.Run(PutBucketPolicy_version) ts.Run(PutBucketPolicy_success) + ts.Run(PutBucketPolicy_status) } func TestGetBucketPolicy(ts *TestState) { @@ -1505,6 +1506,7 @@ func GetIntTests() IntTests { "PutBucketPolicy_any_char_match": PutBucketPolicy_any_char_match, "PutBucketPolicy_version": PutBucketPolicy_version, "PutBucketPolicy_success": PutBucketPolicy_success, + "PutBucketPolicy_status": PutBucketPolicy_status, "GetBucketPolicy_non_existing_bucket": GetBucketPolicy_non_existing_bucket, "GetBucketPolicy_not_set": GetBucketPolicy_not_set, "GetBucketPolicy_success": GetBucketPolicy_success, From 35596b38ae524a3d98b0892b22ee620724d3a79c Mon Sep 17 00:00:00 2001 From: Luke McCrone Date: Mon, 29 Dec 2025 14:29:08 -0300 Subject: [PATCH 2/2] test: change 200 in test to 204 --- tests/commands/put_bucket_policy.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/commands/put_bucket_policy.sh b/tests/commands/put_bucket_policy.sh index 8428d88..6084d0e 100644 --- a/tests/commands/put_bucket_policy.sh +++ b/tests/commands/put_bucket_policy.sh @@ -71,8 +71,8 @@ put_bucket_policy_rest() { log 2 "error putting bucket policy: $result" return 1 fi - if [ "$result" != "200" ]; then - log 2 "expected '200', was '$result' ($(cat "$TEST_FILE_FOLDER/result.txt"))" + if [ "$result" != "204" ]; then + log 2 "expected '204', was '$result' ($(cat "$TEST_FILE_FOLDER/result.txt"))" return 1 fi return 0