github.com/aavshr/aws-sdk-go@v1.41.3/awstesting/integration/s3integ/shared.go (about)

     1  //go:build integration
     2  // +build integration
     3  
     4  package s3integ
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/aavshr/aws-sdk-go/awstesting/integration"
    10  	"github.com/aavshr/aws-sdk-go/service/s3"
    11  	"github.com/aavshr/aws-sdk-go/service/s3/s3iface"
    12  	"github.com/aavshr/aws-sdk-go/service/s3control"
    13  	"github.com/aavshr/aws-sdk-go/service/s3control/s3controliface"
    14  )
    15  
    16  // BucketPrefix is the root prefix of integration test buckets.
    17  const BucketPrefix = "aws-sdk-go-integration"
    18  
    19  // GenerateBucketName returns a unique bucket name.
    20  func GenerateBucketName() string {
    21  	return fmt.Sprintf("%s-%s",
    22  		BucketPrefix, integration.UniqueID())
    23  }
    24  
    25  // SetupBucket returns a test bucket created for the integration tests.
    26  func SetupBucket(svc s3iface.S3API, bucketName string) (err error) {
    27  
    28  	fmt.Println("Setup: Creating test bucket,", bucketName)
    29  	_, err = svc.CreateBucket(&s3.CreateBucketInput{Bucket: &bucketName})
    30  	if err != nil {
    31  		return fmt.Errorf("failed to create bucket %s, %v", bucketName, err)
    32  	}
    33  
    34  	fmt.Println("Setup: Waiting for bucket to exist,", bucketName)
    35  	err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{Bucket: &bucketName})
    36  	if err != nil {
    37  		return fmt.Errorf("failed waiting for bucket %s to be created, %v",
    38  			bucketName, err)
    39  	}
    40  
    41  	return nil
    42  }
    43  
    44  // CleanupBucket deletes the contents of a S3 bucket, before deleting the bucket
    45  // it self.
    46  func CleanupBucket(svc s3iface.S3API, bucketName string) error {
    47  	errs := []error{}
    48  
    49  	fmt.Println("TearDown: Deleting objects from test bucket,", bucketName)
    50  	err := svc.ListObjectsPages(
    51  		&s3.ListObjectsInput{Bucket: &bucketName},
    52  		func(page *s3.ListObjectsOutput, lastPage bool) bool {
    53  			for _, o := range page.Contents {
    54  				_, err := svc.DeleteObject(&s3.DeleteObjectInput{
    55  					Bucket: &bucketName,
    56  					Key:    o.Key,
    57  				})
    58  				if err != nil {
    59  					errs = append(errs, err)
    60  				}
    61  			}
    62  			return true
    63  		},
    64  	)
    65  	if err != nil {
    66  		return fmt.Errorf("failed to list objects, %s, %v", bucketName, err)
    67  	}
    68  
    69  	fmt.Println("TearDown: Deleting partial uploads from test bucket,", bucketName)
    70  	err = svc.ListMultipartUploadsPages(
    71  		&s3.ListMultipartUploadsInput{Bucket: &bucketName},
    72  		func(page *s3.ListMultipartUploadsOutput, lastPage bool) bool {
    73  			for _, u := range page.Uploads {
    74  				svc.AbortMultipartUpload(&s3.AbortMultipartUploadInput{
    75  					Bucket:   &bucketName,
    76  					Key:      u.Key,
    77  					UploadId: u.UploadId,
    78  				})
    79  			}
    80  			return true
    81  		},
    82  	)
    83  	if err != nil {
    84  		return fmt.Errorf("failed to list multipart objects, %s, %v", bucketName, err)
    85  	}
    86  
    87  	if len(errs) != 0 {
    88  		return fmt.Errorf("failed to delete objects, %s", errs)
    89  	}
    90  
    91  	fmt.Println("TearDown: Deleting test bucket,", bucketName)
    92  	if _, err = svc.DeleteBucket(&s3.DeleteBucketInput{Bucket: &bucketName}); err != nil {
    93  		return fmt.Errorf("failed to delete test bucket, %s", bucketName)
    94  	}
    95  
    96  	return nil
    97  }
    98  
    99  // SetupAccessPoint returns an access point for the given bucket for testing
   100  func SetupAccessPoint(svc s3controliface.S3ControlAPI, account, bucket, accessPoint string) error {
   101  	fmt.Printf("Setup: creating access point %q for bucket %q\n", accessPoint, bucket)
   102  	_, err := svc.CreateAccessPoint(&s3control.CreateAccessPointInput{
   103  		AccountId: &account,
   104  		Bucket:    &bucket,
   105  		Name:      &accessPoint,
   106  	})
   107  	if err != nil {
   108  		return fmt.Errorf("failed to create access point: %v", err)
   109  	}
   110  	return nil
   111  }
   112  
   113  // CleanupAccessPoint deletes the given access point
   114  func CleanupAccessPoint(svc s3controliface.S3ControlAPI, account, accessPoint string) error {
   115  	fmt.Printf("TearDown: Deleting access point %q\n", accessPoint)
   116  	_, err := svc.DeleteAccessPoint(&s3control.DeleteAccessPointInput{
   117  		AccountId: &account,
   118  		Name:      &accessPoint,
   119  	})
   120  	if err != nil {
   121  		return fmt.Errorf("failed to delete access point: %v", err)
   122  	}
   123  	return nil
   124  }