func incrementSleepInBackground(fakeTimeService *fakeclock.FakeClock, delay time.Duration) chan struct{} { doneChan := make(chan struct{}) go func() { for { select { case <-doneChan: return default: if fakeTimeService.WatcherCount() > 0 { fakeTimeService.Increment(delay) Eventually(fakeTimeService.WatcherCount).Should(Equal(0)) } } } }() return doneChan }
fakeClock.Increment(5 * time.Second) Consistently(doneSleeping, Δ).ShouldNot(BeClosed()) fakeClock.Increment(4 * time.Second) Consistently(doneSleeping, Δ).ShouldNot(BeClosed()) fakeClock.Increment(1 * time.Second) Eventually(doneSleeping).Should(BeClosed()) }) }) Describe("WatcherCount", func() { Context("when a timer is created", func() { It("increments the watcher count", func() { fakeClock.NewTimer(time.Second) Expect(fakeClock.WatcherCount()).To(Equal(1)) fakeClock.NewTimer(2 * time.Second) Expect(fakeClock.WatcherCount()).To(Equal(2)) }) }) Context("when a timer fires", func() { It("increments the watcher count", func() { fakeClock.NewTimer(time.Second) Expect(fakeClock.WatcherCount()).To(Equal(1)) fakeClock.Increment(time.Second) Expect(fakeClock.WatcherCount()).To(Equal(0)) }) })