deploymentManagerFactory := NewManagerFactory(vmManagerFactory, instanceManagerFactory, diskManagerFactory, stemcellManagerFactory, mockDeploymentFactory) deploymentManager = deploymentManagerFactory.NewManager(mockCloud, mockAgentClient, mockBlobstore) }) Context("no orphan disk or stemcell records exist", func() { var ( currentDiskRecord biconfig.DiskRecord currentStemcellRecord biconfig.StemcellRecord ) BeforeEach(func() { var err error currentDiskRecord, err = diskRepo.Save("fake-disk-cid", 100, nil) Expect(err).ToNot(HaveOccurred()) err = diskRepo.UpdateCurrent(currentDiskRecord.ID) Expect(err).ToNot(HaveOccurred()) currentStemcellRecord, err = stemcellRepo.Save("fake-stemcell-name", "fake-stemcell-version", "fake-stemcell-cid") Expect(err).ToNot(HaveOccurred()) err = stemcellRepo.UpdateCurrent(currentStemcellRecord.ID) Expect(err).ToNot(HaveOccurred()) }) It("does not delete anything", func() { err := deploymentManager.Cleanup(fakeStage) Expect(err).ToNot(HaveOccurred()) diskRecord, found, err := diskRepo.FindCurrent() Expect(err).ToNot(HaveOccurred()) Expect(found).To(BeTrue())
It("returns an error", func() { _, err := manager.Create(diskPool, "fake-vm-cid") Expect(err).To(HaveOccurred()) Expect(err.Error()).To(ContainSubstring("fake-write-error")) }) }) }) Describe("FindCurrent", func() { Context("when disk already exists in disk repo", func() { BeforeEach(func() { diskRecord, err := diskRepo.Save("fake-existing-disk-cid", 1024, biproperty.Map{}) Expect(err).ToNot(HaveOccurred()) err = diskRepo.UpdateCurrent(diskRecord.ID) Expect(err).ToNot(HaveOccurred()) }) It("returns the existing disk", func() { disks, err := manager.FindCurrent() Expect(err).ToNot(HaveOccurred()) Expect(disks).To(HaveLen(1)) Expect(disks[0].CID()).To(Equal("fake-existing-disk-cid")) }) }) Context("when disk does not exists in disk repo", func() { It("returns an empty array", func() { disks, err := manager.FindCurrent() Expect(err).ToNot(HaveOccurred())
Type: bicloud.VMNotFoundError, Message: "fake-vm-not-found-message", })) err := deployment.Delete(fakeStage) Expect(err).ToNot(HaveOccurred()) }) }) }) Context("when a current disk exists", func() { BeforeEach(func() { deploymentStateService.Save(biconfig.DeploymentState{}) diskRecord, err := diskRepo.Save("fake-disk-cid", 100, nil) Expect(err).ToNot(HaveOccurred()) diskRepo.UpdateCurrent(diskRecord.ID) }) It("deletes the disk", func() { mockCloud.EXPECT().DeleteDisk("fake-disk-cid") err := deployment.Delete(fakeStage) Expect(err).ToNot(HaveOccurred()) }) Context("when current disk has been deleted manually (outside of bosh)", func() { It("deletes the disk (to ensure related resources are released by the CPI)", func() { mockCloud.EXPECT().DeleteDisk("fake-disk-cid") err := deployment.Delete(fakeStage) Expect(err).ToNot(HaveOccurred())