}) Context("when the worker supports volume management", func() { var fakeBaggageclaimClient *bfakes.FakeClient BeforeEach(func() { fakeBaggageclaimClient = new(bfakes.FakeClient) satisfyingWorker.VolumeManagerReturns(fakeBaggageclaimClient, true) }) Context("when the cache is already present", func() { var foundVolume *bfakes.FakeVolume BeforeEach(func() { foundVolume = new(bfakes.FakeVolume) foundVolume.HandleReturns("found-volume-handle") cacheIdentifier.FindOnReturns(foundVolume, true, nil) cacheIdentifier.ResourceVersionReturns(atc.Version{"some": "theversion"}) cacheIdentifier.ResourceHashReturns("hash") satisfyingWorker.NameReturns("myworker") foundVolume.ExpirationReturns(time.Hour, time.Now(), nil) }) It("does not error and returns a resource", func() { Expect(initErr).NotTo(HaveOccurred()) Expect(initResource).NotTo(BeNil()) }) It("chose the worker satisfying the resource type and tags", func() { Expect(workerClient.SatisfyingArgsForCall(0)).To(Equal(worker.WorkerSpec{
volumeFactory = worker.NewVolumeFactory(fakeDB, fakeClock) }) Context("VolumeFactory", func() { Describe("Build", func() { It("releases the volume it was given", func() { _, err := volumeFactory.Build(logger, fakeVolume) Expect(err).ToNot(HaveOccurred()) Expect(fakeVolume.ReleaseCallCount()).To(Equal(1)) actualTTL := fakeVolume.ReleaseArgsForCall(0) Expect(actualTTL).To(BeNil()) }) It("embeds the original volume in the wrapped volume", func() { fakeVolume.HandleReturns("some-handle") vol, err := volumeFactory.Build(logger, fakeVolume) Expect(err).ToNot(HaveOccurred()) Expect(vol.Handle()).To(Equal("some-handle")) }) }) }) Context("Volume", func() { var expectedTTL time.Duration var expectedTTL2 time.Duration BeforeEach(func() { expectedTTL = 10 * time.Second expectedTTL2 = 5 * time.Second fakeVolume.HandleReturns("some-handle")
Describe("FindOn", func() { var foundVolume baggageclaim.Volume var found bool var findErr error JustBeforeEach(func() { foundVolume, found, findErr = cacheIdentifier.FindOn(logger, fakeBaggageclaimClient) }) Context("when one cache volume is present", func() { var workerVolume *bfakes.FakeVolume BeforeEach(func() { workerVolume = new(bfakes.FakeVolume) workerVolume.HandleReturns("found-volume-handle") fakeBaggageclaimClient.ListVolumesReturns([]baggageclaim.Volume{workerVolume}, nil) }) It("returns the volume and true", func() { Expect(foundVolume).To(Equal(workerVolume)) Expect(found).To(BeTrue()) }) It("found it by querying for the correct properties", func() { _, spec := fakeBaggageclaimClient.ListVolumesArgsForCall(0) Expect(spec).To(Equal(baggageclaim.VolumeProperties{ "resource-type": "some-resource-type", "resource-version": `{"some":"version"}`, "resource-source": "968e27f71617a029e58a09fb53895f1e1875b51bdaa11293ddc2cb335960875cb42c19ae8bc696caec88d55221f33c2bcc3278a7d15e8d13f23782d1a05564f1", "resource-params": "fe7d9dbc2ac75030c3e8c88e54a33676c38d8d9d2876700bc01d4961caf898e7cbe8e738232e86afcf6a5f64a9527c458a130277b08d72fb339962968d0d0967",
Env: []string{"a=1", "b=2"}, Properties: garden.Properties{}, })) }) }) Context("when a volume mount is provided", func() { var ( volume1 *bfakes.FakeVolume volume2 *bfakes.FakeVolume ) BeforeEach(func() { volume1 = new(bfakes.FakeVolume) volume1.HandleReturns("some-volume1") volume1.PathReturns("/some/src/path1") volume2 = new(bfakes.FakeVolume) volume2.HandleReturns("some-volume2") volume2.PathReturns("/some/src/path2") }) Context("when copy-on-write is specified", func() { var ( cowVolume1 *bfakes.FakeVolume cowVolume2 *bfakes.FakeVolume ) BeforeEach(func() { spec = ResourceTypeContainerSpec{