From 73f5af82ad5ef440bcc1d8727aa9d4495e21d203 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Mon, 14 Apr 2025 16:20:50 +0400 Subject: [PATCH] test: fix TestAgent_Lifecycle/ShutdownScriptOnce to wait for stats (#17387) fixes: https://github.com/coder/internal/issues/576 TestAgent_Lifecycle/ShutdownScriptOnce hits error logs which cause test failures. These logs are legit errors and have to do with shutting down the agent before it has fully come up. This PR changes the test to wait for the agent to send stats (a good indicator that it's fully up, and beyond the errors that have triggered test failures in past) before closing it. --- agent/agent_test.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/agent/agent_test.go b/agent/agent_test.go index 69423a2f83..97790860ba 100644 --- a/agent/agent_test.go +++ b/agent/agent_test.go @@ -1650,8 +1650,10 @@ func TestAgent_Lifecycle(t *testing.T) { t.Run("ShutdownScriptOnce", func(t *testing.T) { t.Parallel() logger := testutil.Logger(t) + ctx := testutil.Context(t, testutil.WaitMedium) expected := "this-is-shutdown" derpMap, _ := tailnettest.RunDERPAndSTUN(t) + statsCh := make(chan *proto.Stats, 50) client := agenttest.NewClient(t, logger, @@ -1670,7 +1672,7 @@ func TestAgent_Lifecycle(t *testing.T) { RunOnStop: true, }}, }, - make(chan *proto.Stats, 50), + statsCh, tailnet.NewCoordinator(logger), ) defer client.Close() @@ -1695,6 +1697,11 @@ func TestAgent_Lifecycle(t *testing.T) { return len(content) > 0 // something is in the startup log file }, testutil.WaitShort, testutil.IntervalMedium) + // In order to avoid shutting down the agent before it is fully started and triggering + // errors, we'll wait until the agent is fully up. It's a bit hokey, but among the last things the agent starts + // is the stats reporting, so getting a stats report is a good indication the agent is fully up. + _ = testutil.RequireRecvCtx(ctx, t, statsCh) + err := agent.Close() require.NoError(t, err, "agent should be closed successfully")