Context("when none of the layers already exist", func() { BeforeEach(func() { setupSuccessfulV2Fetch(server, false) }) It("downloads all layers of the given tag of a repository and returns its image id", func() { layers := 0 cake.RegisterStub = func(image *image.Image, layer archive.ArchiveReader) error { Expect(image.ID).To(Equal(fmt.Sprintf("banana-pie-%d", layers+1))) parent := "" if layers > 0 { parent = fmt.Sprintf("banana-pie-%d", layers) } Expect(image.Parent).To(Equal(parent)) layerData, err := ioutil.ReadAll(layer) Expect(err).ToNot(HaveOccurred()) Expect(string(layerData)).To(Equal(fmt.Sprintf("banana-%d-flan", layers+1))) layers++ return nil } fetchResponse, err := fetcher.Fetch(fetchRequest) Expect(err).ToNot(HaveOccurred()) Expect(fetchResponse.Env).To(BeEmpty()) Expect(fetchResponse.Volumes).To(BeEmpty()) Expect(fetchResponse.ImageID).To(Equal("banana-pie-2"))
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(logger, &url.URL{Path: dirPath}, "", 0) Expect(err).NotTo(HaveOccurred()) Expect(registeredImage).NotTo(BeNil()) Expect(registeredImage.ID).To(HaveSuffix("foo_bar_baz")) }) It("returns a wrapped error if registering fails", func() { fakeCake.RegisterStub = func(image *image.Image, layer archive.ArchiveReader) error {
Context("when none of the layers already exist", func() { BeforeEach(func() { setupSuccessfulFetch(endpoint1Server) cake.GetReturns(nil, errors.New("no layer")) }) It("downloads all layers of the given tag of a repository and returns its image id", func() { expectedLayerNum := 3 cake.RegisterStub = func(image *image.Image, layer archive.ArchiveReader) error { Expect(image.ID).To(Equal(fmt.Sprintf("layer-%d", expectedLayerNum))) Expect(image.Parent).To(Equal(fmt.Sprintf("parent-%d", expectedLayerNum))) layerData, err := ioutil.ReadAll(layer) Expect(err).ToNot(HaveOccurred()) Expect(string(layerData)).To(Equal(fmt.Sprintf("layer-%d-data", expectedLayerNum))) expectedLayerNum-- return nil } fetchResponse, err := fetcher.Fetch(fetchRequest) Expect(err).ToNot(HaveOccurred()) Expect(fetchResponse.Env).To(Equal(process.Env{"env1": "env1Value", "env2": "env2NewValue"})) Expect(fetchResponse.Volumes).To(ConsistOf([]string{"/tmp", "/another"})) Expect(fetchResponse.ImageID).To(Equal("id-1")) }) Context("when the layers exceed the quota", func() {