err := retryableBlobstore.CleanUp("/some/file") Expect(err).To(HaveOccurred()) Expect(err.Error()).To(ContainSubstring("fake-clean-up-error")) }) }) Describe("Delete", func() { It("delegates to inner blobstore to clean up", func() { err := retryableBlobstore.Delete("some-blob") Expect(err).ToNot(HaveOccurred()) Expect(innerBlobstore.DeleteBlobID).To(Equal("some-blob")) }) It("returns error if inner blobstore cleaning up fails", func() { innerBlobstore.DeleteErr = errors.New("fake-clean-up-error") err := retryableBlobstore.Delete("/some/file") Expect(err).To(HaveOccurred()) Expect(err.Error()).To(ContainSubstring("fake-clean-up-error")) }) }) Describe("Create", func() { Context("when inner blobstore succeeds before maximum number of create tries (first time)", func() { It("returns blobID and fingerprint without an error", func() { innerBlobstore.CreateBlobID = "fake-blob-id" innerBlobstore.CreateFingerprint = "fake-fingerprint" blobID, fingerprint, err := retryableBlobstore.Create("fake-file-name") Expect(err).ToNot(HaveOccurred())
It("returns an error if the inner blobstore fails to validate", func() { innerBlobstore.ValidateError = errors.New("error validating") err := cascadingBlobstore.Validate() Expect(err).ToNot(BeNil()) Expect(err.Error()).To(Equal("error validating")) }) }) Describe("Delete", func() { It("deletes the blob from the blobManager, and calls Delete on inner blobstore", func() { blobID := "smurf-25" blobManager.DeleteReturns(nil) innerBlobstore.DeleteErr = nil err := cascadingBlobstore.Delete(blobID) Expect(err).To(BeNil()) Expect(blobManager.DeleteCallCount()).To(Equal(1)) Expect(blobManager.DeleteArgsForCall(0)).To(Equal(blobID)) Expect(innerBlobstore.DeleteBlobID).To(Equal(blobID)) }) It("returns an error if blobManager returns an error when deleting", func() { blobID := "smurf-28" blobManager.DeleteReturns(errors.New("error deleting in blobManager"))