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