}

			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"))
			}

			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))
			_, desiredLRP := fakeBBS.DesireLRPArgsForCall(0)
			Expect(desiredLRP).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() {
Example #3
0
					{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() {
					fetcher.FetchDesiredAppsStub = func(
						logger lager.Logger,
						cancel <-chan struct{},
						httpClient *http.Client,
						fingerprints <-chan []cc_messages.CCDesiredAppFingerprint,
					) (<-chan []cc_messages.DesireAppRequestFromCC, <-chan error) {
						desireAppRequests := make(chan []cc_messages.DesireAppRequestFromCC)
						close(desireAppRequests)

						<-fingerprints
Example #4
0
						{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))
					_, desiredLRP := bbsClient.DesireLRPArgsForCall(0)
					Expect(desiredLRP.ProcessGuid).To(Equal("new-process-guid"))
				})

				Context("when fetching desire app requests from the CC fails", func() {
					BeforeEach(func() {
						fetcher.FetchDesiredAppsStub = func(
							logger lager.Logger,
							cancel <-chan struct{},
							httpClient *http.Client,
							fingerprints <-chan []cc_messages.CCDesiredAppFingerprint,
						) (<-chan []cc_messages.DesireAppRequestFromCC, <-chan error) {
							desireAppRequests := make(chan []cc_messages.DesireAppRequestFromCC)
							close(desireAppRequests)

							<-fingerprints