58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package job
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/cenkalti/backoff/v4"
|
|
)
|
|
|
|
func TestJobBackOff(t *testing.T) {
|
|
var (
|
|
testInitialInterval = 500 * time.Millisecond
|
|
testRandomizationFactor = 0.1
|
|
testMultiplier = 2.0
|
|
testMaxInterval = 5 * time.Second
|
|
testMinJobInterval = 1 * time.Second
|
|
)
|
|
|
|
exp := NewBackOff(backoff.NewExponentialBackOff())
|
|
exp.InitialInterval = testInitialInterval
|
|
exp.RandomizationFactor = testRandomizationFactor
|
|
exp.Multiplier = testMultiplier
|
|
exp.MaxInterval = testMaxInterval
|
|
exp.MinJobInterval = testMinJobInterval
|
|
exp.Reset()
|
|
|
|
expectedResults := []time.Duration{
|
|
500 * time.Millisecond,
|
|
500 * time.Millisecond,
|
|
500 * time.Millisecond,
|
|
1 * time.Second,
|
|
2 * time.Second,
|
|
4 * time.Second,
|
|
5 * time.Second,
|
|
5 * time.Second,
|
|
500 * time.Millisecond,
|
|
1 * time.Second,
|
|
2 * time.Second,
|
|
4 * time.Second,
|
|
5 * time.Second,
|
|
5 * time.Second,
|
|
}
|
|
|
|
for i, expected := range expectedResults {
|
|
// Assert that the next backoff falls in the expected range.
|
|
minInterval := expected - time.Duration(testRandomizationFactor*float64(expected))
|
|
maxInterval := expected + time.Duration(testRandomizationFactor*float64(expected))
|
|
|
|
if i < 3 || i == 8 {
|
|
time.Sleep(2 * time.Second)
|
|
}
|
|
|
|
actualInterval := exp.NextBackOff()
|
|
if !(minInterval <= actualInterval && actualInterval <= maxInterval) {
|
|
t.Error("error")
|
|
}
|
|
}
|
|
}
|