From 86dde2debbab6dec105e0bf74ef74d7220974dde Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Mart=C3=AD?= Date: Wed, 9 Aug 2017 16:56:08 +0900 Subject: [PATCH] testing: error if -parallel is given N<1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Otherwise, if there are any parallel tests, it will hang and panic with "all goroutines are asleep - deadlock!". Do not use flag.Uint to handle the error for us because we also want to error on N==0, and because it would make setting the default to GOMAXPROCS(0) more difficult, since it's an int. Check for it right after flag.Parse, and mimic flag errors by printing the usage and returning exit code 2. Fixes #20542. Change-Id: I0c9d4587f83d406a8f5e42ed74e40be46d639ffb Reviewed-on: https://go-review.googlesource.com/54150 Run-TryBot: Daniel Martí TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/go/go_test.go | 11 +++++++++++ src/testing/testing.go | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index d720611216..87810ad6cb 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -4487,3 +4487,14 @@ func TestExecBuildX(t *testing.T) { t.Fatalf("got %q; want %q", out, "hello") } } + +func TestParallelNumber(t *testing.T) { + for _, n := range [...]string{"-1", "0"} { + t.Run(n, func(t *testing.T) { + tg := testgo(t) + defer tg.cleanup() + tg.runFail("test", "-parallel", n, "testdata/standalone_parallel_sub_test.go") + tg.grepBoth("-parallel can only be given", "go test -parallel with N<1 did not error") + }) + } +} diff --git a/src/testing/testing.go b/src/testing/testing.go index 53283796f8..8b4bfc31a8 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -913,6 +913,12 @@ func (m *M) Run() int { flag.Parse() } + if *parallel < 1 { + fmt.Fprintln(os.Stderr, "testing: -parallel can only be given a positive integer") + flag.Usage() + return 2 + } + if len(*matchList) != 0 { listTests(m.deps.MatchString, m.tests, m.benchmarks, m.examples) return 0 -- 2.50.0