Пример #1
0
	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,
				)
					VolumeIdentifier: db.VolumeIdentifier{
						ResourceVersion: atc.Version{"some": "newest-version"},
						ResourceHash:    hashkey,
					},
				},
				ID:        124,
				ExpiresIn: 0,
			}

			returnedVolumes = append(returnedVolumes, newestReturnedSavedVolume)

			fakeBaggageCollectorDB.GetAllPipelinesReturns([]db.SavedPipeline{fakeSavedPipeline}, nil)
			fakePipelineDBFactory.BuildReturns(&fakePipelineDB)
			fakePipelineDB.GetLatestEnabledVersionedResourceReturns(fakeSavedVersionedResource, true, nil)

			fakeWorkerClient.GetWorkerReturns(nil, errors.New("no-worker-found"))
		})

		It("should remove the volume from the database", func() {
			err := baggageCollector.Collect()
			Expect(err).NotTo(HaveOccurred())

			Expect(fakeBaggageCollectorDB.ReapVolumeCallCount()).To(Equal(2))
			Expect(fakeBaggageCollectorDB.ReapVolumeArgsForCall(0)).To(Equal(returnedSavedVolume.Handle))
			Expect(fakeBaggageCollectorDB.ReapVolumeArgsForCall(1)).To(Equal(newestReturnedSavedVolume.Handle))
		})
	})

	Context("when volume no longer exists", func() {
		Context("when the worker is no longer around", func() {
			BeforeEach(func() {