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

Function TestRollup_TwoInstancesUseLocking

coderd/database/dbrollup/dbrollup_test.go:51–133  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

49}
50
51func TestRollup_TwoInstancesUseLocking(t *testing.T) {
52 t.Parallel()
53
54 db, ps := dbtestutil.NewDB(t, dbtestutil.WithDumpOnFailure())
55 logger := testutil.Logger(t)
56
57 var (
58 org = dbgen.Organization(t, db, database.Organization{})
59 user = dbgen.User(t, db, database.User{Name: "user1"})
60 tpl = dbgen.Template(t, db, database.Template{OrganizationID: org.ID, CreatedBy: user.ID})
61 ver = dbgen.TemplateVersion(t, db, database.TemplateVersion{OrganizationID: org.ID, TemplateID: uuid.NullUUID{UUID: tpl.ID, Valid: true}, CreatedBy: user.ID})
62 ws = dbgen.Workspace(t, db, database.WorkspaceTable{OrganizationID: org.ID, TemplateID: tpl.ID, OwnerID: user.ID})
63 job = dbgen.ProvisionerJob(t, db, ps, database.ProvisionerJob{OrganizationID: org.ID})
64 build = dbgen.WorkspaceBuild(t, db, database.WorkspaceBuild{WorkspaceID: ws.ID, JobID: job.ID, TemplateVersionID: ver.ID})
65 res = dbgen.WorkspaceResource(t, db, database.WorkspaceResource{JobID: build.JobID})
66 agent = dbgen.WorkspaceAgent(t, db, database.WorkspaceAgent{ResourceID: res.ID})
67 )
68
69 refTime := dbtime.Now().Truncate(time.Hour)
70 _ = dbgen.WorkspaceAgentStat(t, db, database.WorkspaceAgentStat{
71 TemplateID: tpl.ID,
72 WorkspaceID: ws.ID,
73 AgentID: agent.ID,
74 UserID: user.ID,
75 CreatedAt: refTime.Add(-time.Minute),
76 ConnectionMedianLatencyMS: 1,
77 ConnectionCount: 1,
78 SessionCountSSH: 1,
79 })
80
81 closeRolluper := func(rolluper *dbrollup.Rolluper, resume chan struct{}) {
82 close(resume)
83 err := rolluper.Close()
84 require.NoError(t, err)
85 }
86
87 interval := dbrollup.WithInterval(250 * time.Millisecond)
88 events1 := make(chan dbrollup.Event)
89 resume1 := make(chan struct{}, 1)
90 rolluper1 := dbrollup.New(
91 logger.Named("dbrollup1"),
92 &wrapUpsertDB{Store: db, resume: resume1},
93 interval,
94 dbrollup.WithEventChannel(events1),
95 )
96 defer closeRolluper(rolluper1, resume1)
97
98 events2 := make(chan dbrollup.Event)
99 resume2 := make(chan struct{}, 1)
100 rolluper2 := dbrollup.New(
101 logger.Named("dbrollup2"),
102 &wrapUpsertDB{Store: db, resume: resume2},
103 interval,
104 dbrollup.WithEventChannel(events2),
105 )
106 defer closeRolluper(rolluper2, resume2)
107
108 _, _ = <-events1, <-events2 // Deplete init event, resume operation.

Callers

nothing calls this directly

Calls 15

NewDBFunction · 0.92
WithDumpOnFailureFunction · 0.92
LoggerFunction · 0.92
OrganizationFunction · 0.92
UserFunction · 0.92
TemplateFunction · 0.92
TemplateVersionFunction · 0.92
WorkspaceFunction · 0.92
ProvisionerJobFunction · 0.92
WorkspaceBuildFunction · 0.92
WorkspaceResourceFunction · 0.92
WorkspaceAgentFunction · 0.92

Tested by

no test coverage detected