}

		cake.GetReturns(nil, errors.New("no image"))
	})

	It("retains the layers before getting them, to ensure they are not deleted after we decide to use cache", func() {
		setupSuccessfulV2Fetch(server, false)

		retained := make(map[layercake.ID]bool)
		cake.GetStub = func(id layercake.ID) (*image.Image, error) {
			Expect(retained).To(HaveKey(id))
			return nil, errors.New("no layer")
		}

		retainer.RetainStub = func(id layercake.ID) {
			retained[id] = true
		}

		fetcher.Fetch(fetchRequest)
	})

	It("releases all the layers after fetching", func() {
		setupSuccessfulV2Fetch(server, false)

		released := make(map[layercake.ID]bool)
		retainer.ReleaseStub = func(id layercake.ID) {
			released[id] = true
		}

		cake.GetStub = func(id layercake.ID) (*image.Image, error) {
			Expect(released).To(BeEmpty())