mirror of
https://github.com/versity/versitygw.git
synced 2026-08-17 04:36:19 +00:00
feat: adds Location, x-amz-bucket-arn response headers in CreateBucket
Closes #1873
This commit is contained in:
@@ -632,9 +632,21 @@ func (c S3ApiController) CreateBucket(ctx *fiber.Ctx) (*Response, error) {
|
||||
Tags: body.TagSet,
|
||||
},
|
||||
}, updAcl)
|
||||
if err != nil {
|
||||
return &Response{
|
||||
MetaOpts: &MetaOptions{
|
||||
BucketOwner: bucketOwner.Access,
|
||||
},
|
||||
}, err
|
||||
}
|
||||
|
||||
return &Response{
|
||||
MetaOpts: &MetaOptions{
|
||||
BucketOwner: bucketOwner.Access,
|
||||
},
|
||||
}, err
|
||||
Headers: map[string]*string{
|
||||
"Location": utils.GetStringPtr("/" + bucket),
|
||||
"x-amz-bucket-arn": utils.GetStringPtr(auth.ResourceArnPrefix + bucket),
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -888,12 +888,17 @@ func TestS3ApiController_CreateBucket(t *testing.T) {
|
||||
locals: map[utils.ContextKey]any{
|
||||
utils.ContextKeyAccount: adminAcc,
|
||||
},
|
||||
bucket: "my-bucket",
|
||||
},
|
||||
output: testOutput{
|
||||
response: &Response{
|
||||
MetaOpts: &MetaOptions{
|
||||
BucketOwner: adminAcc.Access,
|
||||
},
|
||||
Headers: map[string]*string{
|
||||
"Location": utils.GetStringPtr("/my-bucket"),
|
||||
"x-amz-bucket-arn": utils.GetStringPtr("arn:aws:s3:::my-bucket"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -641,3 +641,28 @@ func CreateBucket_invalid_canned_acl(s *S3Conf) error {
|
||||
return checkSdkApiErr(err, "InvalidArgument")
|
||||
})
|
||||
}
|
||||
|
||||
func CreateBucket_success(s *S3Conf) error {
|
||||
testName := "CreateBucket_success"
|
||||
return actionHandlerNoSetup(s, testName, func(s3client *s3.Client, bucket string) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), shortTimeout)
|
||||
res, err := s3client.CreateBucket(ctx, &s3.CreateBucketInput{
|
||||
Bucket: &bucket,
|
||||
})
|
||||
cancel()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
expectedLocation := "/" + bucket
|
||||
if getString(res.Location) != expectedLocation {
|
||||
return fmt.Errorf("expected the bucket Location to be %s, instead got %s", expectedLocation, getString(res.Location))
|
||||
}
|
||||
expectedArn := "arn:aws:s3:::" + bucket
|
||||
if getString(res.BucketArn) != expectedArn {
|
||||
return fmt.Errorf("expected the bucket arn to be %s, instead got %s", expectedArn, getString(res.BucketArn))
|
||||
}
|
||||
|
||||
return teardown(s, bucket)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -24,28 +24,6 @@ import (
|
||||
"github.com/versity/versitygw/s3err"
|
||||
)
|
||||
|
||||
func CreateDeleteBucket_success(s *S3Conf) error {
|
||||
testName := "CreateBucket_success"
|
||||
runF(testName)
|
||||
bucket := getBucketName()
|
||||
|
||||
err := setup(s, bucket)
|
||||
if err != nil {
|
||||
failF("%v: %v", testName, err)
|
||||
return fmt.Errorf("%v: %w", testName, err)
|
||||
|
||||
}
|
||||
|
||||
err = teardown(s, bucket)
|
||||
if err != nil {
|
||||
failF("%v: %v", testName, err)
|
||||
return fmt.Errorf("%v: %w", testName, err)
|
||||
}
|
||||
|
||||
passF(testName)
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteBucket_non_existing_bucket(s *S3Conf) error {
|
||||
testName := "DeleteBucket_non_existing_bucket"
|
||||
runF(testName)
|
||||
|
||||
@@ -81,7 +81,7 @@ func TestCreateBucket(ts *TestState) {
|
||||
ts.Run(CreateBucket_non_default_acl)
|
||||
ts.Run(CreateBucket_private_canned_acl)
|
||||
ts.Run(CreateBucket_private_canned_acl_bucket_owner_enforced_ownership)
|
||||
ts.Run(CreateDeleteBucket_success)
|
||||
ts.Run(CreateBucket_success)
|
||||
ts.Run(CreateBucket_default_object_lock)
|
||||
ts.Run(CreateBucket_invalid_location_constraint)
|
||||
ts.Run(CreateBucket_long_tags)
|
||||
@@ -1246,7 +1246,7 @@ func GetIntTests() IntTests {
|
||||
"CreateBucket_invalid_ownership": CreateBucket_invalid_ownership,
|
||||
"CreateBucket_ownership_with_acl": CreateBucket_ownership_with_acl,
|
||||
"CreateBucket_as_user": CreateBucket_as_user,
|
||||
"CreateDeleteBucket_success": CreateDeleteBucket_success,
|
||||
"CreateBucket_success": CreateBucket_success,
|
||||
"CreateBucket_default_acl": CreateBucket_default_acl,
|
||||
"CreateBucket_non_default_acl": CreateBucket_non_default_acl,
|
||||
"CreateBucket_private_canned_acl": CreateBucket_private_canned_acl,
|
||||
|
||||
Reference in New Issue
Block a user