Merge pull request #1415 from versity/sis/listbuckets-region

fix: adds bucket region in ListBuckets result
This commit is contained in:
Ben McClelland
2025-07-25 14:42:23 -07:00
committed by GitHub
6 changed files with 43 additions and 22 deletions

View File

@@ -51,6 +51,8 @@ const (
minPartNumber = 1
maxPartNumber = 10000
defaultMaxBuckets = int32(10000)
defaultRegion = "us-east-1"
)
var (

View File

@@ -30,6 +30,10 @@ func (c S3ApiController) ListBuckets(ctx *fiber.Ctx) (*Response, error) {
prefix := ctx.Query("prefix")
maxBucketsStr := ctx.Query("max-buckets")
acct := utils.ContextKeyAccount.Get(ctx).(auth.Account)
region, ok := utils.ContextKeyRegion.Get(ctx).(string)
if !ok {
region = defaultRegion
}
maxBuckets := defaultMaxBuckets
if maxBucketsStr != "" {
@@ -51,8 +55,15 @@ func (c S3ApiController) ListBuckets(ctx *fiber.Ctx) (*Response, error) {
ContinuationToken: cToken,
Prefix: prefix,
})
if err != nil {
return &Response{}, err
}
for i := range res.Buckets.Bucket {
res.Buckets.Bucket[i].BucketRegion = region
}
return &Response{
Data: res,
MetaOpts: &MetaOptions{},
}, err
Data: res,
}, nil
}

View File

@@ -58,15 +58,12 @@ func TestS3ApiController_ListBuckets(t *testing.T) {
name: "backend returns error",
input: testInput{
locals: defaultLocals,
beRes: validRes,
beErr: s3err.GetAPIError(s3err.ErrNoSuchBucket),
beRes: s3response.ListAllMyBucketsResult{},
},
output: testOutput{
response: &Response{
Data: validRes,
MetaOpts: &MetaOptions{},
},
err: s3err.GetAPIError(s3err.ErrNoSuchBucket),
response: &Response{},
err: s3err.GetAPIError(s3err.ErrNoSuchBucket),
},
},
{
@@ -80,8 +77,7 @@ func TestS3ApiController_ListBuckets(t *testing.T) {
},
output: testOutput{
response: &Response{
Data: validRes,
MetaOpts: &MetaOptions{},
Data: validRes,
},
},
},

View File

@@ -317,6 +317,7 @@ type ListAllMyBucketsResult struct {
type ListAllMyBucketsEntry struct {
Name string
BucketRegion string
CreationDate time.Time
}

View File

@@ -1726,7 +1726,7 @@ func HeadBucket_success(s *S3Conf) error {
func ListBuckets_as_user(s *S3Conf) error {
testName := "ListBuckets_as_user"
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
buckets := []types.Bucket{{Name: &bucket}}
buckets := []types.Bucket{{Name: &bucket, BucketRegion: &s.awsRegion}}
for range 6 {
bckt := getBucketName()
@@ -1736,7 +1736,8 @@ func ListBuckets_as_user(s *S3Conf) error {
}
buckets = append(buckets, types.Bucket{
Name: &bckt,
Name: &bckt,
BucketRegion: &s.awsRegion,
})
}
@@ -1787,7 +1788,7 @@ func ListBuckets_as_user(s *S3Conf) error {
func ListBuckets_as_admin(s *S3Conf) error {
testName := "ListBuckets_as_admin"
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
buckets := []types.Bucket{{Name: &bucket}}
buckets := []types.Bucket{{Name: &bucket, BucketRegion: &s.awsRegion}}
for range 6 {
bckt := getBucketName()
@@ -1797,7 +1798,8 @@ func ListBuckets_as_admin(s *S3Conf) error {
}
buckets = append(buckets, types.Bucket{
Name: &bckt,
Name: &bckt,
BucketRegion: &s.awsRegion,
})
}
@@ -1849,7 +1851,7 @@ func ListBuckets_with_prefix(s *S3Conf) error {
testName := "ListBuckets_with_prefix"
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
prefix := "my-prefix-"
allBuckets, prefixedBuckets := []types.Bucket{{Name: &bucket}}, []types.Bucket{}
allBuckets, prefixedBuckets := []types.Bucket{{Name: &bucket, BucketRegion: &s.awsRegion}}, []types.Bucket{}
for i := range 5 {
bckt := getBucketName()
if i%2 == 0 {
@@ -1862,12 +1864,14 @@ func ListBuckets_with_prefix(s *S3Conf) error {
}
allBuckets = append(allBuckets, types.Bucket{
Name: &bckt,
Name: &bckt,
BucketRegion: &s.awsRegion,
})
if i%2 == 0 {
prefixedBuckets = append(prefixedBuckets, types.Bucket{
Name: &bckt,
Name: &bckt,
BucketRegion: &s.awsRegion,
})
}
}
@@ -1936,7 +1940,7 @@ func ListBuckets_invalid_max_buckets(s *S3Conf) error {
func ListBuckets_truncated(s *S3Conf) error {
testName := "ListBuckets_truncated"
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
buckets := []types.Bucket{{Name: &bucket}}
buckets := []types.Bucket{{Name: &bucket, BucketRegion: &s.awsRegion}}
for range 5 {
bckt := getBucketName()
@@ -1946,7 +1950,8 @@ func ListBuckets_truncated(s *S3Conf) error {
}
buckets = append(buckets, types.Bucket{
Name: &bckt,
Name: &bckt,
BucketRegion: &s.awsRegion,
})
}
@@ -2027,7 +2032,7 @@ func ListBuckets_empty_success(s *S3Conf) error {
func ListBuckets_success(s *S3Conf) error {
testName := "ListBuckets_success"
return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
buckets := []types.Bucket{{Name: &bucket}}
buckets := []types.Bucket{{Name: &bucket, BucketRegion: &s.awsRegion}}
for range 5 {
bckt := getBucketName()
@@ -2037,7 +2042,8 @@ func ListBuckets_success(s *S3Conf) error {
}
buckets = append(buckets, types.Bucket{
Name: &bckt,
Name: &bckt,
BucketRegion: &s.awsRegion,
})
}

View File

@@ -729,6 +729,11 @@ func compareBuckets(list1 []types.Bucket, list2 []types.Bucket) bool {
for i, elem := range list1 {
if *elem.Name != *list2[i].Name {
fmt.Printf("bucket names are not equal: %s != %s\n", *elem.Name, *list2[i].Name)
return false
}
if *elem.BucketRegion != *list2[i].BucketRegion {
fmt.Printf("bucket regions are not equal: %s != %s\n", *elem.BucketRegion, *list2[i].BucketRegion)
return false
}
}