Skip to content

Commit ed8092c

Browse files
authored
fix(scaletest/createworkspaces): address race condition between agent closer and cleanup (#10210)
1 parent b3471bd commit ed8092c

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

scaletest/createworkspaces/run_test.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,7 @@ func Test_Runner(t *testing.T) {
107107
version = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
108108
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
109109

110-
closer := goEventuallyStartFakeAgent(ctx, t, client, authToken)
111-
t.Cleanup(closer)
110+
closerCh := goEventuallyStartFakeAgent(ctx, t, client, authToken)
112111

113112
const (
114113
username = "scaletest-user"
@@ -147,6 +146,10 @@ func Test_Runner(t *testing.T) {
147146
t.Log("Runner logs:\n\n" + logsStr)
148147
require.NoError(t, err)
149148

149+
// Wait for the workspace agent to start.
150+
closer := <-closerCh
151+
t.Cleanup(func() { _ = closer.Close() })
152+
150153
// Ensure a user and workspace were created.
151154
users, err := client.Users(ctx, codersdk.UsersRequest{})
152155
require.NoError(t, err)
@@ -373,8 +376,7 @@ func Test_Runner(t *testing.T) {
373376
version = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
374377
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
375378

376-
closer := goEventuallyStartFakeAgent(ctx, t, client, authToken)
377-
t.Cleanup(closer)
379+
closeCh := goEventuallyStartFakeAgent(ctx, t, client, authToken)
378380

379381
const (
380382
username = "scaletest-user"
@@ -414,6 +416,10 @@ func Test_Runner(t *testing.T) {
414416
t.Log("Runner logs:\n\n" + logsStr)
415417
require.NoError(t, err)
416418

419+
// Wait for the agent to start.
420+
closer := <-closeCh
421+
t.Cleanup(func() { _ = closer.Close() })
422+
417423
// Ensure a user and workspace were created.
418424
users, err := client.Users(ctx, codersdk.UsersRequest{})
419425
require.NoError(t, err)
@@ -519,7 +525,7 @@ func Test_Runner(t *testing.T) {
519525
// listing workspaces until we find it, then wait for the build to
520526
// finish, then start the agents. It is the caller's responsibility to
521527
// call the returned function to stop the agents.
522-
func goEventuallyStartFakeAgent(ctx context.Context, t *testing.T, client *codersdk.Client, agentToken string) func() {
528+
func goEventuallyStartFakeAgent(ctx context.Context, t *testing.T, client *codersdk.Client, agentToken string) chan io.Closer {
523529
t.Helper()
524530
ch := make(chan io.Closer, 1) // Don't block.
525531
go func() {
@@ -537,7 +543,7 @@ func goEventuallyStartFakeAgent(ctx context.Context, t *testing.T, client *coder
537543
break
538544
}
539545

540-
time.Sleep(100 * time.Millisecond)
546+
time.Sleep(testutil.IntervalMedium)
541547
}
542548

543549
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
@@ -549,13 +555,12 @@ func goEventuallyStartFakeAgent(ctx context.Context, t *testing.T, client *coder
549555
Logger: slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}).
550556
Named("agent").Leveled(slog.LevelWarn),
551557
})
552-
coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
558+
resources := coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
559+
assert.GreaterOrEqual(t, len(resources), 1, "workspace %s has no resources", workspace.ID.String())
560+
assert.NotEmpty(t, resources[0].Agents, "workspace %s has no agents", workspace.ID.String())
561+
agentID := resources[0].Agents[0].ID
562+
t.Logf("agent %s is running for workspace %s", agentID.String(), workspace.ID.String())
553563
ch <- agentCloser
554564
}()
555-
closeFunc := func() {
556-
if closer, ok := <-ch; ok {
557-
_ = closer.Close()
558-
}
559-
}
560-
return closeFunc
565+
return ch
561566
}

0 commit comments

Comments
 (0)