Merge pull request #1719 from versity/sis/putbucketpolicy-status

fix: fixes the PutBucketPolicy response status
This commit is contained in:
Ben McClelland
2025-12-31 00:29:33 -08:00
committed by GitHub
5 changed files with 34 additions and 3 deletions

View File

@@ -314,6 +314,7 @@ func (c S3ApiController) PutBucketPolicy(ctx *fiber.Ctx) (*Response, error) {
return &Response{
MetaOpts: &MetaOptions{
BucketOwner: parsedAcl.Owner,
Status: http.StatusNoContent,
},
}, err
}

View File

@@ -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,
},
},
},

View File

@@ -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

View File

@@ -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
})
}

View File

@@ -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) {
@@ -1526,6 +1527,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,