BeforeEach(func() {
				fakeMetrics.MetricsReturns(garden.ContainerDiskStat{}, errors.New("rotten banana"))
			})

			It("should return an error", func() {
				_, err := cakeOrdinator.Metrics(logger, "something", "")
				Expect(err).To(MatchError("rotten banana"))
			})
		})
	})

	Describe("Destroy", func() {
		It("delegates removal", func() {
			Expect(cakeOrdinator.Destroy(logger, "something", "rootfs")).To(Succeed())
			Expect(fakeCake.RemoveCallCount()).To(Equal(1))
			Expect(fakeCake.RemoveArgsForCall(0)).To(Equal(layercake.ContainerID("something")))
		})

		Context("when the layer is already destroyed", func() {
			It("does not destroy again", func() {
				fakeCake.GetReturns(nil, errors.New("cannae find it"))

				Expect(cakeOrdinator.Destroy(logger, "something", "rootfs")).To(Succeed())
				Expect(fakeCake.RemoveCallCount()).To(Equal(0))
			})
		})

		Context("when the graph can't retrieve information about the layer", func() {
			BeforeEach(func() {
				fakeCake.GetReturns(nil, errors.New("failed tae find it"))
			})
示例#2
0
				It("should not remove it when it is used by a container", func() {
					fakeCake.GetReturns(&image.Image{Container: "used-by-me"}, nil)
					Expect(gc.GC(logger, fakeCake)).To(Succeed())
					Expect(fakeCake.RemoveCallCount()).To(Equal(0))
				})

				Context("when the layer has no parents", func() {
					BeforeEach(func() {
						fakeCake.GetReturns(&image.Image{}, nil)
					})

					It("removes the layer", func() {
						Expect(gc.GC(logger, fakeCake)).To(Succeed())
						Expect(fakeCake.RemoveCallCount()).To(Equal(1))
						Expect(fakeCake.RemoveArgsForCall(0)).To(Equal(layercake.DockerImageID("child")))
					})

					Context("when the layer is retained", func() {
						JustBeforeEach(func() {
							retainer.Retain(lagertest.NewTestLogger(""), layercake.DockerImageID("child"))
						})

						It("should not remove the layer", func() {
							Expect(gc.GC(logger, fakeCake)).To(Succeed())
							Expect(fakeCake.RemoveCallCount()).To(Equal(0))
						})
					})

					Context("when removing fails", func() {
						It("returns an error", func() {
示例#3
0
				Expect(img).To(Equal(testImage))
			})
		})
	})

	Describe("Remove", func() {
		Context("when the image ID is not namespaced", func() {
			It("should return the error when cake fails", func() {
				cake.RemoveReturns(testError)
				Expect(aufsCake.Remove(childID)).To(Equal(testError))
			})

			It("should delegate to the cake", func() {
				Expect(aufsCake.Remove(childID)).To(Succeed())
				Expect(cake.RemoveCallCount()).To(Equal(1))
				Expect(cake.RemoveArgsForCall(0)).To(Equal(childID))
			})
		})

		Context("when the image ID is namespaced", func() {
			var (
				parentDir               string
				namespacedChildDir      string
				otherNamespacedChildDir string
			)

			BeforeEach(func() {
				var err error
				parentDir, err = ioutil.TempDir("", "parent-layer")
				Expect(err).NotTo(HaveOccurred())