From e8707171b4b7767263d45c29e11c079976274f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 25 Feb 2022 11:07:06 +0100 Subject: [PATCH] Manager: add test for saving task status change with error on job save --- .../task_state_machine_test.go | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/internal/manager/task_state_machine/task_state_machine_test.go b/internal/manager/task_state_machine/task_state_machine_test.go index 597c3c3f..20aafa4e 100644 --- a/internal/manager/task_state_machine/task_state_machine_test.go +++ b/internal/manager/task_state_machine/task_state_machine_test.go @@ -22,6 +22,7 @@ package task_state_machine import ( "context" + "errors" "fmt" "testing" @@ -52,6 +53,25 @@ func TestTaskStatusChangeQueuedToActive(t *testing.T) { assert.NoError(t, sm.TaskStatusChange(ctx, task, api.TaskStatusActive)) } +func TestTaskStatusChangeSaveTaskAfterJobChangeFailure(t *testing.T) { + mockCtrl, ctx, sm, mocks := taskStateMachineTestFixtures(t) + defer mockCtrl.Finish() + + // A task status change should be saved, even when triggering the job change errors somehow. + task := taskWithStatus(api.JobStatusQueued, api.TaskStatusQueued) + + jobSaveErr := errors.New("hypothetical job save error") + mocks.persist.EXPECT(). + SaveJobStatus(gomock.Any(), task.Job). + Return(jobSaveErr) + + // Expect a call to save the task in the persistence layer, regardless of the above error. + mocks.expectSaveTaskWithStatus(t, task, api.TaskStatusActive) + + returnedErr := sm.TaskStatusChange(ctx, task, api.TaskStatusActive) + assert.ErrorIs(t, returnedErr, jobSaveErr, "the returned error should wrap the persistence layer error") +} + func TestTaskStatusChangeActiveToCompleted(t *testing.T) { mockCtrl, ctx, sm, mocks := taskStateMachineTestFixtures(t) defer mockCtrl.Finish()