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

time: only fail TestAfterStop if it fails five times in a row

The test is inherently slightly flaky, so repeat to reduce flakiness.

Fixes #35537

Change-Id: Id918d48d33c7d5e19c4f24df104adc7fbf3720f2
Reviewed-on: https://go-review.googlesource.com/c/go/+/207457
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent acb9ac07
...@@ -235,28 +235,59 @@ func TestAfterTick(t *testing.T) { ...@@ -235,28 +235,59 @@ func TestAfterTick(t *testing.T) {
} }
func TestAfterStop(t *testing.T) { func TestAfterStop(t *testing.T) {
AfterFunc(100*Millisecond, func() {}) // We want to test that we stop a timer before it runs.
t0 := NewTimer(50 * Millisecond) // We also want to test that it didn't run after a longer timer.
c1 := make(chan bool, 1) // Since we don't want the test to run for too long, we don't
t1 := AfterFunc(150*Millisecond, func() { c1 <- true }) // want to use lengthy times. That makes the test inherently flaky.
c2 := After(200 * Millisecond) // So only report an error if it fails five times in a row.
if !t0.Stop() {
t.Fatalf("failed to stop event 0") var errs []string
} logErrs := func() {
if !t1.Stop() { for _, e := range errs {
t.Fatalf("failed to stop event 1") t.Log(e)
} }
<-c2
select {
case <-t0.C:
t.Fatalf("event 0 was not stopped")
case <-c1:
t.Fatalf("event 1 was not stopped")
default:
} }
if t1.Stop() {
t.Fatalf("Stop returned true twice") for i := 0; i < 5; i++ {
AfterFunc(100*Millisecond, func() {})
t0 := NewTimer(50 * Millisecond)
c1 := make(chan bool, 1)
t1 := AfterFunc(150*Millisecond, func() { c1 <- true })
c2 := After(200 * Millisecond)
if !t0.Stop() {
errs = append(errs, "failed to stop event 0")
continue
}
if !t1.Stop() {
errs = append(errs, "failed to stop event 1")
continue
}
<-c2
select {
case <-t0.C:
errs = append(errs, "event 0 was not stopped")
continue
case <-c1:
errs = append(errs, "event 1 was not stopped")
continue
default:
}
if t1.Stop() {
errs = append(errs, "Stop returned true twice")
continue
}
// Test passed, so all done.
if len(errs) > 0 {
t.Logf("saw %d errors, ignoring to avoid flakiness", len(errs))
logErrs()
}
return
} }
t.Errorf("saw %d errors", len(errs))
logErrs()
} }
func TestAfterQueuing(t *testing.T) { func TestAfterQueuing(t *testing.T) {
......
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