It("does not emit a change event to the hub", func() { Consistently(actualHub.EmitCallCount).Should(Equal(0)) }) }) Context("with an Unclaimed LRP", func() { BeforeEach(func() { fakeActualLRPDB.ActualLRPGroupByProcessGuidAndIndexReturns(actualLRPGroup, nil) }) It("removes the LRP", func() { Expect(response.Error).To(BeNil()) Expect(fakeActualLRPDB.RemoveActualLRPCallCount()).To(Equal(1)) _, deletedLRPGuid, deletedLRPIndex, deletedLRPInstanceKey := fakeActualLRPDB.RemoveActualLRPArgsForCall(0) Expect(deletedLRPGuid).To(Equal(processGuid)) Expect(deletedLRPIndex).To(Equal(index)) Expect(deletedLRPInstanceKey).To(Equal(&actualLRPGroup.Instance.ActualLRPInstanceKey)) }) It("emits a removed event to the hub", func() { Eventually(actualHub.EmitCallCount).Should(Equal(1)) event := actualHub.EmitArgsForCall(0) removedEvent, ok := event.(*models.ActualLRPRemovedEvent) Expect(ok).To(BeTrue()) Expect(removedEvent.ActualLrpGroup).To(Equal(&models.ActualLRPGroup{Instance: &actualLRP})) }) Context("when removing the actual lrp fails", func() { BeforeEach(func() {
key, instanceKey := fakeRepClient.StopLRPInstanceArgsForCall(0) Expect(key).To(Equal(runningActualLRPGroup.Instance.ActualLRPKey)) Expect(instanceKey).To(Equal(runningActualLRPGroup.Instance.ActualLRPInstanceKey)) key, instanceKey = fakeRepClient.StopLRPInstanceArgsForCall(1) Expect(key).To(Equal(evacuatingAndRunningActualLRPGroup.Instance.ActualLRPKey)) Expect(instanceKey).To(Equal(evacuatingAndRunningActualLRPGroup.Instance.ActualLRPInstanceKey)) }) It("removes all of the corresponding unclaimed and crashed actual lrps", func() { Expect(fakeActualLRPDB.ActualLRPGroupsByProcessGuidCallCount()).To(Equal(1)) _, processGuid := fakeActualLRPDB.ActualLRPGroupsByProcessGuidArgsForCall(0) Expect(processGuid).To(Equal("some-guid")) Expect(fakeActualLRPDB.RemoveActualLRPCallCount()).To(Equal(2)) _, processGuid, index, actualLRPInstanceKey := fakeActualLRPDB.RemoveActualLRPArgsForCall(0) Expect(index).To(BeEquivalentTo(3)) Expect(processGuid).To(Equal("some-guid")) Expect(actualLRPInstanceKey).To(BeNil()) _, processGuid, index, actualLRPInstanceKey = fakeActualLRPDB.RemoveActualLRPArgsForCall(1) Expect(index).To(BeEquivalentTo(4)) Expect(processGuid).To(Equal("some-guid")) Expect(actualLRPInstanceKey).To(BeNil()) }) Context("when fetching the actual lrps fails", func() { BeforeEach(func() { fakeActualLRPDB.ActualLRPGroupsByProcessGuidReturns(nil, errors.New("new error dawg")) })
JustBeforeEach(func() { handler.EvacuateStoppedActualLRP(logger, responseRecorder, request) }) It("does not error and does not keep the container", func() { response := models.EvacuationResponse{} err := response.Unmarshal(responseRecorder.Body.Bytes()) Expect(err).NotTo(HaveOccurred()) Expect(response.KeepContainer).To(BeFalse()) Expect(response.Error).To(BeNil()) }) It("removes the actual lrp", func() { Expect(fakeActualLRPDB.RemoveActualLRPCallCount()).To(Equal(1)) _, guid, index, actualLRPInstanceKey := fakeActualLRPDB.RemoveActualLRPArgsForCall(0) Expect(guid).To(Equal("process-guid")) Expect(index).To(BeEquivalentTo(1)) Expect(actualLRPInstanceKey).To(Equal(&actual.ActualLRPInstanceKey)) }) It("removes the evacuating actual lrp", func() { Expect(fakeEvacuationDB.RemoveEvacuatingActualLRPCallCount()).To(Equal(1)) _, lrpKey, lrpInstanceKey := fakeEvacuationDB.RemoveEvacuatingActualLRPArgsForCall(0) Expect(*lrpKey).To(Equal(actual.ActualLRPKey)) Expect(*lrpInstanceKey).To(Equal(actual.ActualLRPInstanceKey)) }) It("emits events to the hub", func() { Eventually(actualHub.EmitCallCount).Should(Equal(2))