Skip to content

Commit 5e49d8c

Browse files
authored
chore: reduce execution time of TestProvisionerJobs (#19475)
Note: this commit was partially authored by AI. - Replaces coderdtest.CreateTemplate/TemplateVersion() with direct dbgen calls. We do not need a fully functional template for these tests. - Removes provisioner daemon creation/cleanup. We do not need a running provisioner daemon here; this functionality is tested elsewhere. - Simplifies provisioner job creation test helpers. This reduces the test runtime by over 50%: Old: ``` time go test -count=100 ./cli -test.run=TestProvisionerJobs ok github.com/coder/coder/v2/cli 50.149s ``` New: ``` time go test -count=100 ./cli -test.run=TestProvisionerJobs ok github.com/coder/coder/v2/cli 21.898 ```
1 parent 4970da4 commit 5e49d8c

File tree

1 file changed

+52
-59
lines changed

1 file changed

+52
-59
lines changed

cli/provisionerjobs_test.go

Lines changed: 52 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"testing"
99
"time"
1010

11-
"github.com/aws/smithy-go/ptr"
1211
"github.com/google/uuid"
1312
"github.com/stretchr/testify/assert"
1413
"github.com/stretchr/testify/require"
@@ -20,6 +19,7 @@ import (
2019
"github.com/coder/coder/v2/coderd/database/dbtestutil"
2120
"github.com/coder/coder/v2/coderd/rbac"
2221
"github.com/coder/coder/v2/codersdk"
22+
"github.com/coder/coder/v2/provisionersdk"
2323
"github.com/coder/coder/v2/testutil"
2424
)
2525

@@ -36,67 +36,43 @@ func TestProvisionerJobs(t *testing.T) {
3636
templateAdminClient, templateAdmin := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.ScopedRoleOrgTemplateAdmin(owner.OrganizationID))
3737
memberClient, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
3838

39-
// Create initial resources with a running provisioner.
40-
firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", map[string]string{"owner": "", "scope": "organization"})
41-
t.Cleanup(func() { _ = firstProvisioner.Close() })
42-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, completeWithAgent())
43-
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
44-
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(req *codersdk.CreateTemplateRequest) {
45-
req.AllowUserCancelWorkspaceJobs = ptr.Bool(true)
39+
// These CLI tests are related to provisioner job CRUD operations and as such
40+
// do not require the overhead of starting a provisioner. Other provisioner job
41+
// functionalities (acquisition etc.) are tested elsewhere.
42+
template := dbgen.Template(t, db, database.Template{
43+
OrganizationID: owner.OrganizationID,
44+
CreatedBy: owner.UserID,
45+
AllowUserCancelWorkspaceJobs: true,
46+
})
47+
version := dbgen.TemplateVersion(t, db, database.TemplateVersion{
48+
OrganizationID: owner.OrganizationID,
49+
CreatedBy: owner.UserID,
50+
TemplateID: uuid.NullUUID{UUID: template.ID, Valid: true},
4651
})
47-
48-
// Stop the provisioner so it doesn't grab any more jobs.
49-
firstProvisioner.Close()
5052

5153
t.Run("Cancel", func(t *testing.T) {
5254
t.Parallel()
5355

54-
// Set up test helpers.
55-
type jobInput struct {
56-
WorkspaceBuildID string `json:"workspace_build_id,omitempty"`
57-
TemplateVersionID string `json:"template_version_id,omitempty"`
58-
DryRun bool `json:"dry_run,omitempty"`
59-
}
60-
prepareJob := func(t *testing.T, input jobInput) database.ProvisionerJob {
56+
// Test helper to create a provisioner job of a given type with a given input.
57+
prepareJob := func(t *testing.T, jobType database.ProvisionerJobType, input json.RawMessage) database.ProvisionerJob {
6158
t.Helper()
62-
63-
inputBytes, err := json.Marshal(input)
64-
require.NoError(t, err)
65-
66-
var typ database.ProvisionerJobType
67-
switch {
68-
case input.WorkspaceBuildID != "":
69-
typ = database.ProvisionerJobTypeWorkspaceBuild
70-
case input.TemplateVersionID != "":
71-
if input.DryRun {
72-
typ = database.ProvisionerJobTypeTemplateVersionDryRun
73-
} else {
74-
typ = database.ProvisionerJobTypeTemplateVersionImport
75-
}
76-
default:
77-
t.Fatal("invalid input")
78-
}
79-
80-
var (
81-
tags = database.StringMap{"owner": "", "scope": "organization", "foo": uuid.New().String()}
82-
_ = dbgen.ProvisionerDaemon(t, db, database.ProvisionerDaemon{Tags: tags})
83-
job = dbgen.ProvisionerJob(t, db, coderdAPI.Pubsub, database.ProvisionerJob{
84-
InitiatorID: member.ID,
85-
Input: json.RawMessage(inputBytes),
86-
Type: typ,
87-
Tags: tags,
88-
StartedAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(-time.Minute), Valid: true},
89-
})
90-
)
91-
return job
59+
return dbgen.ProvisionerJob(t, db, coderdAPI.Pubsub, database.ProvisionerJob{
60+
InitiatorID: member.ID,
61+
Input: input,
62+
Type: jobType,
63+
StartedAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(-time.Minute), Valid: true},
64+
Tags: database.StringMap{provisionersdk.TagOwner: "", provisionersdk.TagScope: provisionersdk.ScopeOrganization, "foo": uuid.NewString()},
65+
})
9266
}
9367

68+
// Test helper to create a workspace build job with a predefined input.
9469
prepareWorkspaceBuildJob := func(t *testing.T) database.ProvisionerJob {
9570
t.Helper()
9671
var (
97-
wbID = uuid.New()
98-
job = prepareJob(t, jobInput{WorkspaceBuildID: wbID.String()})
99-
w = dbgen.Workspace(t, db, database.WorkspaceTable{
72+
wbID = uuid.New()
73+
input, _ = json.Marshal(map[string]string{"workspace_build_id": wbID.String()})
74+
job = prepareJob(t, database.ProvisionerJobTypeWorkspaceBuild, input)
75+
w = dbgen.Workspace(t, db, database.WorkspaceTable{
10076
OrganizationID: owner.OrganizationID,
10177
OwnerID: member.ID,
10278
TemplateID: template.ID,
@@ -112,12 +88,14 @@ func TestProvisionerJobs(t *testing.T) {
11288
return job
11389
}
11490

115-
prepareTemplateVersionImportJobBuilder := func(t *testing.T, dryRun bool) database.ProvisionerJob {
91+
// Test helper to create a template version import job with a predefined input.
92+
prepareTemplateVersionImportJob := func(t *testing.T) database.ProvisionerJob {
11693
t.Helper()
11794
var (
118-
tvID = uuid.New()
119-
job = prepareJob(t, jobInput{TemplateVersionID: tvID.String(), DryRun: dryRun})
120-
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
95+
tvID = uuid.New()
96+
input, _ = json.Marshal(map[string]string{"template_version_id": tvID.String()})
97+
job = prepareJob(t, database.ProvisionerJobTypeTemplateVersionImport, input)
98+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
12199
OrganizationID: owner.OrganizationID,
122100
CreatedBy: templateAdmin.ID,
123101
ID: tvID,
@@ -127,11 +105,26 @@ func TestProvisionerJobs(t *testing.T) {
127105
)
128106
return job
129107
}
130-
prepareTemplateVersionImportJob := func(t *testing.T) database.ProvisionerJob {
131-
return prepareTemplateVersionImportJobBuilder(t, false)
132-
}
108+
109+
// Test helper to create a template version import dry run job with a predefined input.
133110
prepareTemplateVersionImportJobDryRun := func(t *testing.T) database.ProvisionerJob {
134-
return prepareTemplateVersionImportJobBuilder(t, true)
111+
t.Helper()
112+
var (
113+
tvID = uuid.New()
114+
input, _ = json.Marshal(map[string]interface{}{
115+
"template_version_id": tvID.String(),
116+
"dry_run": true,
117+
})
118+
job = prepareJob(t, database.ProvisionerJobTypeTemplateVersionDryRun, input)
119+
_ = dbgen.TemplateVersion(t, db, database.TemplateVersion{
120+
OrganizationID: owner.OrganizationID,
121+
CreatedBy: templateAdmin.ID,
122+
ID: tvID,
123+
TemplateID: uuid.NullUUID{UUID: template.ID, Valid: true},
124+
JobID: job.ID,
125+
})
126+
)
127+
return job
135128
}
136129

137130
// Run the cancellation test suite.

0 commit comments

Comments
 (0)
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