Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 83c493e

Browse files
authored
chore: fix more flaky tests on Windows with Postgres (#15629)
Addresses the following flakes: - coder/internal#222 - coder/internal#223 - coder/internal#224 - coder/internal#225 - coder/internal#226 - coder/internal#227 - coder/internal#228 - coder/internal#229 - coder/internal#230
1 parent 06c9979 commit 83c493e

File tree

4 files changed

+32
-19
lines changed

4 files changed

+32
-19
lines changed

coderd/database/dbgen/dbgen.go

+23-10
Original file line numberDiff line numberDiff line change
@@ -220,16 +220,29 @@ func WorkspaceAgentScriptTimings(t testing.TB, db database.Store, script databas
220220
}
221221

222222
func WorkspaceAgentScriptTiming(t testing.TB, db database.Store, orig database.WorkspaceAgentScriptTiming) database.WorkspaceAgentScriptTiming {
223-
timing, err := db.InsertWorkspaceAgentScriptTimings(genCtx, database.InsertWorkspaceAgentScriptTimingsParams{
224-
StartedAt: takeFirst(orig.StartedAt, dbtime.Now()),
225-
EndedAt: takeFirst(orig.EndedAt, dbtime.Now()),
226-
Stage: takeFirst(orig.Stage, database.WorkspaceAgentScriptTimingStageStart),
227-
ScriptID: takeFirst(orig.ScriptID, uuid.New()),
228-
ExitCode: takeFirst(orig.ExitCode, 0),
229-
Status: takeFirst(orig.Status, database.WorkspaceAgentScriptTimingStatusOk),
230-
})
231-
require.NoError(t, err, "insert workspace agent script")
232-
return timing
223+
// retry a few times in case of a unique constraint violation
224+
for i := 0; i < 10; i++ {
225+
timing, err := db.InsertWorkspaceAgentScriptTimings(genCtx, database.InsertWorkspaceAgentScriptTimingsParams{
226+
StartedAt: takeFirst(orig.StartedAt, dbtime.Now()),
227+
EndedAt: takeFirst(orig.EndedAt, dbtime.Now()),
228+
Stage: takeFirst(orig.Stage, database.WorkspaceAgentScriptTimingStageStart),
229+
ScriptID: takeFirst(orig.ScriptID, uuid.New()),
230+
ExitCode: takeFirst(orig.ExitCode, 0),
231+
Status: takeFirst(orig.Status, database.WorkspaceAgentScriptTimingStatusOk),
232+
})
233+
if err == nil {
234+
return timing
235+
}
236+
// Some tests run WorkspaceAgentScriptTiming in a loop and run into
237+
// a unique violation - 2 rows get the same started_at value.
238+
if (database.IsUniqueViolation(err, database.UniqueWorkspaceAgentScriptTimingsScriptIDStartedAtKey) && orig.StartedAt == time.Time{}) {
239+
// Wait 1 millisecond so dbtime.Now() changes
240+
time.Sleep(time.Millisecond * 1)
241+
continue
242+
}
243+
require.NoError(t, err, "insert workspace agent script")
244+
}
245+
panic("failed to insert workspace agent script timing")
233246
}
234247

235248
func Workspace(t testing.TB, db database.Store, orig database.WorkspaceTable) database.WorkspaceTable {

coderd/database/dbpurge/dbpurge_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func TestPurge(t *testing.T) {
5454

5555
//nolint:paralleltest // It uses LockIDDBPurge.
5656
func TestDeleteOldWorkspaceAgentStats(t *testing.T) {
57-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
57+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
5858
defer cancel()
5959

6060
now := dbtime.Now()

enterprise/tailnet/pgcoord_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@ func TestPGCoordinatorPropogatedPeerContext(t *testing.T) {
921921
t.Skip("test only with postgres")
922922
}
923923

924-
ctx := testutil.Context(t, testutil.WaitShort)
924+
ctx := testutil.Context(t, testutil.WaitMedium)
925925
store, ps := dbtestutil.NewDB(t)
926926
logger := testutil.Logger(t)
927927

testutil/duration_windows.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@ import "time"
77
//
88
// Windows durations are adjusted for slow CI workers.
99
const (
10-
WaitShort = 15 * time.Second
11-
WaitMedium = 20 * time.Second
12-
WaitLong = 35 * time.Second
13-
WaitSuperLong = 120 * time.Second
10+
WaitShort = 30 * time.Second
11+
WaitMedium = 40 * time.Second
12+
WaitLong = 70 * time.Second
13+
WaitSuperLong = 240 * time.Second
1414
)
1515

1616
// Constants for delaying repeated operations, e.g. in
1717
// require.Eventually.
1818
//
1919
// Windows durations are adjusted for slow CI workers.
2020
const (
21-
IntervalFast = 50 * time.Millisecond
22-
IntervalMedium = 500 * time.Millisecond
23-
IntervalSlow = 2 * time.Second
21+
IntervalFast = 100 * time.Millisecond
22+
IntervalMedium = 1000 * time.Millisecond
23+
IntervalSlow = 4 * time.Second
2424
)

0 commit comments

Comments
 (0)