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.