expectedTask.TaskDefinition.Annotation = "some annotation"
			expectedTask.TaskDefinition.Privileged = true
			expectedTask.TaskDefinition.EgressRules = nil
			expectedTask.TaskDefinition.MetricsGuid = ""
			expectedTask.TaskDefinition.EnvironmentVariables = nil

		})

		Context("when everything succeeds", func() {
			JustBeforeEach(func() {
				handler.Create(responseRecorder, newTestRequest(validCreateRequest))
			})

			It("calls DesireTask on the BBS with the correct task", func() {
				Expect(fakeClient.DesireTaskCallCount()).To(Equal(1))
				_, _, def := fakeClient.DesireTaskArgsForCall(0)
				Expect(def).To(Equal(expectedTask.TaskDefinition))
			})

			It("responds with 201 CREATED", func() {
				Expect(responseRecorder.Code).To(Equal(http.StatusCreated))
			})

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

			Context("when omitempty fields", func() {
				Context("are specified", func() {
					BeforeEach(func() {
						validCreateRequest.EnvironmentVariables = []*models.EnvironmentVariable{
Ejemplo n.º 2
0
				Expect(request).To(Equal(stagingRequest))
			})

			Context("when the recipe was built successfully", func() {
				var fakeTaskDef = &models.TaskDefinition{Annotation: "test annotation"}
				BeforeEach(func() {
					fakeBackend.BuildRecipeReturns(fakeTaskDef, "a-guid", "a-domain", nil)
				})

				It("does not send a staging complete message", func() {
					Expect(fakeCcClient.StagingCompleteCallCount()).To(Equal(0))
				})

				It("creates a task on Diego", func() {
					Expect(fakeDiegoClient.DesireTaskCallCount()).To(Equal(1))
					_, _, resultingTaskDef := fakeDiegoClient.DesireTaskArgsForCall(0)
					Expect(resultingTaskDef).To(Equal(fakeTaskDef))
				})

				Context("when creating the task succeeds", func() {
					It("does not send a staging failure response", func() {
						Expect(fakeCcClient.StagingCompleteCallCount()).To(Equal(0))
					})
				})

				Context("when the task has already been created", func() {
					BeforeEach(func() {
						fakeDiegoClient.DesireTaskReturns(models.NewError(models.Error_ResourceExists, "ok, this task already exists"))
					})

					It("does not log a failure", func() {
Ejemplo n.º 3
0
			}

			buildpackBuilder.BuildTaskReturns(newlyDesiredTask, nil)
		})

		It("logs the incoming and outgoing request", func() {
			Eventually(logger.TestSink.Buffer).Should(gbytes.Say("serving"))
			Eventually(logger.TestSink.Buffer).Should(gbytes.Say("desiring-task"))
		})

		It("creates the task", func() {
			Expect(buildpackBuilder.BuildTaskCallCount()).To(Equal(1))
			Expect(buildpackBuilder.BuildTaskArgsForCall(0)).To(Equal(&taskRequest))
			Expect(fakeBBSClient.DesireTaskCallCount()).To(Equal(1))

			guid, domain, taskDefinition := fakeBBSClient.DesireTaskArgsForCall(0)
			Expect(guid).To(Equal("the-task-guid"))
			Expect(domain).To(Equal("cf-tasks"))
			Expect(taskDefinition).To(Equal(newlyDesiredTask))
		})

		It("responds with 202 Accepted", func() {
			Expect(responseRecorder.Code).To(Equal(http.StatusAccepted))
		})

		Context("when an invalid desire task message is received", func() {
			BeforeEach(func() {
				reader := bytes.NewBufferString("not valid json")
				request.Body = ioutil.NopCloser(reader)
			})