diff --git a/godog_and_gomega_helpers.go b/godog_and_gomega_helpers.go index 8ba2019..f4da1d4 100644 --- a/godog_and_gomega_helpers.go +++ b/godog_and_gomega_helpers.go @@ -3,6 +3,7 @@ package godog_and_gomega import ( "errors" "fmt" + "runtime" "strconv" "time" @@ -60,3 +61,17 @@ func checkTestTimeout(t time.Duration) { <-time.After(t) panic("Test Suite Timeout") } + +func SetTestDeadlockProtection_WithStackDump(seconds int) { + go checkTestTimeout_WithStackDump(time.Duration(seconds) * time.Second) +} +func checkTestTimeout_WithStackDump(t time.Duration) { + <-time.After(t) + PrintGoroutineStacks() + panic("Test Suite Timeout") +} +func PrintGoroutineStacks() { + buf := make([]byte, 1<<16) + stackSize := runtime.Stack(buf, true) + fmt.Printf("Goroutine stack trace:\n%s\n", buf[:stackSize]) +}