// Copyright 2023 Versity Software // This file is licensed under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package integration import ( "context" "fmt" "net/http" "time" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/versity/versitygw/s3err" ) func DeleteBucket_non_existing_bucket(s *S3Conf) error { testName := "DeleteBucket_non_existing_bucket" runF(testName) bucket := getBucketName() s3client := s.GetClient() ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) _, err := s3client.DeleteBucket(ctx, &s3.DeleteBucketInput{ Bucket: &bucket, }) cancel() if err := checkApiErr(err, s3err.GetAPIError(s3err.ErrNoSuchBucket)); err != nil { failF("%v: %v", testName, err) return fmt.Errorf("%v: %w", testName, err) } passF(testName) return nil } func DeleteBucket_non_empty_bucket(s *S3Conf) error { testName := "DeleteBucket_non_empty_bucket" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { _, err := putObjects(s3client, []string{"foo"}, bucket) if err != nil { return err } ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) _, err = s3client.DeleteBucket(ctx, &s3.DeleteBucketInput{ Bucket: &bucket, }) cancel() if err := checkApiErr(err, s3err.GetAPIError(s3err.ErrBucketNotEmpty)); err != nil { return err } return nil }) } func DeleteBucket_success_status_code(s *S3Conf) error { testName := "DeleteBucket_success_status_code" runF(testName) bucket := getBucketName() err := setup(s, bucket) if err != nil { failF("%v: %v", testName, err) return fmt.Errorf("%v: %w", testName, err) } req, err := createSignedReq(http.MethodDelete, s.endpoint, bucket, s.awsID, s.awsSecret, "s3", s.awsRegion, "", nil, time.Now(), nil) if err != nil { failF("%v: %v", testName, err) return fmt.Errorf("%v: %w", testName, err) } resp, err := s.httpClient.Do(req) if err != nil { failF("%v: %v", testName, err) return fmt.Errorf("%v: %w", testName, err) } if resp.StatusCode != http.StatusNoContent { failF("%v: expected response status to be %v, instead got %v", testName, http.StatusNoContent, resp.StatusCode) return fmt.Errorf("%v: expected response status to be %v, instead got %v", testName, http.StatusNoContent, resp.StatusCode) } passF(testName) return nil } func DeleteBucket_incorrect_expected_bucket_owner(s *S3Conf) error { testName := "DeleteBucket_incorrect_expected_bucket_owner" return actionHandler(s, testName, func(s3client *s3.Client, bucket string) error { ctx, cancel := context.WithTimeout(context.Background(), shortTimeout) _, err := s3client.DeleteBucket(ctx, &s3.DeleteBucketInput{ Bucket: &bucket, ExpectedBucketOwner: getPtr(s.awsID + "something"), }) cancel() return checkApiErr(err, s3err.GetAPIError(s3err.ErrAccessDenied)) }) }