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()))
+ })
})
})