8
8
"testing"
9
9
"time"
10
10
11
- "github.com/aws/smithy-go/ptr"
12
11
"github.com/google/uuid"
13
12
"github.com/stretchr/testify/assert"
14
13
"github.com/stretchr/testify/require"
@@ -20,6 +19,7 @@ import (
20
19
"github.com/coder/coder/v2/coderd/database/dbtestutil"
21
20
"github.com/coder/coder/v2/coderd/rbac"
22
21
"github.com/coder/coder/v2/codersdk"
22
+ "github.com/coder/coder/v2/provisionersdk"
23
23
"github.com/coder/coder/v2/testutil"
24
24
)
25
25
@@ -36,67 +36,43 @@ func TestProvisionerJobs(t *testing.T) {
36
36
templateAdminClient , templateAdmin := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID , rbac .ScopedRoleOrgTemplateAdmin (owner .OrganizationID ))
37
37
memberClient , member := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
38
38
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 },
46
51
})
47
-
48
- // Stop the provisioner so it doesn't grab any more jobs.
49
- firstProvisioner .Close ()
50
52
51
53
t .Run ("Cancel" , func (t * testing.T ) {
52
54
t .Parallel ()
53
55
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 {
61
58
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
+ })
92
66
}
93
67
68
+ // Test helper to create a workspace build job with a predefined input.
94
69
prepareWorkspaceBuildJob := func (t * testing.T ) database.ProvisionerJob {
95
70
t .Helper ()
96
71
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 {
100
76
OrganizationID : owner .OrganizationID ,
101
77
OwnerID : member .ID ,
102
78
TemplateID : template .ID ,
@@ -112,12 +88,14 @@ func TestProvisionerJobs(t *testing.T) {
112
88
return job
113
89
}
114
90
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 {
116
93
t .Helper ()
117
94
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 {
121
99
OrganizationID : owner .OrganizationID ,
122
100
CreatedBy : templateAdmin .ID ,
123
101
ID : tvID ,
@@ -127,11 +105,26 @@ func TestProvisionerJobs(t *testing.T) {
127
105
)
128
106
return job
129
107
}
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.
133
110
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
135
128
}
136
129
137
130
// Run the cancellation test suite.
0 commit comments