func (h *ActualLRPLifecycleHandler) RemoveActualLRP(w http.ResponseWriter, req *http.Request) { var err error logger := h.logger.Session("remove-actual-lrp") request := &models.RemoveActualLRPRequest{} response := &models.ActualLRPLifecycleResponse{} defer func() { exitIfUnrecoverable(logger, h.exitChan, response.Error) }() defer writeResponse(w, response) err = parseRequest(logger, req, request) if err != nil { response.Error = models.ConvertError(err) return } beforeActualLRPGroup, err := h.db.ActualLRPGroupByProcessGuidAndIndex(logger, request.ProcessGuid, request.Index) if err != nil { response.Error = models.ConvertError(err) return } err = h.db.RemoveActualLRP(logger, request.ProcessGuid, request.Index, request.ActualLrpInstanceKey) if err != nil { response.Error = models.ConvertError(err) return } go h.actualHub.Emit(models.NewActualLRPRemovedEvent(beforeActualLRPGroup)) }
It("returns the event", func() { event, err := eventSource.Next() Expect(err).NotTo(HaveOccurred()) actualLRPChangedEvent, ok := event.(*models.ActualLRPChangedEvent) Expect(ok).To(BeTrue()) Expect(actualLRPChangedEvent).To(Equal(expectedEvent)) }) }) Context("when receiving a ActualLRPRemovedEvent", func() { var expectedEvent *models.ActualLRPRemovedEvent BeforeEach(func() { expectedEvent = models.NewActualLRPRemovedEvent(actualLRPGroup) payload, err := proto.Marshal(expectedEvent) Expect(err).NotTo(HaveOccurred()) payload = []byte(base64.StdEncoding.EncodeToString(payload)) fakeRawEventSource.NextReturns( sse.Event{ ID: "sup", Name: string(expectedEvent.EventType()), Data: payload, }, nil, ) }) It("returns the event", func() {
JustBeforeEach(func() { actualLRP := &models.ActualLRPGroup{ Instance: &models.ActualLRP{ ActualLRPKey: models.NewActualLRPKey(expectedProcessGuid, 1, "domain"), ActualLRPInstanceKey: models.NewActualLRPInstanceKey(expectedInstanceGuid, "cell-id"), ActualLRPNetInfo: models.NewActualLRPNetInfo( expectedHost, models.NewPortMapping(expectedExternalPort, expectedContainerPort), models.NewPortMapping(expectedAdditionalExternalPort, expectedAdditionalContainerPort), ), State: models.ActualLRPStateRunning, }, } nextEvent.Store(EventHolder{models.NewActualLRPRemovedEvent(actualLRP)}) }) It("should remove the endpoint from the table", func() { Eventually(table.RemoveEndpointCallCount).Should(Equal(2)) key, endpoint := table.RemoveEndpointArgsForCall(0) Expect(key).To(Equal(expectedRoutingKey)) Expect(endpoint).To(Equal(routing_table.Endpoint{ InstanceGuid: expectedInstanceGuid, Host: expectedHost, Port: expectedExternalPort, ContainerPort: expectedContainerPort, })) key, endpoint = table.RemoveEndpointArgsForCall(1)