time: make TestReset more reliable
Fixes #4690
R=golang-dev, alex.brainman, mikioh.mikioh
CC=golang-dev
https://golang.org/cl/7181052
diff --git a/src/pkg/time/sleep_test.go b/src/pkg/time/sleep_test.go
index 6671eb3..bcdaffc 100644
--- a/src/pkg/time/sleep_test.go
+++ b/src/pkg/time/sleep_test.go
@@ -247,26 +247,49 @@
<-c
}
-func TestReset(t *testing.T) {
- t0 := NewTimer(100 * Millisecond)
- Sleep(50 * Millisecond)
- if t0.Reset(150*Millisecond) != true {
- t.Fatalf("resetting unfired timer returned false")
+func testReset(d Duration) error {
+ t0 := NewTimer(2 * d)
+ Sleep(d)
+ if t0.Reset(3*d) != true {
+ return errors.New("resetting unfired timer returned false")
}
- Sleep(100 * Millisecond)
+ Sleep(2 * d)
select {
case <-t0.C:
- t.Fatalf("timer fired early")
+ return errors.New("timer fired early")
default:
}
- Sleep(100 * Millisecond)
+ Sleep(2 * d)
select {
case <-t0.C:
default:
- t.Fatalf("reset timer did not fire")
+ return errors.New("reset timer did not fire")
}
if t0.Reset(50*Millisecond) != false {
- t.Fatalf("resetting expired timer returned true")
+ return errors.New("resetting expired timer returned true")
}
+ return nil
+}
+
+func TestReset(t *testing.T) {
+ // We try to run this test with increasingly larger multiples
+ // until one works so slow, loaded hardware isn't as flaky,
+ // but without slowing down fast machines unnecessarily.
+ const unit = 25 * Millisecond
+ tries := []Duration{
+ 1 * unit,
+ 3 * unit,
+ 7 * unit,
+ 15 * unit,
+ }
+ var err error
+ for _, d := range tries {
+ err = testReset(d)
+ if err == nil {
+ t.Logf("passed using duration %v", d)
+ return
+ }
+ }
+ t.Error(err)
}