1
0
mirror of https://github.com/golang/go synced 2024-11-24 23:17:57 -07:00

cmd/go: respect test -timeout flag

I thought that -timeout was per-test, but it is for the
whole program execution, so cmd/go can adjust its timer
(also for whole program execution) accordingly.

Fixes #2993.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5650070
This commit is contained in:
Russ Cox 2012-02-12 23:19:24 -05:00
parent aa87d78cf6
commit d318ab2264
2 changed files with 14 additions and 3 deletions

View File

@ -198,10 +198,13 @@ var (
testX bool // -x flag
testV bool // -v flag
testFiles []string // -file flag(s) TODO: not respected
testTimeout string // -timeout flag
testArgs []string
testBench bool
testStreamOutput bool // show output as it is generated
testShowPass bool // show passing output
testKillTimeout = 10 * time.Minute
)
func runTest(cmd *Command, args []string) {
@ -217,6 +220,14 @@ func runTest(cmd *Command, args []string) {
fatalf("cannot use -c flag with multiple packages")
}
// If a test timeout was given and is parseable, set our kill timeout
// to that timeout plus one minute. This is a backup alarm in case
// the test wedges with a goroutine spinning and its background
// timer does not get a chance to fire.
if dt, err := time.ParseDuration(testTimeout); err == nil {
testKillTimeout = dt + 1*time.Minute
}
// show passing test output (after buffering) with -v flag.
// must buffer because tests are running in parallel, and
// otherwise the output will get mixed.
@ -540,9 +551,7 @@ func (b *builder) runTest(a *action) error {
// This is a last-ditch deadline to detect and
// stop wedged test binaries, to keep the builders
// running.
const deadline = 10 * time.Minute
tick := time.NewTimer(deadline)
tick := time.NewTimer(testKillTimeout)
if err == nil {
done := make(chan error)
go func() {

View File

@ -133,6 +133,8 @@ func testFlags(args []string) (packageNames, passToTest []string) {
case "bench":
// record that we saw the flag; don't care about the value
testBench = true
case "timeout":
testTimeout = value
}
if extraWord {
i++