@@ -248,12 +248,18 @@ func WorkspaceAgentScriptTiming(t testing.TB, db database.Store, orig database.W
248248func Workspace (t testing.TB ,db database.Store ,orig database.WorkspaceTable ) database.WorkspaceTable {
249249t .Helper ()
250250
251+ var defOrgID uuid.UUID
252+ if orig .OrganizationID == uuid .Nil {
253+ defOrg ,_ := db .GetDefaultOrganization (genCtx )
254+ defOrgID = defOrg .ID
255+ }
256+
251257workspace ,err := db .InsertWorkspace (genCtx , database.InsertWorkspaceParams {
252258ID :takeFirst (orig .ID ,uuid .New ()),
253259OwnerID :takeFirst (orig .OwnerID ,uuid .New ()),
254260CreatedAt :takeFirst (orig .CreatedAt ,dbtime .Now ()),
255261UpdatedAt :takeFirst (orig .UpdatedAt ,dbtime .Now ()),
256- OrganizationID :takeFirst (orig .OrganizationID ,uuid .New ()),
262+ OrganizationID :takeFirst (orig .OrganizationID ,defOrgID , uuid .New ()),
257263TemplateID :takeFirst (orig .TemplateID ,uuid .New ()),
258264LastUsedAt :takeFirst (orig .LastUsedAt ,dbtime .Now ()),
259265Name :takeFirst (orig .Name ,testutil .GetRandomName (t )),
@@ -505,9 +511,27 @@ func GroupMember(t testing.TB, db database.Store, member database.GroupMemberTab
505511
506512// ProvisionerDaemon creates a provisioner daemon as far as the database is concerned. It does not run a provisioner daemon.
507513// If no key is provided, it will create one.
508- func ProvisionerDaemon (t testing.TB ,db database.Store ,daemon database.ProvisionerDaemon ) database.ProvisionerDaemon {
514+ func ProvisionerDaemon (t testing.TB ,db database.Store ,orig database.ProvisionerDaemon ) database.ProvisionerDaemon {
509515t .Helper ()
510516
517+ var defOrgID uuid.UUID
518+ if orig .OrganizationID == uuid .Nil {
519+ defOrg ,_ := db .GetDefaultOrganization (genCtx )
520+ defOrgID = defOrg .ID
521+ }
522+
523+ daemon := database.UpsertProvisionerDaemonParams {
524+ Name :takeFirst (orig .Name ,testutil .GetRandomName (t )),
525+ OrganizationID :takeFirst (orig .OrganizationID ,defOrgID ,uuid .New ()),
526+ CreatedAt :takeFirst (orig .CreatedAt ,dbtime .Now ()),
527+ Provisioners :takeFirstSlice (orig .Provisioners , []database.ProvisionerType {database .ProvisionerTypeEcho }),
528+ Tags :takeFirstMap (orig .Tags , database.StringMap {"owner" :"" ,"scope" :"organization" }),
529+ KeyID :takeFirst (orig .KeyID ,uuid .Nil ),
530+ LastSeenAt :takeFirst (orig .LastSeenAt , sql.NullTime {Time :dbtime .Now (),Valid :true }),
531+ Version :takeFirst (orig .Version ,"v0.0.0" ),
532+ APIVersion :takeFirst (orig .APIVersion ,"1.1" ),
533+ }
534+
511535if daemon .KeyID == uuid .Nil {
512536key ,err := db .InsertProvisionerKey (genCtx , database.InsertProvisionerKeyParams {
513537ID :uuid .New (),
@@ -521,24 +545,7 @@ func ProvisionerDaemon(t testing.TB, db database.Store, daemon database.Provisio
521545daemon .KeyID = key .ID
522546}
523547
524- if daemon .CreatedAt .IsZero () {
525- daemon .CreatedAt = dbtime .Now ()
526- }
527- if daemon .Name == "" {
528- daemon .Name = "test-daemon"
529- }
530-
531- d ,err := db .UpsertProvisionerDaemon (genCtx , database.UpsertProvisionerDaemonParams {
532- Name :daemon .Name ,
533- OrganizationID :daemon .OrganizationID ,
534- CreatedAt :daemon .CreatedAt ,
535- Provisioners :daemon .Provisioners ,
536- Tags :daemon .Tags ,
537- KeyID :daemon .KeyID ,
538- LastSeenAt :daemon .LastSeenAt ,
539- Version :daemon .Version ,
540- APIVersion :daemon .APIVersion ,
541- })
548+ d ,err := db .UpsertProvisionerDaemon (genCtx ,daemon )
542549require .NoError (t ,err )
543550return d
544551}
@@ -556,12 +563,10 @@ func ProvisionerJob(t testing.TB, db database.Store, ps pubsub.Pubsub, orig data
556563
557564jobID := takeFirst (orig .ID ,uuid .New ())
558565// Always set some tags to prevent Acquire from grabbing jobs it should not.
559- if ! orig .StartedAt .Time .IsZero () {
560- if orig .Tags == nil {
561- orig .Tags = make (database.StringMap )
562- }
566+ tags := takeFirstMap (orig .Tags , database.StringMap {"owner" :"" ,"scope" :"organization" })
567+ if orig .Tags == nil && ! orig .StartedAt .Time .IsZero () {
563568// Make sure when we acquire the job, we only get this one.
564- orig . Tags [jobID .String ()]= "true"
569+ tags [jobID .String ()]= "true"
565570}
566571
567572job ,err := db .InsertProvisionerJob (genCtx , database.InsertProvisionerJobParams {
@@ -575,7 +580,7 @@ func ProvisionerJob(t testing.TB, db database.Store, ps pubsub.Pubsub, orig data
575580FileID :takeFirst (orig .FileID ,uuid .New ()),
576581Type :takeFirst (orig .Type ,database .ProvisionerJobTypeWorkspaceBuild ),
577582Input :takeFirstSlice (orig .Input , []byte ("{}" )),
578- Tags :orig . Tags ,
583+ Tags :tags ,
579584TraceMetadata : pqtype.NullRawMessage {},
580585})
581586require .NoError (t ,err ,"insert job" )
@@ -587,17 +592,18 @@ func ProvisionerJob(t testing.TB, db database.Store, ps pubsub.Pubsub, orig data
587592job ,err = db .AcquireProvisionerJob (genCtx , database.AcquireProvisionerJobParams {
588593StartedAt :orig .StartedAt ,
589594OrganizationID :job .OrganizationID ,
590- Types : []database.ProvisionerType {database . ProvisionerTypeEcho },
591- ProvisionerTags :must (json .Marshal (orig . Tags )),
592- WorkerID : uuid.NullUUID {},
595+ Types : []database.ProvisionerType {job . Provisioner },
596+ ProvisionerTags :must (json .Marshal (tags )),
597+ WorkerID :takeFirst ( orig . WorkerID , uuid.NullUUID {}) ,
593598})
594599require .NoError (t ,err )
595600// There is no easy way to make sure we acquire the correct job.
596601require .Equal (t ,jobID ,job .ID ,"acquired incorrect job" )
602+ fmt .Printf ("%#v\n " ,job )
597603}
598604
599605if ! orig .CompletedAt .Time .IsZero ()|| orig .Error .String != "" {
600- err : =db .UpdateProvisionerJobWithCompleteByID (genCtx , database.UpdateProvisionerJobWithCompleteByIDParams {
606+ err = db .UpdateProvisionerJobWithCompleteByID (genCtx , database.UpdateProvisionerJobWithCompleteByIDParams {
601607ID :jobID ,
602608UpdatedAt :job .UpdatedAt ,
603609CompletedAt :orig .CompletedAt ,
@@ -607,7 +613,7 @@ func ProvisionerJob(t testing.TB, db database.Store, ps pubsub.Pubsub, orig data
607613require .NoError (t ,err )
608614}
609615if ! orig .CanceledAt .Time .IsZero () {
610- err : =db .UpdateProvisionerJobWithCancelByID (genCtx , database.UpdateProvisionerJobWithCancelByIDParams {
616+ err = db .UpdateProvisionerJobWithCancelByID (genCtx , database.UpdateProvisionerJobWithCancelByIDParams {
611617ID :jobID ,
612618CanceledAt :orig .CanceledAt ,
613619CompletedAt :orig .CompletedAt ,
@@ -616,7 +622,7 @@ func ProvisionerJob(t testing.TB, db database.Store, ps pubsub.Pubsub, orig data
616622}
617623
618624job ,err = db .GetProvisionerJobByID (genCtx ,jobID )
619- require .NoError (t ,err )
625+ require .NoError (t ,err , "get job: %s" , jobID . String () )
620626
621627return job
622628}
@@ -1108,6 +1114,12 @@ func takeFirstSlice[T any](values ...[]T) []T {
11081114})
11091115}
11101116
1117+ func takeFirstMap [T ,E comparable ](values ... map [T ]E )map [T ]E {
1118+ return takeFirstF (values ,func (v map [T ]E )bool {
1119+ return v != nil
1120+ })
1121+ }
1122+
11111123// takeFirstF takes the first value that returns true
11121124func takeFirstF [Value any ](values []Value ,take func (v Value )bool )Value {
11131125for _ ,v := range values {