@@ -27,36 +27,134 @@ import (
27
27
func TestProvisionerDaemon_PSK (t * testing.T ) {
28
28
t .Parallel ()
29
29
30
- client , _ := coderdenttest .New (t , & coderdenttest.Options {
31
- ProvisionerDaemonPSK : "provisionersftw" ,
32
- LicenseOptions : & coderdenttest.LicenseOptions {
33
- Features : license.Features {
34
- codersdk .FeatureExternalProvisionerDaemons : 1 ,
30
+ t .Run ("OK" , func (t * testing.T ) {
31
+ t .Parallel ()
32
+
33
+ client , _ := coderdenttest .New (t , & coderdenttest.Options {
34
+ ProvisionerDaemonPSK : "provisionersftw" ,
35
+ LicenseOptions : & coderdenttest.LicenseOptions {
36
+ Features : license.Features {
37
+ codersdk .FeatureExternalProvisionerDaemons : 1 ,
38
+ },
35
39
},
36
- },
40
+ })
41
+ inv , conf := newCLI (t , "provisionerd" , "start" , "--psk=provisionersftw" , "--name=matt-daemon" )
42
+ err := conf .URL ().Write (client .URL .String ())
43
+ require .NoError (t , err )
44
+ pty := ptytest .New (t ).Attach (inv )
45
+ ctx , cancel := context .WithTimeout (inv .Context (), testutil .WaitLong )
46
+ defer cancel ()
47
+ clitest .Start (t , inv )
48
+ pty .ExpectNoMatchBefore (ctx , "check entitlement" , "starting provisioner daemon" )
49
+ pty .ExpectMatchContext (ctx , "matt-daemon" )
50
+
51
+ var daemons []codersdk.ProvisionerDaemon
52
+ require .Eventually (t , func () bool {
53
+ daemons , err = client .ProvisionerDaemons (ctx )
54
+ if err != nil {
55
+ return false
56
+ }
57
+ return len (daemons ) == 1
58
+ }, testutil .WaitShort , testutil .IntervalSlow )
59
+ require .Equal (t , "matt-daemon" , daemons [0 ].Name )
60
+ require .Equal (t , provisionersdk .ScopeOrganization , daemons [0 ].Tags [provisionersdk .TagScope ])
61
+ require .Equal (t , buildinfo .Version (), daemons [0 ].Version )
62
+ require .Equal (t , proto .CurrentVersion .String (), daemons [0 ].APIVersion )
63
+ })
64
+
65
+ t .Run ("AnotherOrg" , func (t * testing.T ) {
66
+ t .Parallel ()
67
+ client , _ := coderdenttest .New (t , & coderdenttest.Options {
68
+ ProvisionerDaemonPSK : "provisionersftw" ,
69
+ LicenseOptions : & coderdenttest.LicenseOptions {
70
+ Features : license.Features {
71
+ codersdk .FeatureExternalProvisionerDaemons : 1 ,
72
+ },
73
+ },
74
+ })
75
+ anotherOrg := coderdtest .CreateOrganization (t , client , coderdtest.CreateOrganizationOptions {})
76
+ inv , conf := newCLI (t , "provisionerd" , "start" , "--psk=provisionersftw" , "--name" , "org-daemon" , "--org" , anotherOrg .ID .String ())
77
+ err := conf .URL ().Write (client .URL .String ())
78
+ require .NoError (t , err )
79
+ pty := ptytest .New (t ).Attach (inv )
80
+ ctx , cancel := context .WithTimeout (inv .Context (), testutil .WaitLong )
81
+ defer cancel ()
82
+ clitest .Start (t , inv )
83
+ pty .ExpectMatchContext (ctx , "starting provisioner daemon" )
84
+
85
+ var daemons []codersdk.ProvisionerDaemon
86
+ require .Eventually (t , func () bool {
87
+ daemons , err = client .OrganizationProvisionerDaemons (ctx , anotherOrg .ID )
88
+ if err != nil {
89
+ return false
90
+ }
91
+ return len (daemons ) == 1
92
+ }, testutil .WaitShort , testutil .IntervalSlow )
93
+ assert .Equal (t , "org-daemon" , daemons [0 ].Name )
94
+ assert .Equal (t , provisionersdk .ScopeOrganization , daemons [0 ].Tags [provisionersdk .TagScope ])
95
+ assert .Equal (t , buildinfo .Version (), daemons [0 ].Version )
96
+ assert .Equal (t , proto .CurrentVersion .String (), daemons [0 ].APIVersion )
97
+ })
98
+
99
+ t .Run ("AnotherOrgByNameWithUser" , func (t * testing.T ) {
100
+ t .Parallel ()
101
+ client , _ := coderdenttest .New (t , & coderdenttest.Options {
102
+ ProvisionerDaemonPSK : "provisionersftw" ,
103
+ LicenseOptions : & coderdenttest.LicenseOptions {
104
+ Features : license.Features {
105
+ codersdk .FeatureExternalProvisionerDaemons : 1 ,
106
+ },
107
+ },
108
+ })
109
+ anotherOrg := coderdtest .CreateOrganization (t , client , coderdtest.CreateOrganizationOptions {})
110
+ anotherClient , _ := coderdtest .CreateAnotherUser (t , client , anotherOrg .ID , rbac .RoleTemplateAdmin ())
111
+ inv , conf := newCLI (t , "provisionerd" , "start" , "--psk=provisionersftw" , "--name" , "org-daemon" , "--org" , anotherOrg .Name )
112
+ clitest .SetupConfig (t , anotherClient , conf )
113
+ pty := ptytest .New (t ).Attach (inv )
114
+ ctx , cancel := context .WithTimeout (inv .Context (), testutil .WaitLong )
115
+ defer cancel ()
116
+ clitest .Start (t , inv )
117
+ pty .ExpectMatchContext (ctx , "starting provisioner daemon" )
118
+ })
119
+
120
+ t .Run ("AnotherOrgByNameNoUser" , func (t * testing.T ) {
121
+ t .Parallel ()
122
+ client , _ := coderdenttest .New (t , & coderdenttest.Options {
123
+ ProvisionerDaemonPSK : "provisionersftw" ,
124
+ LicenseOptions : & coderdenttest.LicenseOptions {
125
+ Features : license.Features {
126
+ codersdk .FeatureExternalProvisionerDaemons : 1 ,
127
+ },
128
+ },
129
+ })
130
+ anotherOrg := coderdtest .CreateOrganization (t , client , coderdtest.CreateOrganizationOptions {})
131
+ inv , conf := newCLI (t , "provisionerd" , "start" , "--psk=provisionersftw" , "--name" , "org-daemon" , "--org" , anotherOrg .Name )
132
+ err := conf .URL ().Write (client .URL .String ())
133
+ require .NoError (t , err )
134
+ ctx , cancel := context .WithTimeout (inv .Context (), testutil .WaitLong )
135
+ defer cancel ()
136
+ err = inv .WithContext (ctx ).Run ()
137
+ require .ErrorContains (t , err , "must provide an org ID when not authenticated as a user and organization is specified" )
138
+ })
139
+
140
+ t .Run ("NoUserNoPSK" , func (t * testing.T ) {
141
+ t .Parallel ()
142
+ client , _ := coderdenttest .New (t , & coderdenttest.Options {
143
+ ProvisionerDaemonPSK : "provisionersftw" ,
144
+ LicenseOptions : & coderdenttest.LicenseOptions {
145
+ Features : license.Features {
146
+ codersdk .FeatureExternalProvisionerDaemons : 1 ,
147
+ },
148
+ },
149
+ })
150
+ inv , conf := newCLI (t , "provisionerd" , "start" , "--name" , "org-daemon" )
151
+ err := conf .URL ().Write (client .URL .String ())
152
+ require .NoError (t , err )
153
+ ctx , cancel := context .WithTimeout (inv .Context (), testutil .WaitLong )
154
+ defer cancel ()
155
+ err = inv .WithContext (ctx ).Run ()
156
+ require .ErrorContains (t , err , "must provide a pre-shared key when not authenticated as a user" )
37
157
})
38
- inv , conf := newCLI (t , "provisionerd" , "start" , "--psk=provisionersftw" , "--name=matt-daemon" )
39
- err := conf .URL ().Write (client .URL .String ())
40
- require .NoError (t , err )
41
- pty := ptytest .New (t ).Attach (inv )
42
- ctx , cancel := context .WithTimeout (inv .Context (), testutil .WaitLong )
43
- defer cancel ()
44
- clitest .Start (t , inv )
45
- pty .ExpectNoMatchBefore (ctx , "check entitlement" , "starting provisioner daemon" )
46
- pty .ExpectMatchContext (ctx , "matt-daemon" )
47
-
48
- var daemons []codersdk.ProvisionerDaemon
49
- require .Eventually (t , func () bool {
50
- daemons , err = client .ProvisionerDaemons (ctx )
51
- if err != nil {
52
- return false
53
- }
54
- return len (daemons ) == 1
55
- }, testutil .WaitShort , testutil .IntervalSlow )
56
- require .Equal (t , "matt-daemon" , daemons [0 ].Name )
57
- require .Equal (t , provisionersdk .ScopeOrganization , daemons [0 ].Tags [provisionersdk .TagScope ])
58
- require .Equal (t , buildinfo .Version (), daemons [0 ].Version )
59
- require .Equal (t , proto .CurrentVersion .String (), daemons [0 ].APIVersion )
60
158
}
61
159
62
160
func TestProvisionerDaemon_SessionToken (t * testing.T ) {
@@ -166,6 +264,42 @@ func TestProvisionerDaemon_SessionToken(t *testing.T) {
166
264
assert .Equal (t , proto .CurrentVersion .String (), daemons [0 ].APIVersion )
167
265
})
168
266
267
+ t .Run ("ScopeUserAnotherOrg" , func (t * testing.T ) {
268
+ t .Parallel ()
269
+ client , _ := coderdenttest .New (t , & coderdenttest.Options {
270
+ ProvisionerDaemonPSK : "provisionersftw" ,
271
+ LicenseOptions : & coderdenttest.LicenseOptions {
272
+ Features : license.Features {
273
+ codersdk .FeatureExternalProvisionerDaemons : 1 ,
274
+ },
275
+ },
276
+ })
277
+ anotherOrg := coderdtest .CreateOrganization (t , client , coderdtest.CreateOrganizationOptions {})
278
+ anotherClient , anotherUser := coderdtest .CreateAnotherUser (t , client , anotherOrg .ID , rbac .RoleTemplateAdmin ())
279
+ inv , conf := newCLI (t , "provisionerd" , "start" , "--tag" , "scope=user" , "--name" , "org-daemon" , "--org" , anotherOrg .ID .String ())
280
+ clitest .SetupConfig (t , anotherClient , conf )
281
+ pty := ptytest .New (t ).Attach (inv )
282
+ ctx , cancel := context .WithTimeout (inv .Context (), testutil .WaitLong )
283
+ defer cancel ()
284
+ clitest .Start (t , inv )
285
+ pty .ExpectMatchContext (ctx , "starting provisioner daemon" )
286
+
287
+ var daemons []codersdk.ProvisionerDaemon
288
+ var err error
289
+ require .Eventually (t , func () bool {
290
+ daemons , err = client .OrganizationProvisionerDaemons (ctx , anotherOrg .ID )
291
+ if err != nil {
292
+ return false
293
+ }
294
+ return len (daemons ) == 1
295
+ }, testutil .WaitShort , testutil .IntervalSlow )
296
+ assert .Equal (t , "org-daemon" , daemons [0 ].Name )
297
+ assert .Equal (t , provisionersdk .ScopeUser , daemons [0 ].Tags [provisionersdk .TagScope ])
298
+ assert .Equal (t , anotherUser .ID .String (), daemons [0 ].Tags [provisionersdk .TagOwner ])
299
+ assert .Equal (t , buildinfo .Version (), daemons [0 ].Version )
300
+ assert .Equal (t , proto .CurrentVersion .String (), daemons [0 ].APIVersion )
301
+ })
302
+
169
303
t .Run ("PrometheusEnabled" , func (t * testing.T ) {
170
304
t .Parallel ()
171
305
0 commit comments