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

Skip to content

chore: fix more flaky tests on Windows with Postgres #15629

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Nov 26, 2024
33 changes: 23 additions & 10 deletions coderd/database/dbgen/dbgen.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,16 +220,29 @@ func WorkspaceAgentScriptTimings(t testing.TB, db database.Store, script databas
}

func WorkspaceAgentScriptTiming(t testing.TB, db database.Store, orig database.WorkspaceAgentScriptTiming) database.WorkspaceAgentScriptTiming {
timing, err := db.InsertWorkspaceAgentScriptTimings(genCtx, database.InsertWorkspaceAgentScriptTimingsParams{
StartedAt: takeFirst(orig.StartedAt, dbtime.Now()),
EndedAt: takeFirst(orig.EndedAt, dbtime.Now()),
Stage: takeFirst(orig.Stage, database.WorkspaceAgentScriptTimingStageStart),
ScriptID: takeFirst(orig.ScriptID, uuid.New()),
ExitCode: takeFirst(orig.ExitCode, 0),
Status: takeFirst(orig.Status, database.WorkspaceAgentScriptTimingStatusOk),
})
require.NoError(t, err, "insert workspace agent script")
return timing
// retry a few times in case of a unique constraint violation
for i := 0; i < 10; i++ {
timing, err := db.InsertWorkspaceAgentScriptTimings(genCtx, database.InsertWorkspaceAgentScriptTimingsParams{
StartedAt: takeFirst(orig.StartedAt, dbtime.Now()),
EndedAt: takeFirst(orig.EndedAt, dbtime.Now()),
Stage: takeFirst(orig.Stage, database.WorkspaceAgentScriptTimingStageStart),
ScriptID: takeFirst(orig.ScriptID, uuid.New()),
ExitCode: takeFirst(orig.ExitCode, 0),
Status: takeFirst(orig.Status, database.WorkspaceAgentScriptTimingStatusOk),
})
if err == nil {
return timing
}
// Some tests run WorkspaceAgentScriptTiming in a loop and run into
// a unique violation - 2 rows get the same started_at value.
if (database.IsUniqueViolation(err, database.UniqueWorkspaceAgentScriptTimingsScriptIDStartedAtKey) && orig.StartedAt == time.Time{}) {
// Wait 1 millisecond so dbtime.Now() changes
time.Sleep(time.Millisecond * 1)
continue
}
require.NoError(t, err, "insert workspace agent script")
}
panic("failed to insert workspace agent script timing")
}

func Workspace(t testing.TB, db database.Store, orig database.WorkspaceTable) database.WorkspaceTable {
Expand Down
2 changes: 1 addition & 1 deletion coderd/database/dbpurge/dbpurge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func TestPurge(t *testing.T) {

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

now := dbtime.Now()
Expand Down
2 changes: 1 addition & 1 deletion enterprise/tailnet/pgcoord_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -921,7 +921,7 @@ func TestPGCoordinatorPropogatedPeerContext(t *testing.T) {
t.Skip("test only with postgres")
}

ctx := testutil.Context(t, testutil.WaitShort)
ctx := testutil.Context(t, testutil.WaitMedium)
store, ps := dbtestutil.NewDB(t)
logger := testutil.Logger(t)

Expand Down
14 changes: 7 additions & 7 deletions testutil/duration_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@ import "time"
//
// Windows durations are adjusted for slow CI workers.
const (
WaitShort = 15 * time.Second
WaitMedium = 20 * time.Second
WaitLong = 35 * time.Second
WaitSuperLong = 120 * time.Second
WaitShort = 30 * time.Second
WaitMedium = 40 * time.Second
WaitLong = 70 * time.Second
WaitSuperLong = 240 * time.Second
Comment on lines +10 to +13
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💀

)

// Constants for delaying repeated operations, e.g. in
// require.Eventually.
//
// Windows durations are adjusted for slow CI workers.
const (
IntervalFast = 50 * time.Millisecond
IntervalMedium = 500 * time.Millisecond
IntervalSlow = 2 * time.Second
IntervalFast = 100 * time.Millisecond
IntervalMedium = 1000 * time.Millisecond
IntervalSlow = 4 * time.Second
)
Loading