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{
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() {
} 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) })