Skip to content

Commit 767087a

Browse files
committed
Increase reliability
1 parent ef0c946 commit 767087a

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

coderd/workspaces_test.go

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,29 +1529,34 @@ func TestWorkspaceWatcher(t *testing.T) {
15291529

15301530
// Wait events are easier to debug with timestamped logs.
15311531
logger := slogtest.Make(t, nil).Named(t.Name()).Leveled(slog.LevelDebug)
1532-
wait := func(event string) {
1533-
select {
1534-
case <-ctx.Done():
1535-
require.FailNow(t, "timed out waiting for event", event)
1536-
case _, ok := <-wc:
1537-
require.True(t, ok, "watch channel closed: %s", event)
1538-
logger.Info(ctx, "done waiting for event", slog.F("event", event))
1532+
wait := func(event string, ready func(w codersdk.Workspace) bool) {
1533+
for {
1534+
select {
1535+
case <-ctx.Done():
1536+
require.FailNow(t, "timed out waiting for event", event)
1537+
case w, ok := <-wc:
1538+
require.True(t, ok, "watch channel closed: %s", event)
1539+
if ready == nil || ready(w) {
1540+
logger.Info(ctx, "done waiting for event", slog.F("event", event))
1541+
return
1542+
}
1543+
}
15391544
}
15401545
}
15411546

15421547
coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStart)
1543-
wait("workspace build being created")
1544-
wait("workspace build being acquired")
1545-
wait("workspace build completing")
1548+
wait("workspace build being created", nil)
1549+
wait("workspace build being acquired", nil)
1550+
wait("workspace build completing", nil)
15461551

15471552
// Unfortunately, this will add ~1s to the test due to the granularity
15481553
// of agent timeout seconds. However, if we don't do this we won't know
15491554
// which trigger we received when waiting for connection.
15501555
//
15511556
// Note that the first timeout is from `coderdtest.CreateWorkspace` and
15521557
// the latter is from `coderdtest.CreateWorkspaceBuild`.
1553-
wait("agent timeout after create")
1554-
wait("agent timeout after start")
1558+
wait("agent timeout after create", nil)
1559+
wait("agent timeout after start", nil)
15551560

15561561
agentClient := agentsdk.New(client.URL)
15571562
agentClient.SetSessionToken(authToken)
@@ -1563,32 +1568,33 @@ func TestWorkspaceWatcher(t *testing.T) {
15631568
_ = agentCloser.Close()
15641569
}()
15651570

1566-
wait("agent connected")
1567-
// This could be racy since we don't guarantee that agent all
1568-
// lifecycles are reported (if they happen in quick succession).
1569-
wait("agent lifecycle starting")
1570-
wait("agent lifecycle ready")
1571+
wait("agent connected/ready", func(w codersdk.Workspace) bool {
1572+
return w.LatestBuild.Resources[0].Agents[0].Status == codersdk.WorkspaceAgentConnected &&
1573+
w.LatestBuild.Resources[0].Agents[0].LifecycleState == codersdk.WorkspaceAgentLifecycleReady
1574+
})
15711575
agentCloser.Close()
1572-
wait("agent disconnected")
1576+
wait("agent disconnected", func(w codersdk.Workspace) bool {
1577+
return w.LatestBuild.Resources[0].Agents[0].Status == codersdk.WorkspaceAgentDisconnected
1578+
})
15731579

15741580
closeFunc.Close()
15751581
build := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStart)
1576-
wait("first is for the workspace build itself")
1582+
wait("first is for the workspace build itself", nil)
15771583
err = client.CancelWorkspaceBuild(ctx, build.ID)
15781584
require.NoError(t, err)
1579-
wait("second is for the build cancel")
1585+
wait("second is for the build cancel", nil)
15801586

15811587
err = client.UpdateWorkspace(ctx, workspace.ID, codersdk.UpdateWorkspaceRequest{
15821588
Name: "another",
15831589
})
15841590
require.NoError(t, err)
1585-
wait("update workspace name")
1591+
wait("update workspace name", nil)
15861592

15871593
err = client.UpdateActiveTemplateVersion(ctx, template.ID, codersdk.UpdateActiveTemplateVersion{
15881594
ID: template.ActiveVersionID,
15891595
})
15901596
require.NoError(t, err)
1591-
wait("update active template version")
1597+
wait("update active template version", nil)
15921598

15931599
cancel()
15941600
}

0 commit comments

Comments
 (0)