Context("when the actual lrp key does not match", func() { BeforeEach(func() { actualLRP.Domain = "a different domain" }) It("returns a ErrActualLRPCannotBeRemoved", func() { err := etcdDB.RemoveEvacuatingActualLRP(logger, &actualLRP.ActualLRPKey, &actualLRP.ActualLRPInstanceKey) Expect(err).To(HaveOccurred()) Expect(err).To(Equal(models.ErrActualLRPCannotBeRemoved)) }) }) Context("when the actual lrp instance key does not match", func() { BeforeEach(func() { actualLRP.CellId = "a different cell" }) It("returns a ErrActualLRPCannotBeRemoved", func() { err := etcdDB.RemoveEvacuatingActualLRP(logger, &actualLRP.ActualLRPKey, &actualLRP.ActualLRPInstanceKey) Expect(err).To(HaveOccurred()) Expect(err).To(Equal(models.ErrActualLRPCannotBeRemoved)) }) }) Context("when compare and delete fails", func() { BeforeEach(func() { resp, err := storeClient.Get(etcd.EvacuatingActualLRPSchemaPath(guid, index), false, false) fakeStoreClient.GetReturns(resp, err) fakeStoreClient.CompareAndDeleteReturns(nil, errors.New("compare and delete failed")) })
It("does not emit any events", func() { Consistently(actualHub.EmitCallCount).Should(Equal(0)) }) }) }) }) }) Context("when the instance is claimed", func() { BeforeEach(func() { actual.State = models.ActualLRPStateClaimed }) Context("by another cell", func() { BeforeEach(func() { actual.CellId = "some-other-cell" group := &models.ActualLRPGroup{Evacuating: afterActual} fakeEvacuationDB.EvacuateActualLRPReturns(group, nil) }) It("evacuates the LRP", func() { response := models.EvacuationResponse{} err := response.Unmarshal(responseRecorder.Body.Bytes()) Expect(err).NotTo(HaveOccurred()) Expect(response.KeepContainer).To(BeTrue()) Expect(response.Error).To(BeNil()) Expect(fakeEvacuationDB.EvacuateActualLRPCallCount()).To(Equal(1)) _, actualLRPKey, actualLRPInstanceKey, actualLrpNetInfo, ttl := fakeEvacuationDB.EvacuateActualLRPArgsForCall(0) Expect(*actualLRPKey).To(Equal(actual.ActualLRPKey)) Expect(*actualLRPInstanceKey).To(Equal(*requestBody.ActualLrpInstanceKey))