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:
parent
aa87d78cf6
commit
d318ab2264
@ -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() {
|
||||
|
@ -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++
|
||||
|
Loading…
Reference in New Issue
Block a user