Context("when a worker is found", func() { var satisfyingWorker *wfakes.FakeWorker BeforeEach(func() { satisfyingWorker = new(wfakes.FakeWorker) workerClient.SatisfyingReturns(satisfyingWorker, nil) satisfyingWorker.CreateContainerReturns(fakeContainer, nil) }) 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) })
expectedOneOffTTL = 5 * time.Hour baggageCollector lostandfound.BaggageCollector savedPipeline db.SavedPipeline fakePipelineDB *dbfakes.FakePipelineDB ) BeforeEach(func() { fakeWorkerClient = new(wfakes.FakeClient) workerA = new(wfakes.FakeWorker) workerB = new(wfakes.FakeWorker) workerBBaggageClaimClient = new(bcfakes.FakeClient) workerB.VolumeManagerReturns(workerBBaggageClaimClient, true) dockerVolume = new(bcfakes.FakeVolume) workerBBaggageClaimClient.LookupVolumeReturns(dockerVolume, true, nil) workerC = new(wfakes.FakeWorker) workerCBaggageClaimClient = new(bcfakes.FakeClient) workerC.VolumeManagerReturns(workerCBaggageClaimClient, true) crossedWiresVolume = new(bcfakes.FakeVolume) workerCBaggageClaimClient.LookupVolumeReturns(crossedWiresVolume, true, nil) workerMap := map[string]*wfakes.FakeWorker{ "workerA": workerA, "workerB": workerB, "workerC": workerC, }
type baggageCollectionExample struct { pipelineData map[string][]resourceConfigAndVersions volumeData []db.Volume expectedTTLs map[string]time.Duration } DescribeTable("baggage collection", func(examples ...baggageCollectionExample) { var err error for _, example := range examples { fakeWorkerClient = new(wfakes.FakeClient) fakeWorker = new(wfakes.FakeWorker) fakeBaggageClaimClient = new(bcfakes.FakeClient) fakeWorkerClient.GetWorkerReturns(fakeWorker, nil) fakeWorker.VolumeManagerReturns(fakeBaggageClaimClient, true) baggageCollectorLogger := lagertest.NewTestLogger("test") fakeBaggageCollectorDB = new(fakes.FakeBaggageCollectorDB) fakePipelineDBFactory = new(dbfakes.FakePipelineDBFactory) baggageCollector = lostandfound.NewBaggageCollector( baggageCollectorLogger, fakeWorkerClient, fakeBaggageCollectorDB, fakePipelineDBFactory, expectedOldResourceGracePeriod, expectedOneOffTTL, ) var savedPipelines []db.SavedPipeline
expectedOneOffTTL = 5 * time.Hour baggageCollector lostandfound.BaggageCollector savedPipeline db.SavedPipeline fakePipelineDB *dbfakes.FakePipelineDB ) BeforeEach(func() { fakeWorkerClient = new(wfakes.FakeClient) worker1 = new(wfakes.FakeWorker) worker2 = new(wfakes.FakeWorker) baggageClaimClient2 = new(bcfakes.FakeClient) worker2.VolumeManagerReturns(baggageClaimClient2, true) volume2 = new(bcfakes.FakeVolume) baggageClaimClient2.LookupVolumeReturns(volume2, true, nil) workerMap := map[string]*wfakes.FakeWorker{ "worker1": worker1, "worker2": worker2, } fakeWorkerClient.GetWorkerStub = func(name string) (worker.Worker, error) { return workerMap[name], nil } baggageCollectorLogger := lagertest.NewTestLogger("test") fakeBaggageCollectorDB = new(fakes.FakeBaggageCollectorDB) fakePipelineDBFactory = new(dbfakes.FakePipelineDBFactory)
fakeWorkerClient.GetWorkerReturns(nil, errors.New("no-worker-found")) }) It("removes the volume from the database", func() { err := baggageCollector.Collect() Expect(err).NotTo(HaveOccurred()) Expect(fakeBaggageCollectorDB.ReapVolumeCallCount()).To(Equal(1)) Expect(fakeBaggageCollectorDB.ReapVolumeArgsForCall(0)).To(Equal(returnedSavedVolume.Handle)) }) }) Context("baggage claim is no longer found on the worker", func() { BeforeEach(func() { fakeWorkerClient.GetWorkerReturns(fakeWorker, nil) fakeWorker.VolumeManagerReturns(nil, false) }) It("removes the volume from the database", func() { err := baggageCollector.Collect() Expect(err).NotTo(HaveOccurred()) Expect(fakeBaggageCollectorDB.ReapVolumeCallCount()).To(Equal(1)) Expect(fakeBaggageCollectorDB.ReapVolumeArgsForCall(0)).To(Equal(returnedSavedVolume.Handle)) }) }) Context("the volume is no longer found on the worker", func() { BeforeEach(func() { fakeWorkerClient.GetWorkerReturns(fakeWorker, nil) fakeWorker.VolumeManagerReturns(nil, false)