MCPcopy Index your code
hub / github.com/coder/coder / TestProvisionerDaemons

Function TestProvisionerDaemons

coderd/provisionerdaemons_test.go:23–259  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

21)
22
23func TestProvisionerDaemons(t *testing.T) {
24 t.Parallel()
25
26 db, ps := dbtestutil.NewDB(t,
27 dbtestutil.WithDumpOnFailure(),
28 //nolint:gocritic // Use UTC for consistent timestamp length in golden files.
29 dbtestutil.WithTimezone("UTC"),
30 )
31 client, _, coderdAPI := coderdtest.NewWithAPI(t, &coderdtest.Options{
32 IncludeProvisionerDaemon: false,
33 Database: db,
34 Pubsub: ps,
35 })
36 owner := coderdtest.CreateFirstUser(t, client)
37 templateAdminClient, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID, rbac.ScopedRoleOrgTemplateAdmin(owner.OrganizationID))
38 memberClient, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
39
40 // Create initial resources with a running provisioner.
41 firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", map[string]string{"owner": "", "scope": "organization"})
42 t.Cleanup(func() { _ = firstProvisioner.Close() })
43 version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)
44 coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
45 template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
46
47 workspace := coderdtest.CreateWorkspace(t, client, template.ID)
48 coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
49
50 // Stop the provisioner so it doesn't grab any more jobs.
51 firstProvisioner.Close()
52
53 // Create a provisioner that's working on a job.
54 pd1 := dbgen.ProvisionerDaemon(t, coderdAPI.Database, database.ProvisionerDaemon{
55 Name: "provisioner-1",
56 CreatedAt: dbtime.Now().Add(1 * time.Second),
57 LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(time.Hour), Valid: true}, // Stale interval can't be adjusted, keep online.
58 KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
59 Tags: database.StringMap{"owner": "", "scope": "organization", "foo": "bar"},
60 })
61 w1 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
62 OwnerID: member.ID,
63 TemplateID: template.ID,
64 })
65 wb1ID := uuid.MustParse("00000000-0000-0000-dddd-000000000001")
66 job1 := dbgen.ProvisionerJob(t, db, coderdAPI.Pubsub, database.ProvisionerJob{
67 WorkerID: uuid.NullUUID{UUID: pd1.ID, Valid: true},
68 Input: json.RawMessage(`{"workspace_build_id":"` + wb1ID.String() + `"}`),
69 CreatedAt: dbtime.Now().Add(2 * time.Second),
70 StartedAt: sql.NullTime{Time: coderdAPI.Clock.Now(), Valid: true},
71 Tags: database.StringMap{"owner": "", "scope": "organization", "foo": "bar"},
72 })
73 dbgen.WorkspaceBuild(t, coderdAPI.Database, database.WorkspaceBuild{
74 ID: wb1ID,
75 JobID: job1.ID,
76 WorkspaceID: w1.ID,
77 TemplateVersionID: version.ID,
78 })
79
80 // Create a provisioner that completed a job previously and is offline.

Callers

nothing calls this directly

Calls 15

NewDBFunction · 0.92
WithDumpOnFailureFunction · 0.92
WithTimezoneFunction · 0.92
NewWithAPIFunction · 0.92
CreateFirstUserFunction · 0.92
CreateAnotherUserFunction · 0.92
CreateTemplateVersionFunction · 0.92
CreateTemplateFunction · 0.92
CreateWorkspaceFunction · 0.92

Tested by

no test coverage detected