From f991c8a61f65405f5131554cfcd3deb558f1c284 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Fri, 6 Oct 2023 18:54:59 -0700 Subject: [PATCH] tstest: make ResourceCheck panic on parallel tests To find potential flakes earlier. Updates #deflake-effort Change-Id: I52add6111d660821c3a23d4b1dd032821344bc48 Signed-off-by: Brad Fitzpatrick --- tstest/resource.go | 11 +++++++++++ wgengine/magicsock/magicsock_test.go | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/tstest/resource.go b/tstest/resource.go index ebe6af054..4ca9fc928 100644 --- a/tstest/resource.go +++ b/tstest/resource.go @@ -13,8 +13,19 @@ "github.com/google/go-cmp/cmp" ) +// ResourceCheck takes a snapshot of the current goroutines and registers a +// cleanup on tb to verify that after the rest, all goroutines created by the +// test go away. (well, at least that the count matches. Maybe in the future it +// can look at specific routines). +// +// It panics if called from a parallel test. func ResourceCheck(tb testing.TB) { tb.Helper() + + // Set an environment variable (anything at all) just for the + // side effect of tb.Setenv panicking if we're in a parallel test. + tb.Setenv("TS_CHECKING_RESOURCES", "1") + startN, startStacks := goroutines() tb.Cleanup(func() { if tb.Failed() { diff --git a/wgengine/magicsock/magicsock_test.go b/wgengine/magicsock/magicsock_test.go index 570fca35b..987b398f4 100644 --- a/wgengine/magicsock/magicsock_test.go +++ b/wgengine/magicsock/magicsock_test.go @@ -705,6 +705,8 @@ func TestDiscokeyChange(t *testing.T) { } func TestActiveDiscovery(t *testing.T) { + tstest.ResourceCheck(t) + t.Run("simple_internet", func(t *testing.T) { t.Parallel() mstun := &natlab.Machine{Name: "stun"} @@ -900,7 +902,6 @@ func newPinger(t *testing.T, logf logger.Logf, src, dst *magicStack) (cleanup fu // get exercised. func testActiveDiscovery(t *testing.T, d *devices) { tstest.PanicOnLog() - tstest.ResourceCheck(t) tlogf, setT := makeNestable(t) setT(t)