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")) })
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() {
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())