summaryrefslogtreecommitdiffstats
path: root/src/cmd/go/testdata/script/test_finished_subtest_goroutines.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/testdata/script/test_finished_subtest_goroutines.txt')
-rw-r--r--src/cmd/go/testdata/script/test_finished_subtest_goroutines.txt52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/cmd/go/testdata/script/test_finished_subtest_goroutines.txt b/src/cmd/go/testdata/script/test_finished_subtest_goroutines.txt
new file mode 100644
index 0000000..8db821e
--- /dev/null
+++ b/src/cmd/go/testdata/script/test_finished_subtest_goroutines.txt
@@ -0,0 +1,52 @@
+# Regression test for https://golang.org/issue/45127:
+# Goroutines for completed parallel subtests should exit immediately,
+# not block until earlier subtests have finished.
+
+[short] skip
+
+! go test .
+stdout 'panic: slow failure'
+! stdout '\[chan send'
+
+-- go.mod --
+module golang.org/issue45127
+
+go 1.16
+-- issue45127_test.go --
+package main
+
+import (
+ "fmt"
+ "runtime"
+ "runtime/debug"
+ "sync"
+ "testing"
+)
+
+func TestTestingGoroutineLeak(t *testing.T) {
+ debug.SetTraceback("all")
+
+ var wg sync.WaitGroup
+ const nFast = 10
+
+ t.Run("slow", func(t *testing.T) {
+ t.Parallel()
+ wg.Wait()
+ for i := 0; i < nFast; i++ {
+ // If the subtest goroutines are going to park on the channel
+ // send, allow them to park now. If they're not going to park,
+ // make sure they have had a chance to run to completion so
+ // that they aren't spuriously parked when we panic.
+ runtime.Gosched()
+ }
+ panic("slow failure")
+ })
+
+ wg.Add(nFast)
+ for i := 0; i < nFast; i++ {
+ t.Run(fmt.Sprintf("leaky%d", i), func(t *testing.T) {
+ t.Parallel()
+ wg.Done()
+ })
+ }
+}