@@ -21,6 +21,7 @@ import (
21
21
"github.com/coder/coder/v2/coderd/database/dbgen"
22
22
"github.com/coder/coder/v2/coderd/database/dbtestutil"
23
23
"github.com/coder/coder/v2/coderd/database/dbtime"
24
+ "github.com/coder/coder/v2/coderd/rbac"
24
25
"github.com/coder/coder/v2/codersdk"
25
26
)
26
27
@@ -69,7 +70,8 @@ func TestProvisioners_Golden(t *testing.T) {
69
70
Pubsub : ps ,
70
71
})
71
72
owner := coderdtest .CreateFirstUser (t , client )
72
- member , memberUser := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
73
+ templateAdminClient , _ := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID , rbac .ScopedRoleOrgTemplateAdmin (owner .OrganizationID ))
74
+ memberClient , member := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
73
75
74
76
// Create initial resources with a running provisioner.
75
77
firstProvisioner := coderdtest .NewProvisionerDaemon (t , coderdAPI )
@@ -78,7 +80,6 @@ func TestProvisioners_Golden(t *testing.T) {
78
80
coderdtest .AwaitTemplateVersionJobCompleted (t , client , version .ID )
79
81
template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , version .ID )
80
82
81
- time .Sleep (1500 * time .Millisecond ) // Ensure the workspace build job has a different timestamp for sorting.
82
83
workspace := coderdtest .CreateWorkspace (t , client , template .ID )
83
84
coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , workspace .LatestBuild .ID )
84
85
@@ -94,9 +95,10 @@ func TestProvisioners_Golden(t *testing.T) {
94
95
Name : "provisioner-1" ,
95
96
CreatedAt : dbtime .Now ().Add (1 * time .Second ),
96
97
KeyID : uuid .MustParse (codersdk .ProvisionerKeyIDBuiltIn ),
98
+ Tags : database.StringMap {"owner" : "" , "scope" : "organization" , "foo" : "bar" },
97
99
})
98
100
w1 := dbgen .Workspace (t , coderdAPI .Database , database.WorkspaceTable {
99
- OwnerID : memberUser .ID ,
101
+ OwnerID : member .ID ,
100
102
TemplateID : template .ID ,
101
103
})
102
104
wb1ID := uuid .MustParse ("00000000-0000-0000-dddd-000000000001" )
@@ -105,7 +107,7 @@ func TestProvisioners_Golden(t *testing.T) {
105
107
Input : json .RawMessage (`{"workspace_build_id":"` + wb1ID .String () + `"}` ),
106
108
CreatedAt : dbtime .Now ().Add (2 * time .Second ),
107
109
StartedAt : sql.NullTime {Time : coderdAPI .Clock .Now (), Valid : true },
108
- Tags : database.StringMap {"owner" : "" , "scope" : "organization" },
110
+ Tags : database.StringMap {"owner" : "" , "scope" : "organization" , "foo" : "bar" },
109
111
})
110
112
dbgen .WorkspaceBuild (t , coderdAPI .Database , database.WorkspaceBuild {
111
113
ID : wb1ID ,
@@ -120,9 +122,10 @@ func TestProvisioners_Golden(t *testing.T) {
120
122
CreatedAt : dbtime .Now ().Add (2 * time .Second ),
121
123
LastSeenAt : sql.NullTime {Time : coderdAPI .Clock .Now ().Add (- time .Hour ), Valid : true },
122
124
KeyID : uuid .MustParse (codersdk .ProvisionerKeyIDBuiltIn ),
125
+ Tags : database.StringMap {"owner" : "" , "scope" : "organization" },
123
126
})
124
127
w2 := dbgen .Workspace (t , coderdAPI .Database , database.WorkspaceTable {
125
- OwnerID : memberUser .ID ,
128
+ OwnerID : member .ID ,
126
129
TemplateID : template .ID ,
127
130
})
128
131
wb2ID := uuid .MustParse ("00000000-0000-0000-dddd-000000000002" )
@@ -143,7 +146,7 @@ func TestProvisioners_Golden(t *testing.T) {
143
146
144
147
// Create a pending job.
145
148
w3 := dbgen .Workspace (t , coderdAPI .Database , database.WorkspaceTable {
146
- OwnerID : memberUser .ID ,
149
+ OwnerID : member .ID ,
147
150
TemplateID : template .ID ,
148
151
})
149
152
wb3ID := uuid .MustParse ("00000000-0000-0000-dddd-000000000003" )
@@ -164,6 +167,7 @@ func TestProvisioners_Golden(t *testing.T) {
164
167
Name : "provisioner-3" ,
165
168
CreatedAt : dbtime .Now ().Add (3 * time .Second ),
166
169
KeyID : uuid .MustParse (codersdk .ProvisionerKeyIDBuiltIn ),
170
+ Tags : database.StringMap {"owner" : "" , "scope" : "organization" },
167
171
})
168
172
169
173
updateReplaceUUIDs (coderdAPI )
@@ -172,23 +176,28 @@ func TestProvisioners_Golden(t *testing.T) {
172
176
t .Logf ("replace[%q] = %q" , id , replaceID )
173
177
}
174
178
179
+ // Test provisioners list with member as members can access
180
+ // provisioner daemons.
175
181
t .Run ("list" , func (t * testing.T ) {
176
182
t .Parallel ()
177
183
178
184
var got bytes.Buffer
179
185
inv , root := clitest .New (t ,
180
186
"provisioners" ,
181
187
"list" ,
182
- "--column" , "id,created at,last seen at,name,version,api version, tags,status,current job id,previous job id,previous job status,organization" ,
188
+ "--column" , "id,created at,last seen at,name,version,tags,key name, status,current job id,current job status ,previous job id,previous job status,organization" ,
183
189
)
184
190
inv .Stdout = & got
185
- clitest .SetupConfig (t , member , root )
191
+ clitest .SetupConfig (t , memberClient , root )
186
192
err := inv .Run ()
187
193
require .NoError (t , err )
188
194
189
195
clitest .TestGoldenFile (t , t .Name (), got .Bytes (), replace )
190
196
})
191
197
198
+ // Test jobs list with template admin as members are currently
199
+ // unable to access provisioner jobs. In the future (with RBAC
200
+ // changes), we may allow them to view _their_ jobs.
192
201
t .Run ("jobs list" , func (t * testing.T ) {
193
202
t .Parallel ()
194
203
@@ -200,7 +209,7 @@ func TestProvisioners_Golden(t *testing.T) {
200
209
"--column" , "id,created at,status,worker id,tags,template version id,workspace build id,type,available workers,organization,queue" ,
201
210
)
202
211
inv .Stdout = & got
203
- clitest .SetupConfig (t , member , root )
212
+ clitest .SetupConfig (t , templateAdminClient , root )
204
213
err := inv .Run ()
205
214
require .NoError (t , err )
206
215
0 commit comments