@@ -28,10 +28,15 @@ import (
28
28
"github.com/coder/coder/v2/agent"
29
29
"github.com/coder/coder/v2/agent/agenttest"
30
30
"github.com/coder/coder/v2/coderd/httpapi"
31
+ agplprebuilds "github.com/coder/coder/v2/coderd/prebuilds"
31
32
"github.com/coder/coder/v2/coderd/rbac/policy"
32
33
"github.com/coder/coder/v2/coderd/util/ptr"
34
+ "github.com/coder/coder/v2/enterprise/coderd/prebuilds"
33
35
"github.com/coder/coder/v2/tailnet/tailnettest"
34
36
37
+ "github.com/coder/retry"
38
+ "github.com/coder/serpent"
39
+
35
40
agplaudit "github.com/coder/coder/v2/coderd/audit"
36
41
"github.com/coder/coder/v2/coderd/coderdtest"
37
42
"github.com/coder/coder/v2/coderd/database"
@@ -50,8 +55,6 @@ import (
50
55
"github.com/coder/coder/v2/enterprise/dbcrypt"
51
56
"github.com/coder/coder/v2/enterprise/replicasync"
52
57
"github.com/coder/coder/v2/testutil"
53
- "github.com/coder/retry"
54
- "github.com/coder/serpent"
55
58
)
56
59
57
60
func TestMain (m * testing.M ) {
@@ -253,6 +256,90 @@ func TestEntitlements_HeaderWarnings(t *testing.T) {
253
256
})
254
257
}
255
258
259
+ func TestEntitlements_Prebuilds (t * testing.T ) {
260
+ t .Parallel ()
261
+
262
+ cases := []struct {
263
+ name string
264
+ experimentEnabled bool
265
+ featureEnabled bool
266
+ expectedEnabled bool
267
+ }{
268
+ {
269
+ name : "Fully enabled" ,
270
+ featureEnabled : true ,
271
+ experimentEnabled : true ,
272
+ expectedEnabled : true ,
273
+ },
274
+ {
275
+ name : "Feature disabled" ,
276
+ featureEnabled : false ,
277
+ experimentEnabled : true ,
278
+ expectedEnabled : false ,
279
+ },
280
+ {
281
+ name : "Experiment disabled" ,
282
+ featureEnabled : true ,
283
+ experimentEnabled : false ,
284
+ expectedEnabled : false ,
285
+ },
286
+ {
287
+ name : "Fully disabled" ,
288
+ featureEnabled : false ,
289
+ experimentEnabled : false ,
290
+ expectedEnabled : false ,
291
+ },
292
+ }
293
+
294
+ for _ , tc := range cases {
295
+ tc := tc
296
+
297
+ t .Run (tc .name , func (t * testing.T ) {
298
+ t .Parallel ()
299
+
300
+ var prebuildsEntitled int64
301
+ if tc .featureEnabled {
302
+ prebuildsEntitled = 1
303
+ }
304
+
305
+ _ , _ , api , _ := coderdenttest .NewWithAPI (t , & coderdenttest.Options {
306
+ Options : & coderdtest.Options {
307
+ DeploymentValues : coderdtest .DeploymentValues (t , func (values * codersdk.DeploymentValues ) {
308
+ if tc .experimentEnabled {
309
+ values .Experiments = serpent.StringArray {string (codersdk .ExperimentWorkspacePrebuilds )}
310
+ }
311
+ }),
312
+ },
313
+
314
+ EntitlementsUpdateInterval : time .Second ,
315
+ LicenseOptions : & coderdenttest.LicenseOptions {
316
+ Features : license.Features {
317
+ codersdk .FeatureWorkspacePrebuilds : prebuildsEntitled ,
318
+ },
319
+ },
320
+ })
321
+
322
+ // The entitlements will need to refresh before the reconciler is set.
323
+ require .Eventually (t , func () bool {
324
+ return api .AGPL .PrebuildsReconciler .Load () != nil
325
+ }, testutil .WaitSuperLong , testutil .IntervalFast )
326
+
327
+ reconciler := api .AGPL .PrebuildsReconciler .Load ()
328
+ claimer := api .AGPL .PrebuildsClaimer .Load ()
329
+ require .NotNil (t , reconciler )
330
+ require .NotNil (t , claimer )
331
+
332
+ if tc .expectedEnabled {
333
+ require .IsType (t , & prebuilds.StoreReconciler {}, * reconciler )
334
+ require .IsType (t , prebuilds.EnterpriseClaimer {}, * claimer )
335
+ } else {
336
+ require .Equal (t , & agplprebuilds .DefaultReconciler , reconciler )
337
+ require .Equal (t , & agplprebuilds .DefaultClaimer , claimer )
338
+ }
339
+ })
340
+ }
341
+ }
342
+
256
343
func TestAuditLogging (t * testing.T ) {
257
344
t .Parallel ()
258
345
t .Run ("Enabled" , func (t * testing.T ) {
0 commit comments