bVolume = new(bfakes.FakeVolume) bVolume.HandleReturns("b") }) Context("with a, b order", func() { BeforeEach(func() { fakeBaggageclaimClient.ListVolumesReturns([]baggageclaim.Volume{aVolume, bVolume}, nil) }) It("selects the volume based on the lowest alphabetical name", func() { Expect(foundVolume).To(Equal(aVolume)) Expect(found).To(BeTrue()) Expect(aVolume.SetTTLCallCount()).To(Equal(0)) Expect(bVolume.ReleaseCallCount()).To(Equal(1)) Expect(bVolume.ReleaseArgsForCall(0)).To(Equal(worker.FinalTTL(time.Minute))) }) }) Context("with b, a order", func() { BeforeEach(func() { fakeBaggageclaimClient.ListVolumesReturns([]baggageclaim.Volume{bVolume, aVolume}, nil) }) It("selects the volume based on the lowest alphabetical name", func() { Expect(foundVolume).To(Equal(aVolume)) Expect(found).To(BeTrue()) Expect(aVolume.SetTTLCallCount()).To(Equal(0)) Expect(bVolume.ReleaseCallCount()).To(Equal(1)) Expect(bVolume.ReleaseArgsForCall(0)).To(Equal(worker.FinalTTL(time.Minute)))
Expect(fakePipelineDB.GetJobFinishedAndNextBuildArgsForCall(0)).To(Equal("my-precious-job")) Expect(fakeBaggageCollectorDB.GetImageVolumeIdentifiersByBuildIDCallCount()).To(Equal(1)) Expect(fakeBaggageCollectorDB.GetImageVolumeIdentifiersByBuildIDArgsForCall(0)).To(Equal(2)) Expect(fakeBaggageCollectorDB.GetVolumesCallCount()).To(Equal(1)) Expect(fakeWorkerClient.GetWorkerCallCount()).To(Equal(3)) Expect(workerA.VolumeManagerCallCount()).To(Equal(0)) Expect(workerB.VolumeManagerCallCount()).To(Equal(1)) Expect(workerC.VolumeManagerCallCount()).To(Equal(1)) var handle string Expect(workerBBaggageClaimClient.LookupVolumeCallCount()).To(Equal(1)) _, handle = workerBBaggageClaimClient.LookupVolumeArgsForCall(0) Expect(handle).To(Equal("docker-volume-handle")) Expect(dockerVolume.ReleaseCallCount()).To(Equal(1)) Expect(dockerVolume.ReleaseArgsForCall(0)).To(Equal(worker.FinalTTL(expectedLatestVersionTTL))) Expect(workerCBaggageClaimClient.LookupVolumeCallCount()).To(Equal(1)) _, handle = workerCBaggageClaimClient.LookupVolumeArgsForCall(0) Expect(handle).To(Equal("crossed-wires-volume-handle")) Expect(crossedWiresVolume.ReleaseCallCount()).To(Equal(1)) Expect(crossedWiresVolume.ReleaseArgsForCall(0)).To(Equal(worker.FinalTTL(expectedOldVersionTTL))) Expect(fakeBaggageCollectorDB.SetVolumeTTLCallCount()).To(Equal(2)) type setVolumeTTLArgs struct { Handle string TTL time.Duration } expectedSetVolumeTTLArgs := []setVolumeTTLArgs{
BeforeEach(func() { fakeVolume = new(bfakes.FakeVolume) fakeDB = new(fakes.FakeVolumeFactoryDB) fakeClock = fakeclock.NewFakeClock(time.Unix(123, 456)) logger = lagertest.NewTestLogger("test") 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
It("sets the ttl of each volume used in a one-off build to at least 24 hours", func() { err := baggageCollector.Collect() Expect(err).NotTo(HaveOccurred()) Expect(fakeBaggageCollectorDB.GetAllPipelinesCallCount()).To(Equal(1)) Expect(fakePipelineDBFactory.BuildCallCount()).To(Equal(1)) Expect(fakePipelineDBFactory.BuildArgsForCall(0)).To(Equal(savedPipeline)) Expect(fakePipelineDB.GetJobFinishedAndNextBuildCallCount()).To(Equal(1)) Expect(fakePipelineDB.GetJobFinishedAndNextBuildArgsForCall(0)).To(Equal("my-precious-job")) Expect(fakeBaggageCollectorDB.GetImageVolumeIdentifiersByBuildIDCallCount()).To(Equal(1)) Expect(fakeBaggageCollectorDB.GetImageVolumeIdentifiersByBuildIDArgsForCall(0)).To(Equal(2)) Expect(fakeBaggageCollectorDB.GetVolumesForOneOffBuildImageResourcesCallCount()).To(Equal(1)) Expect(fakeBaggageCollectorDB.GetVolumesCallCount()).To(Equal(1)) Expect(fakeWorkerClient.GetWorkerCallCount()).To(Equal(2)) Expect(worker1.VolumeManagerCallCount()).To(Equal(0)) Expect(worker2.VolumeManagerCallCount()).To(Equal(1)) Expect(baggageClaimClient2.LookupVolumeCallCount()).To(Equal(1)) _, handle := baggageClaimClient2.LookupVolumeArgsForCall(0) Expect(handle).To(Equal("volume2")) Expect(volume2.ReleaseCallCount()).To(Equal(1)) Expect(volume2.ReleaseArgsForCall(0)).To(Equal(worker.FinalTTL(expectedLatestVersionTTL))) Expect(fakeBaggageCollectorDB.SetVolumeTTLCallCount()).To(Equal(1)) handle, ttl := fakeBaggageCollectorDB.SetVolumeTTLArgsForCall(0) Expect(handle).To(Equal("volume2")) Expect(ttl).To(Equal(expectedLatestVersionTTL)) }) })
bVolume = new(bfakes.FakeVolume) bVolume.HandleReturns("b") }) Context("with a, b order", func() { BeforeEach(func() { fakeBaggageclaimClient.ListVolumesReturns([]baggageclaim.Volume{aVolume, bVolume}, nil) }) It("selects the volume based on the lowest alphabetical name", func() { Expect(foundVolume).To(Equal(aVolume)) Expect(found).To(BeTrue()) Expect(aVolume.SetTTLCallCount()).To(Equal(0)) Expect(bVolume.ReleaseCallCount()).To(Equal(1)) Expect(bVolume.ReleaseArgsForCall(0)).To(Equal(time.Minute)) }) }) Context("with b, a order", func() { BeforeEach(func() { fakeBaggageclaimClient.ListVolumesReturns([]baggageclaim.Volume{bVolume, aVolume}, nil) }) It("selects the volume based on the lowest alphabetical name", func() { Expect(foundVolume).To(Equal(aVolume)) Expect(found).To(BeTrue()) Expect(aVolume.SetTTLCallCount()).To(Equal(0)) Expect(bVolume.ReleaseCallCount()).To(Equal(1)) Expect(bVolume.ReleaseArgsForCall(0)).To(Equal(time.Minute))