From 568f8346bfe04f4a46c6228cdd0b76c55147b22e Mon Sep 17 00:00:00 2001 From: Ben McClelland Date: Mon, 18 Nov 2024 21:35:19 -0800 Subject: [PATCH] feat: add list-buckets test for no buckets We need to check to make sure list-buckets returns a correct empty list when no buckets created. --- tests/integration/group-tests.go | 2 ++ tests/integration/tests.go | 19 +++++++++++++++++++ tests/integration/utils.go | 15 +++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/tests/integration/group-tests.go b/tests/integration/group-tests.go index 124ea159..a71ca9ac 100644 --- a/tests/integration/group-tests.go +++ b/tests/integration/group-tests.go @@ -86,6 +86,7 @@ func TestListBuckets(s *S3Conf) { ListBuckets_invalid_max_buckets(s) ListBuckets_truncated(s) ListBuckets_success(s) + ListBuckets_empty_success(s) } func TestDeleteBucket(s *S3Conf) { @@ -696,6 +697,7 @@ func GetIntTests() IntTests { "ListBuckets_invalid_max_buckets": ListBuckets_invalid_max_buckets, "ListBuckets_truncated": ListBuckets_truncated, "ListBuckets_success": ListBuckets_success, + "ListBuckets_empty_success": ListBuckets_empty_success, "DeleteBucket_non_existing_bucket": DeleteBucket_non_existing_bucket, "DeleteBucket_non_empty_bucket": DeleteBucket_non_empty_bucket, "DeleteBucket_success_status_code": DeleteBucket_success_status_code, diff --git a/tests/integration/tests.go b/tests/integration/tests.go index e9c746c9..39471a47 100644 --- a/tests/integration/tests.go +++ b/tests/integration/tests.go @@ -2160,6 +2160,7 @@ func ListBuckets_with_prefix(s *S3Conf) error { return nil }) } + func ListBuckets_invalid_max_buckets(s *S3Conf) error { testName := "ListBuckets_invalid_max_buckets" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { @@ -2255,6 +2256,24 @@ func ListBuckets_truncated(s *S3Conf) error { }) } +func ListBuckets_empty_success(s *S3Conf) error { + testName := "ListBuckets_empty_success" + return actionHandlerNoSetup(s, testName, func(s3client *s3.Client, bucket string) error { + ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) + out, err := s3client.ListBuckets(ctx, &s3.ListBucketsInput{}) + cancel() + if err != nil { + return err + } + + if len(out.Buckets) > 0 { + return fmt.Errorf("expected list buckets result to be %v, instead got %v", []types.Bucket{}, out.Buckets) + } + + return nil + }) +} + func ListBuckets_success(s *S3Conf) error { testName := "ListBuckets_success" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { diff --git a/tests/integration/utils.go b/tests/integration/utils.go index 71c42e2a..e1e1d150 100644 --- a/tests/integration/utils.go +++ b/tests/integration/utils.go @@ -213,6 +213,21 @@ func actionHandler(s *S3Conf, testName string, handler func(s3client *s3.Client, return handlerErr } +func actionHandlerNoSetup(s *S3Conf, testName string, handler func(s3client *s3.Client, bucket string) error, _ ...setupOpt) error { + runF(testName) + client := s3.NewFromConfig(s.Config()) + handlerErr := handler(client, "") + if handlerErr != nil { + failF("%v: %v", testName, handlerErr) + } + + if handlerErr == nil { + passF(testName) + } + + return handlerErr +} + type authConfig struct { testName string path string