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())
			return nil, errors.New("no layer")
		}

		fetcher.Fetch(fetchRequest)

		Expect(released).To(HaveKey(layercake.DockerImageID("banana-pie-1")))
		Expect(released).To(HaveKey(layercake.DockerImageID("banana-pie-2")))
	})

	Context("when none of the layers already exist", func() {
		BeforeEach(func() {