# 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()
		})
	}
}
