func killBucket(b *s3.Bucket) { var err error for attempt := attempts.Start(); attempt.Next(); { err = b.DelBucket() if err == nil { return } if _, ok := err.(*net.DNSError); ok { return } e, ok := err.(*s3.Error) if ok && e.Code == "NoSuchBucket" { return } if ok && e.Code == "BucketNotEmpty" { // Errors are ignored here. Just retry. resp, err := b.List("", "", "", 1000) if err == nil { for _, key := range resp.Contents { _ = b.Del(key.Key) } } multis, _, _ := b.ListMulti("", "") for _, m := range multis { _ = m.Abort() } } } message := "cannot delete test bucket" if err != nil { message += ": " + err.Error() } panic(message) }
Context("when the bucket already exists", func() { var ( err error bucket s3.Bucket ) BeforeEach(func() { err := goamzBucketClient.PutBucket(goamz.BucketOwnerFull) Expect(err).NotTo(HaveOccurred()) client := s3.NewClient(fakeS3EndpointURL, "accessKey", "secretKey", logger) bucket, err = client.GetOrCreateBucket(bucketName) }) AfterEach(func() { err := goamzBucketClient.DelBucket() Expect(err).NotTo(HaveOccurred()) }) It("returns the bucket", func() { Expect(bucket.Name()).To(Equal(bucketName)) }) It("does not return an error", func() { Expect(err).NotTo(HaveOccurred()) }) It("provides logging", func() { Expect(log).To(gbytes.Say( fmt.Sprintf(`{"bucket_name":"%s","event":"starting"}`, bucketName), ))