From: Than McIntosh Date: Wed, 2 Feb 2022 19:09:26 +0000 (-0500) Subject: test: apply GO_TEST_TIMEOUT_SCALE scaling to test timeouts X-Git-Tag: go1.18rc1~88 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=867a3d55024b654347fcbc0782a39ecd57d94a27;p=gostls13.git test: apply GO_TEST_TIMEOUT_SCALE scaling to test timeouts Change run.go to apply the GO_TEST_TIMEOUT_SCALE scaling factor to test timeouts (mentioned in "-t" clause in test header). Also with this patch, bump up the timeout for fixedbugs/issue46234.go from 30 to 45 seconds, to avoid flakes on very slow builders. Updates #50973. Change-Id: Icbafa482860e24cc1e72fee53511bcc764d06bf1 Reviewed-on: https://go-review.googlesource.com/c/go/+/382774 Reviewed-by: Ian Lance Taylor Trust: Than McIntosh Run-TryBot: Than McIntosh TryBot-Result: Gopher Robot --- diff --git a/test/fixedbugs/issue46234.go b/test/fixedbugs/issue46234.go index 8e7eb8bf8d..ed1c05cfbf 100644 --- a/test/fixedbugs/issue46234.go +++ b/test/fixedbugs/issue46234.go @@ -1,5 +1,6 @@ -// buildrun -t 30 +// buildrun -t 45 +//go:build !js // +build !js // Copyright 2021 The Go Authors. All rights reserved. diff --git a/test/run.go b/test/run.go index 9ba421510c..ae5afc751d 100644 --- a/test/run.go +++ b/test/run.go @@ -710,6 +710,13 @@ func (t *test) run() { if err != nil { t.err = fmt.Errorf("need number of seconds for -t timeout, got %s instead", args[0]) } + if s := os.Getenv("GO_TEST_TIMEOUT_SCALE"); s != "" { + timeoutScale, err := strconv.Atoi(s) + if err != nil { + log.Fatalf("failed to parse $GO_TEST_TIMEOUT_SCALE = %q as integer: %v", s, err) + } + tim *= timeoutScale + } case "-goexperiment": // set GOEXPERIMENT environment args = args[1:] if goexp != "" { @@ -834,6 +841,13 @@ func (t *test) run() { if tim != 0 { err = cmd.Start() // This command-timeout code adapted from cmd/go/test.go + // Note: the Go command uses a more sophisticated timeout + // strategy, first sending SIGQUIT (if appropriate for the + // OS in question) to try to trigger a stack trace, then + // finally much later SIGKILL. If timeouts prove to be a + // common problem here, it would be worth porting over + // that code as well. See https://do.dev/issue/50973 + // for more discussion. if err == nil { tick := time.NewTimer(time.Duration(tim) * time.Second) done := make(chan error)