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 <iant@golang.org>
Trust: Than McIntosh <thanm@google.com>
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Than McIntosh 2022-02-02 14:09:26 -05:00
parent 334a591a3f
commit 867a3d5502
2 changed files with 16 additions and 1 deletions

View file

@ -1,5 +1,6 @@
// buildrun -t 30
// buildrun -t 45
//go:build !js
// +build !js
// Copyright 2021 The Go Authors. All rights reserved.

View file

@ -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)