Commit b5a0f715 authored by Ian Lance Taylor's avatar Ian Lance Taylor

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: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 703a9baf
...@@ -579,21 +579,38 @@ func TestPanicRace(t *testing.T) { ...@@ -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
retry:
for i := 0; i < tries; i++ {
got, err := testEnv(exec.Command(exe, "PanicRace")).CombinedOutput()
if err == nil {
t.Logf("try %d: program exited successfully, should have failed", i+1)
continue
}
t.Logf("%s\n", got) if i > 0 {
t.Logf("try %d:\n", i+1)
}
t.Logf("%s\n", got)
wants := []string{ wants := []string{
"panic: crash", "panic: crash",
"PanicRace", "PanicRace",
"created by ", "created by ",
} }
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)
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment