@@ -442,6 +442,60 @@ func TestFailJob(t *testing.T) {
442
442
})
443
443
require .ErrorContains (t ,err ,"job already completed" )
444
444
})
445
+ t .Run ("WorkspaceBuild" ,func (t * testing.T ) {
446
+ t .Parallel ()
447
+ srv := setup (t )
448
+ build ,err := srv .Database .InsertWorkspaceBuild (ctx , database.InsertWorkspaceBuildParams {
449
+ ID :uuid .New (),
450
+ })
451
+ require .NoError (t ,err )
452
+ input ,err := json .Marshal (provisionerdserver.WorkspaceProvisionJob {
453
+ WorkspaceBuildID :build .ID ,
454
+ })
455
+ require .NoError (t ,err )
456
+ job ,err := srv .Database .InsertProvisionerJob (ctx , database.InsertProvisionerJobParams {
457
+ ID :uuid .New (),
458
+ Provisioner :database .ProvisionerTypeEcho ,
459
+ Input :input ,
460
+ })
461
+ require .NoError (t ,err )
462
+ _ ,err = srv .Database .AcquireProvisionerJob (ctx , database.AcquireProvisionerJobParams {
463
+ WorkerID : uuid.NullUUID {
464
+ UUID :srv .ID ,
465
+ Valid :true ,
466
+ },
467
+ Types : []database.ProvisionerType {database .ProvisionerTypeEcho },
468
+ })
469
+ require .NoError (t ,err )
470
+
471
+ publishedWorkspace := make (chan struct {})
472
+ closeWorkspaceSubscribe ,err := srv .Pubsub .Subscribe (codersdk .WorkspaceNotifyChannel (build .WorkspaceID ),func (_ context.Context ,_ []byte ) {
473
+ close (publishedWorkspace )
474
+ })
475
+ require .NoError (t ,err )
476
+ defer closeWorkspaceSubscribe ()
477
+ publishedLogs := make (chan struct {})
478
+ closeLogsSubscribe ,err := srv .Pubsub .Subscribe (provisionerdserver .ProvisionerJobLogsNotifyChannel (job .ID ),func (_ context.Context ,_ []byte ) {
479
+ close (publishedLogs )
480
+ })
481
+ require .NoError (t ,err )
482
+ defer closeLogsSubscribe ()
483
+
484
+ _ ,err = srv .FailJob (ctx ,& proto.FailedJob {
485
+ JobId :job .ID .String (),
486
+ Type :& proto.FailedJob_WorkspaceBuild_ {
487
+ WorkspaceBuild :& proto.FailedJob_WorkspaceBuild {
488
+ State : []byte ("some state" ),
489
+ },
490
+ },
491
+ })
492
+ require .NoError (t ,err )
493
+ <- publishedWorkspace
494
+ <- publishedLogs
495
+ build ,err = srv .Database .GetWorkspaceBuildByID (ctx ,build .ID )
496
+ require .NoError (t ,err )
497
+ require .Equal (t ,"some state" ,string (build .ProvisionerState ))
498
+ })
445
499
}
446
500
447
501
func setup (t * testing.T )* provisionerdserver.Server {