Skip to content

Commit ba7d183

Browse files
authored
fix: fix flake in TestWorkspaceAgent_Metadata_CatchMemoryLeak (#13553)
Fixes flake seen here: https://github.com/coder/coder/actions/runs/9461246505/job/26061605278 #13486 subtly changes the test so that `post` uses the new v2 Agent API, and when canceling context, there is a race condition where the yamux session underpinning the API can get torn down before the RPC processes the canceled context, yielding a different error response than the test was previously expecting. I've refactored the test to just stop posting when the test finishes, rather than depend on a context cancel to end the posting goroutine.
1 parent 0c627a4 commit ba7d183

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

coderd/workspaceagents_test.go

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,7 +1350,7 @@ func TestWorkspaceAgent_Metadata_CatchMemoryLeak(t *testing.T) {
13501350
agentClient := agentsdk.New(client.URL)
13511351
agentClient.SetSessionToken(r.AgentToken)
13521352

1353-
ctx, cancel := context.WithCancel(testutil.Context(t, testutil.WaitSuperLong))
1353+
ctx := testutil.Context(t, testutil.WaitSuperLong)
13541354
conn, err := agentClient.ConnectRPC(ctx)
13551355
require.NoError(t, err)
13561356
defer func() {
@@ -1404,20 +1404,21 @@ func TestWorkspaceAgent_Metadata_CatchMemoryLeak(t *testing.T) {
14041404

14051405
postDone := testutil.Go(t, func() {
14061406
for {
1407+
select {
1408+
case <-metadataDone:
1409+
return
1410+
default:
1411+
}
14071412
// We need to send two separate metadata updates to trigger the
14081413
// memory leak. foo2 will cause the number of foo1 to be doubled, etc.
1409-
err = post(ctx, "foo1", "hi")
1414+
err := post(ctx, "foo1", "hi")
14101415
if err != nil {
1411-
if !xerrors.Is(err, context.Canceled) {
1412-
assert.NoError(t, err, "post metadata foo1")
1413-
}
1416+
assert.NoError(t, err, "post metadata foo1")
14141417
return
14151418
}
14161419
err = post(ctx, "foo2", "bye")
14171420
if err != nil {
1418-
if !xerrors.Is(err, context.Canceled) {
1419-
assert.NoError(t, err, "post metadata foo1")
1420-
}
1421+
assert.NoError(t, err, "post metadata foo1")
14211422
return
14221423
}
14231424
}
@@ -1436,13 +1437,8 @@ func TestWorkspaceAgent_Metadata_CatchMemoryLeak(t *testing.T) {
14361437
// testing it is not straightforward.
14371438
db.err.Store(&wantErr)
14381439

1439-
select {
1440-
case <-ctx.Done():
1441-
t.Fatal("timeout waiting for SSE to close")
1442-
case <-metadataDone:
1443-
}
1444-
cancel()
1445-
<-postDone
1440+
testutil.RequireRecvCtx(ctx, t, metadataDone)
1441+
testutil.RequireRecvCtx(ctx, t, postDone)
14461442
}
14471443

14481444
func TestWorkspaceAgent_Startup(t *testing.T) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy