| Index: common/clock/testclock/testclock_test.go
|
| diff --git a/common/clock/testclock/testclock_test.go b/common/clock/testclock/testclock_test.go
|
| index f063c02f3d3e33b9f2e245fb4228f0f4a5037443..f1d19c2452c11d84d93ea0adab77ff2cf69e9ffc 100644
|
| --- a/common/clock/testclock/testclock_test.go
|
| +++ b/common/clock/testclock/testclock_test.go
|
| @@ -10,6 +10,7 @@ import (
|
|
|
| "github.com/luci/luci-go/common/clock"
|
| . "github.com/smartystreets/goconvey/convey"
|
| + "golang.org/x/net/context"
|
| )
|
|
|
| func TestTestClock(t *testing.T) {
|
| @@ -17,41 +18,55 @@ func TestTestClock(t *testing.T) {
|
|
|
| Convey(`A testing clock instance`, t, func() {
|
| now := time.Date(2015, 01, 01, 00, 00, 00, 00, time.UTC)
|
| - c := New(now)
|
| + ctx, clk := UseTime(context.Background(), now)
|
|
|
| Convey(`Returns the current time.`, func() {
|
| - So(c.Now(), ShouldResemble, now)
|
| + So(clk.Now(), ShouldResemble, now)
|
| })
|
|
|
| Convey(`When sleeping with a time of zero, immediately awakens.`, func() {
|
| - c.Sleep(0)
|
| - So(c.Now(), ShouldResemble, now)
|
| + clk.Sleep(ctx, 0)
|
| + So(clk.Now(), ShouldResemble, now)
|
| + })
|
| +
|
| + Convey(`Will panic if going backwards in time.`, func() {
|
| + So(func() { clk.Add(-1 * time.Second) }, ShouldPanic)
|
| })
|
|
|
| Convey(`When sleeping for a period of time, awakens when signalled.`, func() {
|
| sleepingC := make(chan struct{})
|
| - c.SetTimerCallback(func(_ time.Duration, _ clock.Timer) {
|
| + clk.SetTimerCallback(func(_ time.Duration, _ clock.Timer) {
|
| close(sleepingC)
|
| })
|
|
|
| awakeC := make(chan time.Time)
|
| go func() {
|
| - c.Sleep(2 * time.Second)
|
| - awakeC <- c.Now()
|
| + clk.Sleep(ctx, 2*time.Second)
|
| + awakeC <- clk.Now()
|
| }()
|
|
|
| <-sleepingC
|
| - c.Set(now.Add(1 * time.Second))
|
| - c.Set(now.Add(2 * time.Second))
|
| + clk.Set(now.Add(1 * time.Second))
|
| + clk.Set(now.Add(2 * time.Second))
|
| So(<-awakeC, ShouldResemble, now.Add(2*time.Second))
|
| })
|
|
|
| Convey(`Awakens after a period of time.`, func() {
|
| - afterC := c.After(2 * time.Second)
|
| + afterC := clk.After(ctx, 2*time.Second)
|
| +
|
| + clk.Set(now.Add(1 * time.Second))
|
| + clk.Set(now.Add(2 * time.Second))
|
| + So(<-afterC, ShouldResemble, clock.TimerResult{now.Add(2 * time.Second), nil})
|
| + })
|
| +
|
| + Convey(`When sleeping, awakens if canceled.`, func() {
|
| + ctx, cancelFunc := context.WithCancel(ctx)
|
| +
|
| + clk.SetTimerCallback(func(_ time.Duration, _ clock.Timer) {
|
| + cancelFunc()
|
| + })
|
|
|
| - c.Set(now.Add(1 * time.Second))
|
| - c.Set(now.Add(2 * time.Second))
|
| - So(<-afterC, ShouldResemble, now.Add(2*time.Second))
|
| + So(clk.Sleep(ctx, time.Second), ShouldEqual, context.Canceled)
|
| })
|
| })
|
| }
|
|
|