JustBeforeEach(func() { gc = cleaner.NewOvenCleaner( retainer, fakeThreshold, ) }) Context("when the threshold is exceeded", func() { BeforeEach(func() { fakeThreshold.ExceededReturns(true) }) Describe("GC", func() { Context("when there is a single leaf", func() { BeforeEach(func() { fakeCake.GetAllLeavesReturns([]layercake.ID{layercake.DockerImageID("child")}, nil) size[layercake.DockerImageID("child2")] = 2048 }) 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(err).NotTo(HaveOccurred()) Expect(cake.IsLeafCallCount()).To(Equal(1)) Expect(cake.IsLeafArgsForCall(0)).To(Equal(parentID)) }) }) }) Describe("GetAllLeaves", func() { Context("when there are no cloned layers", func() { var ( leaves []layercake.ID err error ) JustBeforeEach(func() { cake.GetAllLeavesReturns([]layercake.ID{layercake.DockerImageID("1"), layercake.DockerImageID("2")}, nil) leaves, err = aufsCake.GetAllLeaves() Expect(err).NotTo(HaveOccurred()) }) It("should delegate to the cake", func() { Expect(cake.GetAllLeavesCallCount()).To(Equal(1)) }) It("should get all leaves", func() { Expect(leaves).To(HaveLen(2)) Expect(leaves[0]).To(Equal(layercake.DockerImageID("1"))) Expect(leaves[1]).To(Equal(layercake.DockerImageID("2"))) }) })