1
0
mirror of https://github.com/golang/go synced 2024-09-30 07:28:36 -06:00

runtime: deflake TestPanicRace

The test is inherently racy, and for me fails about 0.05% of the time.
So only fail the test if it fails ten times in a row.

Fixes #20594

Change-Id: I3b3f7598f2196f7406f1a3937f38f21ff0c0e4b5
Reviewed-on: https://go-review.googlesource.com/45020
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Ian Lance Taylor 2017-06-06 17:31:57 -07:00
parent 703a9baf5c
commit b5a0f71568

View File

@ -579,11 +579,22 @@ func TestPanicRace(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
// The test is intentionally racy, and in my testing does not
// produce the expected output about 0.05% of the time.
// So run the program in a loop and only fail the test if we
// get the wrong output ten times in a row.
const tries = 10
retry:
for i := 0; i < tries; i++ {
got, err := testEnv(exec.Command(exe, "PanicRace")).CombinedOutput() got, err := testEnv(exec.Command(exe, "PanicRace")).CombinedOutput()
if err == nil { if err == nil {
t.Error("program exited successfully, should have failed") t.Logf("try %d: program exited successfully, should have failed", i+1)
continue
} }
if i > 0 {
t.Logf("try %d:\n", i+1)
}
t.Logf("%s\n", got) t.Logf("%s\n", got)
wants := []string{ wants := []string{
@ -593,7 +604,13 @@ func TestPanicRace(t *testing.T) {
} }
for _, want := range wants { for _, want := range wants {
if !bytes.Contains(got, []byte(want)) { if !bytes.Contains(got, []byte(want)) {
t.Errorf("did not find expected string %q", want) t.Logf("did not find expected string %q", want)
continue retry
} }
} }
// Test generated expected output.
return
}
t.Errorf("test ran %d times without producing expected output", tries)
} }