BeforeEach(func() { resultIn(retryableError) }) Context("as long as the backoff policy returns true", func() { BeforeEach(func() { durations := make(chan time.Duration, 3) durations <- time.Second durations <- 2 * time.Second durations <- 1000 * time.Second close(durations) retryPolicy.DelayForStub = func(failedAttempts uint) (time.Duration, bool) { Ω(attempts()).Should(Equal(int(failedAttempts))) select { case d, ok := <-durations: return d, ok } } }) It("continuously retries with an increasing attempt count", func() { Ω(retryPolicy.DelayForCallCount()).Should(Equal(4)) Ω(sleeper.SleepCallCount()).Should(Equal(3)) Ω(retryPolicy.DelayForArgsForCall(0)).Should(Equal(uint(1))) Ω(sleeper.SleepArgsForCall(0)).Should(Equal(time.Second)) Ω(retryPolicy.DelayForArgsForCall(1)).Should(Equal(uint(2))) Ω(sleeper.SleepArgsForCall(1)).Should(Equal(2 * time.Second))