Пример #1
0
	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"))
Пример #2
0
		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 {
Пример #3
0
	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() {