Assigning to dur after b.jitter check (#79) * Assigning to dur after b.jitter check * Test cases added for jitter set to true scenario
diff --git a/util.go b/util.go index c6797cb..89ca54d 100644 --- a/util.go +++ b/util.go
@@ -92,11 +92,11 @@ if duration > math.MaxInt64 { return b.max } - dur := time.Duration(duration) if b.jitter { duration = rand.Float64()*(duration-initial) + initial } + dur := time.Duration(duration) if dur > b.max { return b.max
diff --git a/util_test.go b/util_test.go index 4ee7845..3909dab 100644 --- a/util_test.go +++ b/util_test.go
@@ -49,6 +49,18 @@ Expect(4).To(Equal(b.Attempt())) }) + It("should properly apply exponential backoff strategy with jitter set to true", func() { + b := NewExponentialBackoff(200*time.Millisecond, 2*time.Second, 2, true) + Expect(200 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(1).To(Equal(b.Attempt())) + Expect(400 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(2).To(Equal(b.Attempt())) + Expect(800 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(3).To(Equal(b.Attempt())) + Expect(1600 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(4).To(Equal(b.Attempt())) + }) + It("should reset properly", func() { b := NewExponentialBackoff(200*time.Millisecond, 2*time.Second, 2, false) Expect(200 * time.Millisecond).To(Equal(b.Duration())) @@ -65,6 +77,23 @@ Expect(800 * time.Millisecond).To(Equal(b.Duration())) Expect(3).To(Equal(b.Attempt())) }) + + It("should reset properly with jitter set to true", func() { + b := NewExponentialBackoff(200*time.Millisecond, 2*time.Second, 2, true) + Expect(200 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(1).To(Equal(b.Attempt())) + Expect(400 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(2).To(Equal(b.Attempt())) + Expect(800 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(3).To(Equal(b.Attempt())) + b.Reset() + Expect(200 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(1).To(Equal(b.Attempt())) + Expect(400 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(2).To(Equal(b.Attempt())) + Expect(800 * time.Millisecond).To(BeNumerically(">=", int64(b.Duration().Seconds()))) + Expect(3).To(Equal(b.Attempt())) + }) }) })