Eventually(fakeTailedLogsOutputter.OutputTailedLogsCallCount).Should(Equal(1)) Expect(fakeTailedLogsOutputter.OutputTailedLogsArgsForCall(0)).To(Equal("my-app-guid")) Consistently(doneChan).ShouldNot(BeClosed()) }) It("handles invalid appguids", func() { test_helpers.ExecuteCommandWithArgs(logsCommand, []string{}) Expect(outputBuffer).To(test_helpers.SayIncorrectUsage()) Expect(fakeExitHandler.ExitCalledWith).To(Equal([]int{exit_codes.InvalidSyntax})) }) It("handles non existent application", func() { appExaminer.AppExistsReturns(false, nil) taskExaminer.TaskStatusReturns(task_examiner.TaskInfo{}, errors.New("task not found")) doneChan := test_helpers.AsyncExecuteCommandWithArgs(logsCommand, []string{"non_existent_app"}) Eventually(fakeTailedLogsOutputter.OutputTailedLogsCallCount).Should(Equal(1)) Expect(fakeTailedLogsOutputter.OutputTailedLogsArgsForCall(0)).To(Equal("non_existent_app")) Eventually(outputBuffer).Should(test_helpers.SayLine("Application or task non_existent_app not found.")) Eventually(outputBuffer).Should(test_helpers.SayLine("Tailing logs and waiting for non_existent_app to appear...")) Consistently(doneChan).ShouldNot(BeClosed()) }) It("handles tasks", func() { appExaminer.AppExistsReturns(false, nil) taskExaminer.TaskStatusReturns(task_examiner.TaskInfo{}, nil)
}) Describe("DeleteTaskCommand", func() { var deleteTaskCommand cli.Command BeforeEach(func() { commandFactory := command_factory.NewTaskRunnerCommandFactory(fakeTaskRunner, terminalUI, fakeExitHandler) deleteTaskCommand = commandFactory.MakeDeleteTaskCommand() }) It("Deletes the given task", func() { taskInfo := task_examiner.TaskInfo{ TaskGuid: "task-guid-1", State: "COMPLETED", } fakeTaskExaminer.TaskStatusReturns(taskInfo, nil) fakeTaskRunner.DeleteTaskReturns(nil) test_helpers.ExecuteCommandWithArgs(deleteTaskCommand, []string{"task-guid-1"}) Expect(outputBuffer).To(test_helpers.SayLine(colors.Green("OK"))) }) It("returns error when fail to delete the task", func() { taskInfo := task_examiner.TaskInfo{ TaskGuid: "task-guid-1", State: "COMPLETED", } fakeTaskExaminer.TaskStatusReturns(taskInfo, nil) fakeTaskRunner.DeleteTaskReturns(errors.New("task in unknown state")) test_helpers.ExecuteCommandWithArgs(deleteTaskCommand, []string{"task-guid-1"})
It("prints the error from build droplet", func() { fakeDropletRunner.BuildDropletReturns(errors.New("failed")) test_helpers.ExecuteCommandWithArgs(buildDropletCommand, []string{"droplet-name", "http://some.url/for/buildpack"}) Expect(outputBuffer).To(test_helpers.SayLine("Error submitting build of droplet-name: failed")) Expect(fakeDropletRunner.UploadBitsCallCount()).To(Equal(1)) Expect(fakeDropletRunner.BuildDropletCallCount()).To(Equal(1)) Expect(fakeExitHandler.ExitCalledWith).To(Equal([]int{exit_codes.CommandFailed})) }) }) Describe("waiting for the build to finish", func() { It("polls for the build to complete, outputting logs while the build runs", func() { fakeTaskExaminer.TaskStatusReturns(task_examiner.TaskInfo{State: "PENDING"}, nil) args := []string{ "droplet-name", "http://some.url/for/buildpack", } doneChan := test_helpers.AsyncExecuteCommandWithArgs(buildDropletCommand, args) Eventually(outputBuffer).Should(test_helpers.SayLine("Submitted build of droplet-name")) Eventually(fakeTailedLogsOutputter.OutputTailedLogsCallCount).Should(Equal(1)) Expect(fakeTailedLogsOutputter.OutputTailedLogsArgsForCall(0)).To(Equal("build-droplet-droplet-name")) Eventually(fakeTaskExaminer.TaskStatusCallCount).Should(Equal(1)) Expect(fakeTaskExaminer.TaskStatusArgsForCall(0)).To(Equal("build-droplet-droplet-name"))
BeforeEach(func() { commandFactory := command_factory.NewTaskExaminerCommandFactory(fakeTaskExaminer, terminalUI, fakeExitHandler) taskCommand = commandFactory.MakeTaskCommand() }) It("displays info for a pending task", func() { taskInfo := task_examiner.TaskInfo{ TaskGuid: "boop", State: "PENDING", CellID: "cell-01", Failed: false, FailureReason: "", Result: "", } fakeTaskExaminer.TaskStatusReturns(taskInfo, nil) test_helpers.ExecuteCommandWithArgs(taskCommand, []string{"boop"}) Expect(outputBuffer).To(test_helpers.Say("Task GUID")) Expect(outputBuffer).To(test_helpers.Say("boop")) Expect(outputBuffer).To(test_helpers.Say("Cell ID")) Expect(outputBuffer).To(test_helpers.Say("cell-01")) Expect(outputBuffer).To(test_helpers.Say("Status")) Expect(outputBuffer).To(test_helpers.Say(colors.Yellow("PENDING"))) Expect(outputBuffer).NotTo(test_helpers.Say("Result")) Expect(outputBuffer).NotTo(test_helpers.Say("Failure Reason")) Expect(outputBuffer).To(test_helpers.SayNewLine()) Expect(fakeTaskExaminer.TaskStatusCallCount()).To(Equal(1)) Expect(fakeTaskExaminer.TaskStatusArgsForCall(0)).To(Equal("boop"))
}) }) Describe("Delete Task", func() { getTaskStatus := func(state string) task_examiner.TaskInfo { return task_examiner.TaskInfo{ TaskGuid: "task-guid-1", State: state, } } Context("when the receptor returns errors", func() { It("returns error when not able to delete the task", func() { fakeTaskExaminer.TaskStatusReturns(getTaskStatus(receptor.TaskStateCompleted), nil) fakeReceptorClient.DeleteTaskReturns(errors.New("task in unknown state")) errChan := make(chan error) go func() { errChan <- taskRunner.DeleteTask("task-guid-1") }() Eventually(fakeClock.WatcherCount).Should(Equal(2)) fakeClock.IncrementBySeconds(1) Expect(<-errChan).To(MatchError("task in unknown state")) }) It("returns error when timeout to delete the task", func() { fakeTaskExaminer.TaskStatusReturns(getTaskStatus(receptor.TaskStateRunning), nil) errChan := make(chan error) go func() {