@@ -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