Text file
src/cmd/go/testdata/script/test_finished_subtest_goroutines.txt
1 # Regression test for https://golang.org/issue/45127:
2 # Goroutines for completed parallel subtests should exit immediately,
3 # not block until earlier subtests have finished.
4
5 [short] skip
6
7 ! go test .
8 stdout 'panic: slow failure'
9 ! stdout '\[chan send'
10
11 -- go.mod --
12 module golang.org/issue45127
13
14 go 1.16
15 -- issue45127_test.go --
16 package main
17
18 import (
19 "fmt"
20 "runtime"
21 "runtime/debug"
22 "sync"
23 "testing"
24 )
25
26 func TestTestingGoroutineLeak(t *testing.T) {
27 debug.SetTraceback("all")
28
29 var wg sync.WaitGroup
30 const nFast = 10
31
32 t.Run("slow", func(t *testing.T) {
33 t.Parallel()
34 wg.Wait()
35 for i := 0; i < nFast; i++ {
36 // If the subtest goroutines are going to park on the channel
37 // send, allow them to park now. If they're not going to park,
38 // make sure they have had a chance to run to completion so
39 // that they aren't spuriously parked when we panic.
40 runtime.Gosched()
41 }
42 panic("slow failure")
43 })
44
45 wg.Add(nFast)
46 for i := 0; i < nFast; i++ {
47 t.Run(fmt.Sprintf("leaky%d", i), func(t *testing.T) {
48 t.Parallel()
49 wg.Done()
50 })
51 }
52 }
53
View as plain text