From b4f8c53b93f78d69d053ce101bcc4799b1b977a6 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Wed, 20 Jul 2022 12:41:16 +0000 Subject: [PATCH 1/4] set a failed canceled job status correctly resolves #1374 --- coderd/provisionerjobs.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/coderd/provisionerjobs.go b/coderd/provisionerjobs.go index 4ff2d6551c4e5..b18845e55d7e5 100644 --- a/coderd/provisionerjobs.go +++ b/coderd/provisionerjobs.go @@ -312,7 +312,11 @@ func convertProvisionerJob(provisionerJob database.ProvisionerJob) codersdk.Prov switch { case provisionerJob.CanceledAt.Valid: if provisionerJob.CompletedAt.Valid { - job.Status = codersdk.ProvisionerJobCanceled + if job.Error == "" { + job.Status = codersdk.ProvisionerJobCanceled + } else { + job.Status = codersdk.ProvisionerJobFailed + } } else { job.Status = codersdk.ProvisionerJobCanceling } From 5df285a27184a846a04193bda2810657fc663d1e Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Wed, 20 Jul 2022 20:45:57 +0000 Subject: [PATCH 2/4] added unit test for convertProvisionerJob --- coderd/provisionerjobs_internal_test.go | 106 ++++++++++++++++++++++++ coderd/templateversions_test.go | 6 ++ 2 files changed, 112 insertions(+) diff --git a/coderd/provisionerjobs_internal_test.go b/coderd/provisionerjobs_internal_test.go index 4901f2f1ea9a4..6a74ad9748b13 100644 --- a/coderd/provisionerjobs_internal_test.go +++ b/coderd/provisionerjobs_internal_test.go @@ -3,6 +3,7 @@ package coderd import ( "context" "crypto/sha256" + "database/sql" "encoding/json" "net/http/httptest" "net/url" @@ -146,6 +147,111 @@ func TestProvisionerJobLogs_Unit(t *testing.T) { }) } +func TestConvertProvisionerJob_Unit(t *testing.T) { + t.Parallel() + validNullTimeMock := sql.NullTime{ + Time: database.Now(), + Valid: true, + } + invalidNullTimeMock := sql.NullTime{ + Valid: false, + } + errorMock := sql.NullString{ + String: "error", + Valid: true, + } + testCases := []struct { + name string + input database.ProvisionerJob + expected codersdk.ProvisionerJob + }{ + { + name: "empty", + input: database.ProvisionerJob{}, + expected: codersdk.ProvisionerJob{ + Status: codersdk.ProvisionerJobPending, + }, + }, + { + name: "cancellation pending", + input: database.ProvisionerJob{ + CanceledAt: validNullTimeMock, + CompletedAt: invalidNullTimeMock, + }, + expected: codersdk.ProvisionerJob{ + Status: codersdk.ProvisionerJobCanceling, + }, + }, + { + name: "cancellation failed", + input: database.ProvisionerJob{ + CanceledAt: validNullTimeMock, + CompletedAt: validNullTimeMock, + Error: errorMock, + }, + expected: codersdk.ProvisionerJob{ + CompletedAt: &validNullTimeMock.Time, + Status: codersdk.ProvisionerJobFailed, + Error: errorMock.String, + }, + }, + { + name: "cancellation succeeded", + input: database.ProvisionerJob{ + CanceledAt: validNullTimeMock, + CompletedAt: validNullTimeMock, + }, + expected: codersdk.ProvisionerJob{ + CompletedAt: &validNullTimeMock.Time, + Status: codersdk.ProvisionerJobCanceled, + }, + }, + { + name: "job pending", + input: database.ProvisionerJob{ + StartedAt: invalidNullTimeMock, + }, + expected: codersdk.ProvisionerJob{ + Status: codersdk.ProvisionerJobPending, + }, + }, + { + name: "job failed", + input: database.ProvisionerJob{ + CompletedAt: validNullTimeMock, + StartedAt: validNullTimeMock, + Error: errorMock, + }, + expected: codersdk.ProvisionerJob{ + CompletedAt: &validNullTimeMock.Time, + StartedAt: &validNullTimeMock.Time, + Error: errorMock.String, + Status: codersdk.ProvisionerJobFailed, + }, + }, + { + name: "job succeeded", + input: database.ProvisionerJob{ + CompletedAt: validNullTimeMock, + StartedAt: validNullTimeMock, + }, + expected: codersdk.ProvisionerJob{ + CompletedAt: &validNullTimeMock.Time, + StartedAt: &validNullTimeMock.Time, + Status: codersdk.ProvisionerJobSucceeded, + }, + }, + } + for _, testCase := range testCases { + testCase := testCase + t.Run(testCase.name, func(t *testing.T) { + t.Parallel() + actual := convertProvisionerJob(testCase.input) + assert.Equal(t, testCase.expected, actual) + }) + } +} + type fakePubSub struct { t *testing.T cond *sync.Cond diff --git a/coderd/templateversions_test.go b/coderd/templateversions_test.go index 0c461cf4d303a..ff75c941b5cbe 100644 --- a/coderd/templateversions_test.go +++ b/coderd/templateversions_test.go @@ -125,6 +125,12 @@ func TestPatchCancelTemplateVersion(t *testing.T) { var apiErr *codersdk.Error require.ErrorAs(t, err, &apiErr) require.Equal(t, http.StatusPreconditionFailed, apiErr.StatusCode()) + require.Eventually(t, func() bool { + var err error + version, err = client.TemplateVersion(context.Background(), version.ID) + require.NoError(t, err) + return version.Job.Status == codersdk.ProvisionerJobFailed + }, 5*time.Second, 25*time.Millisecond) }) // TODO(Cian): until we are able to test cancellation properly, validating // Running -> Canceling is the best we can do for now. From 4e00334b6ef76d2565dafc6a08d58a2db18c9a05 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Thu, 21 Jul 2022 09:46:57 -0400 Subject: [PATCH 3/4] Update coderd/provisionerjobs_internal_test.go Co-authored-by: Cian Johnston --- coderd/provisionerjobs_internal_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/coderd/provisionerjobs_internal_test.go b/coderd/provisionerjobs_internal_test.go index 6a74ad9748b13..2a9914887227a 100644 --- a/coderd/provisionerjobs_internal_test.go +++ b/coderd/provisionerjobs_internal_test.go @@ -153,9 +153,7 @@ func TestConvertProvisionerJob_Unit(t *testing.T) { Time: database.Now(), Valid: true, } - invalidNullTimeMock := sql.NullTime{ - Valid: false, - } + invalidNullTimeMock := sql.NullTime{} errorMock := sql.NullString{ String: "error", Valid: true, From 4c92556f2484f8affd18c380386166f85621fcf8 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Thu, 21 Jul 2022 20:13:40 +0000 Subject: [PATCH 4/4] PR feedback --- coderd/templateversions_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/coderd/templateversions_test.go b/coderd/templateversions_test.go index ff75c941b5cbe..8579b5e5daffb 100644 --- a/coderd/templateversions_test.go +++ b/coderd/templateversions_test.go @@ -128,8 +128,7 @@ func TestPatchCancelTemplateVersion(t *testing.T) { require.Eventually(t, func() bool { var err error version, err = client.TemplateVersion(context.Background(), version.ID) - require.NoError(t, err) - return version.Job.Status == codersdk.ProvisionerJobFailed + return assert.NoError(t, err) && version.Job.Status == codersdk.ProvisionerJobFailed }, 5*time.Second, 25*time.Millisecond) }) // TODO(Cian): until we are able to test cancellation properly, validating pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy