BeforeEach(func() { fakeFs.WriteFileError = errors.New("fake-write-error") }) 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("ignores VMNotFound errors", func() { mockCloud.EXPECT().DeleteVM("fake-vm-cid").Return(bicloud.NewCPIError("delete_vm", bicloud.CmdError{ 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")
mockBlobstore = mock_blobstore.NewMockBlobstore(mockCtrl) 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()
}) }) Describe("Delete", func() { It("deletes disk from cloud", func() { err := disk.Delete() Expect(err).ToNot(HaveOccurred()) Expect(fakeCloud.DeleteDiskInputs).To(Equal([]fakebicloud.DeleteDiskInput{ { DiskCID: "fake-disk-cid", }, })) }) It("deletes disk from repo", func() { _, err := diskRepo.Save("fake-disk-cid", 1024, diskCloudProperties) Expect(err).ToNot(HaveOccurred()) err = disk.Delete() Expect(err).ToNot(HaveOccurred()) diskRecords, err := diskRepo.All() Expect(diskRecords).To(BeEmpty()) }) Context("when deleted disk is the current disk", func() { BeforeEach(func() { diskRecord, err := diskRepo.Save("fake-disk-cid", 1024, diskCloudProperties) Expect(err).ToNot(HaveOccurred()) err = diskRepo.UpdateCurrent(diskRecord.ID) Expect(err).ToNot(HaveOccurred())