1
0
mirror of https://github.com/golang/go synced 2024-09-30 05:34:35 -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,21 +579,38 @@ func TestPanicRace(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
got, err := testEnv(exec.Command(exe, "PanicRace")).CombinedOutput() // The test is intentionally racy, and in my testing does not
if err == nil { // produce the expected output about 0.05% of the time.
t.Error("program exited successfully, should have failed") // 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
t.Logf("%s\n", got) retry:
for i := 0; i < tries; i++ {
wants := []string{ got, err := testEnv(exec.Command(exe, "PanicRace")).CombinedOutput()
"panic: crash", if err == nil {
"PanicRace", t.Logf("try %d: program exited successfully, should have failed", i+1)
"created by ", continue
}
for _, want := range wants {
if !bytes.Contains(got, []byte(want)) {
t.Errorf("did not find expected string %q", want)
} }
if i > 0 {
t.Logf("try %d:\n", i+1)
}
t.Logf("%s\n", got)
wants := []string{
"panic: crash",
"PanicRace",
"created by ",
}
for _, want := range wants {
if !bytes.Contains(got, []byte(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)
} }