Example #1
0
		})

		Context("and the differ provides creates and deletes", func() {
			It("sends them to the bbs and updates the domain", func() {
				Eventually(bbsClient.DesireLRPCallCount).Should(Equal(1))
				Eventually(bbsClient.RemoveDesiredLRPCallCount).Should(Equal(1))
				Eventually(bbsClient.UpsertDomainCallCount).Should(Equal(1))

				Expect(bbsClient.DesireLRPArgsForCall(0)).To(BeEquivalentTo(&models.DesiredLRP{
					ProcessGuid: "new-process-guid",
					Annotation:  "new-etag",
				}))

				Expect(bbsClient.RemoveDesiredLRPArgsForCall(0)).To(Equal("excess-process-guid"))

				d, ttl := bbsClient.UpsertDomainArgsForCall(0)
				Expect(d).To(Equal("cf-apps"))
				Expect(ttl).To(Equal(1 * time.Second))
			})

			Context("and the create request fails", func() {
				BeforeEach(func() {
					bbsClient.DesireLRPReturns(errors.New("create failed!"))
				})

				It("does not update the domain", func() {
					Consistently(bbsClient.UpsertDomainCallCount).Should(Equal(0))
				})

				It("sends all the other updates", func() {
					Eventually(bbsClient.DesireLRPCallCount).Should(Equal(1))
			var req *http.Request

			BeforeEach(func() {
				req = newTestRequest("")
				req.URL.RawQuery = url.Values{":domain": []string{domain}}.Encode()
				req.Header["Cache-Control"] = []string{"public", "max-age=1000"}
			})

			JustBeforeEach(func() {
				handler.Upsert(responseRecorder, req)
			})

			Context("when the call to the BBS succeeds", func() {
				It("calls Upsert on the BBS", func() {
					Expect(fakeBBS.UpsertDomainCallCount()).To(Equal(1))
					d, ttl := fakeBBS.UpsertDomainArgsForCall(0)
					Expect(d).To(Equal(domain))
					Expect(ttl).To(Equal(ttl))
				})

				It("responds with 204 Status NO CONTENT", func() {
					Expect(responseRecorder.Code).To(Equal(http.StatusNoContent))
				})

				It("responds with an empty body", func() {
					Expect(responseRecorder.Body.String()).To(Equal(""))
				})
			})

			Context("when the call to the BBS fails", func() {
				BeforeEach(func() {