From a1eba0c477e742b5a055424413ce0d5ce57fb2ed Mon Sep 17 00:00:00 2001 From: Andrey Kumanyaev Date: Wed, 28 Oct 2026 22:33:47 +0100 Subject: [PATCH] test(mcp): retire collision worker before missing-owner retry --- internal/mcp/tools_multi_track_deadline_test.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/internal/mcp/tools_multi_track_deadline_test.go b/internal/mcp/tools_multi_track_deadline_test.go index f855272d4..0553c6586 100644 --- a/internal/mcp/tools_multi_track_deadline_test.go +++ b/internal/mcp/tools_multi_track_deadline_test.go @@ -134,16 +134,27 @@ func TestTrackRepositoryPrefixCollisionNamesMCPParameter(t *testing.T) { req.Params.Arguments = map[string]any{"path": second} res, err := srv.handleTrackRepository(t.Context(), req) require.NoError(t, err) - require.True(t, res.IsError) + require.NotNil(t, res) text := extractTextFromContent(t, res.Content) + require.True(t, res.IsError, "expected prefix collision, got: %s", text) require.Contains(t, text, "name parameter") require.NotContains(t, text, "gortex track --name") require.Contains(t, text, first) + // The buffered result can arrive before the producer's deferred cleanup. + // Wait for this exact failed track worker to retire before changing the + // owner fixture and exercising a fresh missing-owner collision request. + absSecond, err := filepath.Abs(second) + require.NoError(t, err) + require.Eventually(t, func() bool { + _, busy := srv.trackInFlight.Load(absSecond) + return !busy + }, 5*time.Second, time.Millisecond, "first collision worker must retire before retry") require.NoError(t, os.RemoveAll(first)) res, err = srv.handleTrackRepository(t.Context(), req) require.NoError(t, err) - require.True(t, res.IsError) + require.NotNil(t, res) text = extractTextFromContent(t, res.Content) + require.True(t, res.IsError, "expected missing-owner collision, got: %s", text) require.Contains(t, text, "no longer exists") require.Contains(t, text, "untrack_repository") }