From b5a0f7156845302040746ebcb71304f6cb03ba40 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 6 Jun 2017 17:31:57 -0700 Subject: [PATCH] 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/runtime/crash_test.go | 43 +++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/runtime/crash_test.go b/src/runtime/crash_test.go index b08dd87d9b..7753809d45 100644 --- a/src/runtime/crash_test.go +++ b/src/runtime/crash_test.go @@ -579,21 +579,38 @@ func TestPanicRace(t *testing.T) { t.Fatal(err) } - got, err := testEnv(exec.Command(exe, "PanicRace")).CombinedOutput() - if err == nil { - t.Error("program exited successfully, should have failed") - } + // 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() + 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{ - "panic: crash", - "PanicRace", - "created by ", - } - for _, want := range wants { - if !bytes.Contains(got, []byte(want)) { - t.Errorf("did not find expected string %q", want) + 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) } -- 2.50.0