func (r *rootSuite) TestPingTimeoutStopped(c *gc.C) { closedc := make(chan time.Time, 1) action := func() { closedc <- time.Now() } timeout := apiserver.NewPingTimeout(action, 20*time.Millisecond) timeout.Ping() timeout.Stop() // The action should never trigger select { case <-closedc: c.Fatalf("action triggered after Stop()") case <-time.After(testing.ShortWait): } }
func (r *rootSuite) TestPingTimeout(c *gc.C) { closedc := make(chan time.Time, 1) action := func() { closedc <- time.Now() } timeout := apiserver.NewPingTimeout(action, 50*time.Millisecond) for i := 0; i < 2; i++ { time.Sleep(10 * time.Millisecond) timeout.Ping() } // Expect action to be executed about 50ms after last ping. broken := time.Now() var closed time.Time select { case closed = <-closedc: case <-time.After(testing.LongWait): c.Fatalf("action never executed") } closeDiff := closed.Sub(broken) / time.Millisecond c.Assert(50 <= closeDiff && closeDiff <= 100, gc.Equals, true) }