]> Cypherpunks repositories - gostls13.git/commitdiff
time: make TestReset more reliable
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 23 Jan 2013 01:25:58 +0000 (17:25 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 23 Jan 2013 01:25:58 +0000 (17:25 -0800)
Fixes #4690

R=golang-dev, alex.brainman, mikioh.mikioh
CC=golang-dev
https://golang.org/cl/7181052

src/pkg/time/sleep_test.go

index 6671eb317d38a423200392c7b9d41808cd77c4f1..bcdaffc2ac47c3da0e147bfb4b165860d6185ce4 100644 (file)
@@ -247,26 +247,49 @@ func TestSleepZeroDeadlock(t *testing.T) {
        <-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)
 }