Skip to content

Commit 2e4aa72

Browse files
authored
test(cli): fix flaky TestProvisioners_Golden (#21228)
Use a single base time with consistent offsets and ensure CreatedAt is set on all dbgen-created resources. Fixes coder/internal#449
1 parent 6f86f67 commit 2e4aa72

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

cli/provisioners_test.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,23 +89,26 @@ func TestProvisioners_Golden(t *testing.T) {
8989
replace[version.ID.String()] = "00000000-0000-0000-cccc-000000000000"
9090
replace[workspace.LatestBuild.ID.String()] = "00000000-0000-0000-dddd-000000000000"
9191

92+
now := dbtime.Now()
93+
9294
// Create a provisioner that's working on a job.
9395
pd1 := dbgen.ProvisionerDaemon(t, coderdAPI.Database, database.ProvisionerDaemon{
9496
Name: "provisioner-1",
95-
CreatedAt: dbtime.Now().Add(1 * time.Second),
97+
CreatedAt: now.Add(time.Second),
9698
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(time.Hour), Valid: true}, // Stale interval can't be adjusted, keep online.
9799
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
98100
Tags: database.StringMap{"owner": "", "scope": "organization", "foo": "bar"},
99101
})
100102
w1 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
101103
OwnerID: member.ID,
102104
TemplateID: template.ID,
105+
CreatedAt: now.Add(time.Second),
103106
})
104107
wb1ID := uuid.MustParse("00000000-0000-0000-dddd-000000000001")
105108
job1 := dbgen.ProvisionerJob(t, db, coderdAPI.Pubsub, database.ProvisionerJob{
106109
WorkerID: uuid.NullUUID{UUID: pd1.ID, Valid: true},
107110
Input: json.RawMessage(`{"workspace_build_id":"` + wb1ID.String() + `"}`),
108-
CreatedAt: dbtime.Now().Add(2 * time.Second),
111+
CreatedAt: now.Add(time.Second),
109112
StartedAt: sql.NullTime{Time: coderdAPI.Clock.Now(), Valid: true},
110113
Tags: database.StringMap{"owner": "", "scope": "organization", "foo": "bar"},
111114
})
@@ -114,25 +117,27 @@ func TestProvisioners_Golden(t *testing.T) {
114117
JobID: job1.ID,
115118
WorkspaceID: w1.ID,
116119
TemplateVersionID: version.ID,
120+
CreatedAt: now.Add(time.Second),
117121
})
118122

119123
// Create a provisioner that completed a job previously and is offline.
120124
pd2 := dbgen.ProvisionerDaemon(t, coderdAPI.Database, database.ProvisionerDaemon{
121125
Name: "provisioner-2",
122-
CreatedAt: dbtime.Now().Add(2 * time.Second),
126+
CreatedAt: now.Add(2 * time.Second),
123127
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(-time.Hour), Valid: true},
124128
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
125129
Tags: database.StringMap{"owner": "", "scope": "organization"},
126130
})
127131
w2 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
128132
OwnerID: member.ID,
129133
TemplateID: template.ID,
134+
CreatedAt: now.Add(2 * time.Second),
130135
})
131136
wb2ID := uuid.MustParse("00000000-0000-0000-dddd-000000000002")
132137
job2 := dbgen.ProvisionerJob(t, db, coderdAPI.Pubsub, database.ProvisionerJob{
133138
WorkerID: uuid.NullUUID{UUID: pd2.ID, Valid: true},
134139
Input: json.RawMessage(`{"workspace_build_id":"` + wb2ID.String() + `"}`),
135-
CreatedAt: dbtime.Now().Add(3 * time.Second),
140+
CreatedAt: now.Add(2 * time.Second),
136141
StartedAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(-2 * time.Hour), Valid: true},
137142
CompletedAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(-time.Hour), Valid: true},
138143
Tags: database.StringMap{"owner": "", "scope": "organization"},
@@ -142,30 +147,33 @@ func TestProvisioners_Golden(t *testing.T) {
142147
JobID: job2.ID,
143148
WorkspaceID: w2.ID,
144149
TemplateVersionID: version.ID,
150+
CreatedAt: now.Add(2 * time.Second),
145151
})
146152

147153
// Create a pending job.
148154
w3 := dbgen.Workspace(t, coderdAPI.Database, database.WorkspaceTable{
149155
OwnerID: member.ID,
150156
TemplateID: template.ID,
157+
CreatedAt: now.Add(3 * time.Second),
151158
})
152159
wb3ID := uuid.MustParse("00000000-0000-0000-dddd-000000000003")
153160
job3 := dbgen.ProvisionerJob(t, db, coderdAPI.Pubsub, database.ProvisionerJob{
154161
Input: json.RawMessage(`{"workspace_build_id":"` + wb3ID.String() + `"}`),
155-
CreatedAt: dbtime.Now().Add(4 * time.Second),
162+
CreatedAt: now.Add(3 * time.Second),
156163
Tags: database.StringMap{"owner": "", "scope": "organization"},
157164
})
158165
dbgen.WorkspaceBuild(t, coderdAPI.Database, database.WorkspaceBuild{
159166
ID: wb3ID,
160167
JobID: job3.ID,
161168
WorkspaceID: w3.ID,
162169
TemplateVersionID: version.ID,
170+
CreatedAt: now.Add(3 * time.Second),
163171
})
164172

165173
// Create a provisioner that is idle.
166174
_ = dbgen.ProvisionerDaemon(t, coderdAPI.Database, database.ProvisionerDaemon{
167175
Name: "provisioner-3",
168-
CreatedAt: dbtime.Now().Add(3 * time.Second),
176+
CreatedAt: now.Add(4 * time.Second),
169177
LastSeenAt: sql.NullTime{Time: coderdAPI.Clock.Now().Add(time.Hour), Valid: true}, // Stale interval can't be adjusted, keep online.
170178
KeyID: codersdk.ProvisionerKeyUUIDBuiltIn,
171179
Tags: database.StringMap{"owner": "", "scope": "organization"},

0 commit comments

Comments
 (0)