Routes: &models.Routes{ routes.DIEGO_SSH: &diegoSSHRouteMessage, }, LogGuid: "log-guid", } actualLRPGroup = &models.ActualLRPGroup{ Instance: &models.ActualLRP{ ActualLRPKey: models.NewActualLRPKey("some-guid", 1, "some-domain"), ActualLRPInstanceKey: models.NewActualLRPInstanceKey("some-instance-guid", "some-cell-id"), ActualLRPNetInfo: models.NewActualLRPNetInfo("1.2.3.4", models.NewPortMapping(3333, 1111)), }, } bbsClient = new(fake_bbs.FakeClient) bbsClient.ActualLRPGroupByProcessGuidAndIndexReturns(actualLRPGroup, nil) bbsClient.DesiredLRPByProcessGuidReturns(desiredLRP, nil) credentials = []byte("some-user:some-password") permissionsBuilder = authenticators.NewPermissionsBuiler(bbsClient) remoteAddr, err := net.ResolveIPAddr("ip", "1.1.1.1") Expect(err).NotTo(HaveOccurred()) metadata = &fake_ssh.FakeConnMetadata{} metadata.RemoteAddrReturns(remoteAddr) processGuid = "some-guid" index = 1 }) JustBeforeEach(func() {
BeforeEach(func() { req = newTestRequest("") req.Form = url.Values{ ":process_guid": []string{"process-guid-1"}, ":index": []string{"2"}, } }) JustBeforeEach(func() { handler.GetByProcessGuidAndIndex(responseRecorder, req) }) Context("when getting the LRP group from the BBS succeeds", func() { BeforeEach(func() { fakeBBS.ActualLRPGroupByProcessGuidAndIndexReturns( &models.ActualLRPGroup{Instance: actualLRP2}, nil, ) }) It("calls the BBS to retrieve the actual LRPs", func() { Expect(fakeBBS.ActualLRPGroupByProcessGuidAndIndexCallCount()).To(Equal(1)) processGuid, index := fakeBBS.ActualLRPGroupByProcessGuidAndIndexArgsForCall(0) Expect(processGuid).To(Equal("process-guid-1")) Expect(index).To(Equal(2)) }) It("responds with 200 Status OK", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK)) }) It("returns an actual lrp response", func() {
It("invokes the bbs to retire", func() { Expect(fakeBBS.RetireActualLRPCallCount()).To(Equal(1)) actualLRPKey := fakeBBS.RetireActualLRPArgsForCall(0) Expect(actualLRPKey.ProcessGuid).To(Equal("process-guid-0")) Expect(actualLRPKey.Index).To(BeEquivalentTo(1)) }) It("responds with 202 Accepted", func() { Expect(responseRecorder.Code).To(Equal(http.StatusAccepted)) }) Context("when the bbs fails", func() { BeforeEach(func() { fakeBBS.ActualLRPGroupByProcessGuidAndIndexReturns(nil, errors.New("oh no")) }) It("responds with a ServiceUnavailabe error", func() { Expect(responseRecorder.Code).To(Equal(http.StatusServiceUnavailable)) }) }) Context("when the bbs cannot find the guid", func() { BeforeEach(func() { fakeBBS.ActualLRPGroupByProcessGuidAndIndexReturns(nil, models.ErrResourceNotFound) }) It("responds with a NotFound error", func() { Expect(responseRecorder.Code).To(Equal(http.StatusNotFound)) })