2
0

shared.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // +build integration
  2. package s3integ
  3. import (
  4. "fmt"
  5. "github.com/aws/aws-sdk-go/awstesting/integration"
  6. "github.com/aws/aws-sdk-go/service/s3"
  7. )
  8. // BucketPrefix is the root prefix of integration test buckets.
  9. const BucketPrefix = "aws-sdk-go-integration"
  10. // GenerateBucketName returns a unique bucket name.
  11. func GenerateBucketName() string {
  12. return fmt.Sprintf("%s-%s",
  13. BucketPrefix, integration.UniqueID())
  14. }
  15. // SetupTest returns a test bucket created for the integration tests.
  16. func SetupTest(svc *s3.S3, bucketName string) (err error) {
  17. fmt.Println("Setup: Creating test bucket,", bucketName)
  18. _, err = svc.CreateBucket(&s3.CreateBucketInput{Bucket: &bucketName})
  19. if err != nil {
  20. return fmt.Errorf("failed to create bucket %s, %v", bucketName, err)
  21. }
  22. fmt.Println("Setup: Waiting for bucket to exist,", bucketName)
  23. err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{Bucket: &bucketName})
  24. if err != nil {
  25. return fmt.Errorf("failed waiting for bucket %s to be created, %v",
  26. bucketName, err)
  27. }
  28. return nil
  29. }
  30. // CleanupTest deletes the contents of a S3 bucket, before deleting the bucket
  31. // it self.
  32. func CleanupTest(svc *s3.S3, bucketName string) error {
  33. errs := []error{}
  34. fmt.Println("TearDown: Deleting objects from test bucket,", bucketName)
  35. err := svc.ListObjectsPages(
  36. &s3.ListObjectsInput{Bucket: &bucketName},
  37. func(page *s3.ListObjectsOutput, lastPage bool) bool {
  38. for _, o := range page.Contents {
  39. _, err := svc.DeleteObject(&s3.DeleteObjectInput{
  40. Bucket: &bucketName,
  41. Key: o.Key,
  42. })
  43. if err != nil {
  44. errs = append(errs, err)
  45. }
  46. }
  47. return true
  48. },
  49. )
  50. if err != nil {
  51. return fmt.Errorf("failed to list objects, %s, %v", bucketName, err)
  52. }
  53. fmt.Println("TearDown: Deleting partial uploads from test bucket,", bucketName)
  54. err = svc.ListMultipartUploadsPages(
  55. &s3.ListMultipartUploadsInput{Bucket: &bucketName},
  56. func(page *s3.ListMultipartUploadsOutput, lastPage bool) bool {
  57. for _, u := range page.Uploads {
  58. svc.AbortMultipartUpload(&s3.AbortMultipartUploadInput{
  59. Bucket: &bucketName,
  60. Key: u.Key,
  61. UploadId: u.UploadId,
  62. })
  63. }
  64. return true
  65. },
  66. )
  67. if err != nil {
  68. return fmt.Errorf("failed to list multipart objects, %s, %v", bucketName, err)
  69. }
  70. if len(errs) != 0 {
  71. return fmt.Errorf("failed to delete objects, %s", errs)
  72. }
  73. fmt.Println("TearDown: Deleting test bucket,", bucketName)
  74. if _, err = svc.DeleteBucket(&s3.DeleteBucketInput{Bucket: &bucketName}); err != nil {
  75. return fmt.Errorf("failed to delete test bucket, %s", bucketName)
  76. }
  77. return nil
  78. }