var tmpDir string BeforeEach(func() { var err error tmpDir, err = ioutil.TempDir("", "tmp-dir") Expect(err).NotTo(HaveOccurred()) }) AfterEach(func() { os.RemoveAll(tmpDir) }) It("registers the image in the graph", func() { var registeredImage *image.Image fakeCake.RegisterStub = func(image *image.Image, layer archive.ArchiveReader) error { registeredImage = image return nil } dirPath := path.Join(tmpDir, "foo/bar/baz") err := os.MkdirAll(dirPath, 0700) Expect(err).NotTo(HaveOccurred()) _, err = fetcher.Fetch(&url.URL{Path: dirPath}, 0) Expect(err).NotTo(HaveOccurred()) Expect(registeredImage).NotTo(BeNil()) Expect(registeredImage.ID).To(HaveSuffix("foo_bar_baz")) }) It("registers the image with the correct layer data", func() { fakeCake.RegisterStub = func(image *image.Image, layer archive.ArchiveReader) error {
It("should verify the image against its digest", func() { remote.Fetch(parseURL("docker:///foo#some-tag"), 67) _, reader := fakeCake.RegisterArgsForCall(0) Expect(reader).To(BeAssignableToTypeOf(&verified{})) _, digest1 := fakeVerifier.VerifyArgsForCall(0) _, digest2 := fakeVerifier.VerifyArgsForCall(1) Expect(string(digest1)).To(Equal("abc-def")) Expect(string(digest2)).To(Equal("ghj-klm")) }) It("should close the verified image reader after using it", func() { var registeredBlob *verified fakeCake.RegisterStub = func(img *image.Image, blob archive.ArchiveReader) error { Expect(blob).To(BeAssignableToTypeOf(&verified{})) Expect(blob.(*verified).closed).To(BeFalse()) registeredBlob = blob.(*verified) return nil } remote.Fetch(parseURL("docker:///foo#some-tag"), 67) Expect(registeredBlob.closed).To(BeTrue()) }) Context("when the layer does not match its digest", func() { JustBeforeEach(func() { fakeVerifier.VerifyReturns(nil, errors.New("boom")) }) It("returns an error", func() { _, err := remote.Fetch(parseURL("docker:///foo#some-tag"), 67) Expect(err).To(MatchError("boom"))