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))