@@ -16,7 +16,7 @@ import (
16
16
"github.com/coder/coder/v2/coderd/database"
17
17
"github.com/coder/coder/v2/coderd/database/dbauthz"
18
18
"github.com/coder/coder/v2/coderd/database/dbfake"
19
- "github.com/coder/coder/v2/coderd/database/dbtestutil "
19
+ "github.com/coder/coder/v2/coderd/database/dbgen "
20
20
"github.com/coder/coder/v2/coderd/database/dbtime"
21
21
"github.com/coder/coder/v2/coderd/util/ptr"
22
22
"github.com/coder/coder/v2/codersdk"
@@ -361,10 +361,6 @@ func TestPrebuildsSettingsAPI(t *testing.T) {
361
361
func TestSchedulePrebuilds (t * testing.T ) {
362
362
t .Parallel ()
363
363
364
- if ! dbtestutil .WillUsePostgres () {
365
- t .Skip ("this test requires postgres" )
366
- }
367
-
368
364
cases := []struct {
369
365
name string
370
366
cliErrorMsg string
@@ -384,23 +380,24 @@ func TestSchedulePrebuilds(t *testing.T) {
384
380
return []string {"schedule" , "stop" , workspaceName , "8h30m" }
385
381
},
386
382
},
387
- // {
388
- // name: "ExtendPrebuildError",
389
- // cliErrorMsg: "extend configuration is not supported for prebuilt workspaces",
390
- // cmdArgs: func(workspaceName string) []string {
391
- // return []string{"schedule", "extend", workspaceName, "90m"}
392
- // },
393
- // },
383
+ {
384
+ name : "ExtendPrebuildError" ,
385
+ cliErrorMsg : "extend configuration is not supported for prebuilt workspaces" ,
386
+ cmdArgs : func (workspaceName string ) []string {
387
+ return []string {"schedule" , "extend" , workspaceName , "90m" }
388
+ },
389
+ },
394
390
}
395
391
396
392
for _ , tc := range cases {
397
393
tc := tc
398
394
t .Run (tc .name , func (t * testing.T ) {
399
395
t .Parallel ()
400
396
401
- // Setup
402
397
clock := quartz .NewMock (t )
403
398
clock .Set (dbtime .Now ())
399
+
400
+ // Setup
404
401
client , db , owner := coderdenttest .NewWithDatabase (t , & coderdenttest.Options {
405
402
Options : & coderdtest.Options {
406
403
IncludeProvisionerDaemon : true ,
@@ -415,31 +412,28 @@ func TestSchedulePrebuilds(t *testing.T) {
415
412
416
413
// Given: a template and a template version with preset and a prebuilt workspace
417
414
presetID := uuid .New ()
418
- tv := dbfake .TemplateVersion (t , db ).Seed (database.TemplateVersion {
419
- OrganizationID : owner .OrganizationID ,
420
- CreatedBy : owner .UserID ,
421
- }).Preset (database.TemplateVersionPreset {
422
- ID : presetID ,
423
- DesiredInstances : sql.NullInt32 {
424
- Int32 : 1 ,
425
- Valid : true ,
426
- },
427
- }).Do ()
428
-
415
+ version := coderdtest .CreateTemplateVersion (t , client , owner .OrganizationID , nil )
416
+ _ = coderdtest .AwaitTemplateVersionJobCompleted (t , client , version .ID )
417
+ template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , version .ID )
418
+ dbgen .Preset (t , db , database.InsertPresetParams {
419
+ ID : presetID ,
420
+ TemplateVersionID : version .ID ,
421
+ DesiredInstances : sql.NullInt32 {Int32 : 1 , Valid : true },
422
+ })
429
423
workspaceBuild := dbfake .WorkspaceBuild (t , db , database.WorkspaceTable {
430
424
OwnerID : database .PrebuildsSystemUserID ,
431
- TemplateID : tv . Template .ID ,
425
+ TemplateID : template .ID ,
432
426
}).Seed (database.WorkspaceBuild {
433
- TemplateVersionID : tv . TemplateVersion .ID ,
427
+ TemplateVersionID : version .ID ,
434
428
TemplateVersionPresetID : uuid.NullUUID {
435
429
UUID : presetID ,
436
430
Valid : true ,
437
431
},
438
- Deadline : clock .Now ().Add (time .Hour ),
439
432
}).WithAgent (func (agent []* proto.Agent ) []* proto.Agent {
440
433
return agent
441
434
}).Do ()
442
435
436
+ // Mark the prebuilt workspace's agent as ready so the prebuild can be claimed
443
437
// nolint:gocritic
444
438
ctx := dbauthz .AsSystemRestricted (testutil .Context (t , testutil .WaitLong ))
445
439
agent , err := db .GetWorkspaceAgentAndLatestBuildByAuthToken (ctx , uuid .MustParse (workspaceBuild .AgentToken ))
@@ -449,6 +443,8 @@ func TestSchedulePrebuilds(t *testing.T) {
449
443
LifecycleState : database .WorkspaceAgentLifecycleStateReady ,
450
444
})
451
445
require .NoError (t , err )
446
+
447
+ // Given: a prebuilt workspace
452
448
prebuild := coderdtest .MustWorkspace (t , client , workspaceBuild .Workspace .ID )
453
449
454
450
// When: running the schedule command over a prebuilt workspace
@@ -463,20 +459,20 @@ func TestSchedulePrebuilds(t *testing.T) {
463
459
}()
464
460
<- doneChan
465
461
466
- // Then: return an error
462
+ // Then: an error should be returned, with an error message specific to the lifecycle parameter
467
463
require .Error (t , runErr )
468
464
require .Contains (t , runErr .Error (), tc .cliErrorMsg )
469
465
470
- // Given: a user claims the prebuilt workspace
466
+ // Given: the prebuilt workspace is claimed by a user
471
467
user , err := client .User (ctx , "testUser" )
472
468
require .NoError (t , err )
473
469
claimedWorkspace , err := client .CreateUserWorkspace (ctx , user .ID .String (), codersdk.CreateWorkspaceRequest {
474
- TemplateVersionID : tv . TemplateVersion .ID ,
470
+ TemplateVersionID : version .ID ,
475
471
TemplateVersionPresetID : presetID ,
476
472
Name : coderdtest .RandomUsername (t ),
477
473
// The 'extend' command requires the workspace to have an existing deadline.
478
474
// To ensure this, we set the workspace's TTL to 1 hour.
479
- TTLMillis : ptr.Ref [int64 ](3600000 ),
475
+ TTLMillis : ptr.Ref [int64 ](time . Hour . Milliseconds () ),
480
476
})
481
477
require .NoError (t , err )
482
478
coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , claimedWorkspace .LatestBuild .ID )
0 commit comments