fakeBBS.DesiredLRPByProcessGuidReturns(&models.DesiredLRP{}, models.ErrResourceNotFound) buildpackBuilder.BuildReturns(newlyDesiredLRP, nil) }) It("logs the incoming and outgoing request", func() { Eventually(logger.TestSink.Buffer).Should(gbytes.Say("request-from-cc")) Eventually(logger.TestSink.Buffer).Should(gbytes.Say("creating-desired-lrp")) }) It("creates the desired LRP", func() { Expect(fakeBBS.DesireLRPCallCount()).To(Equal(1)) Expect(fakeBBS.DesiredLRPByProcessGuidCallCount()).To(Equal(1)) Expect(fakeBBS.DesireLRPArgsForCall(0)).To(Equal(newlyDesiredLRP)) Expect(buildpackBuilder.BuildArgsForCall(0)).To(Equal(&desireAppRequest)) }) It("responds with 202 Accepted", func() { Expect(responseRecorder.Code).To(Equal(http.StatusAccepted)) }) It("increments the desired LRPs counter", func() { Expect(metricSender.GetCounter("LRPsDesired")).To(Equal(uint64(1))) }) Context("when the bbs fails", func() { BeforeEach(func() { fakeBBS.DesireLRPReturns(errors.New("oh no")) })
Expect(bbsClient.RemoveDesiredLRPArgsForCall(0)).To(Equal("excess-process-guid")) }) }) Context("and the differ discovers missing apps", func() { It("uses the recipe builder to construct the create LRP request", func() { Eventually(buildpackRecipeBuilder.BuildCallCount).Should(Equal(1)) Consistently(buildpackRecipeBuilder.BuildCallCount).Should(Equal(1)) expectedRoutingInfo, err := cc_messages.CCHTTPRoutes{ {Hostname: "host-new-process-guid"}, }.CCRouteInfo() Expect(err).NotTo(HaveOccurred()) Eventually(buildpackRecipeBuilder.BuildArgsForCall(0)).Should(Equal( &cc_messages.DesireAppRequestFromCC{ ProcessGuid: "new-process-guid", ETag: "new-etag", RoutingInfo: expectedRoutingInfo, })) }) It("creates a desired LRP for the missing app", func() { Eventually(bbsClient.DesireLRPCallCount).Should(Equal(1)) Consistently(bbsClient.DesireLRPCallCount).Should(Equal(1)) Expect(bbsClient.DesireLRPArgsForCall(0).ProcessGuid).To(Equal("new-process-guid")) }) Context("when fetching desire app requests from the CC fails", func() { BeforeEach(func() {