46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package job
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/cenkalti/backoff/v3"
|
|
)
|
|
|
|
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()
|
|
|
|
var expectedResults = []time.Duration{500, 500, 500, 1000, 2000, 4000, 5000, 5000, 500, 1000, 2000, 4000, 5000, 5000}
|
|
for i, d := range expectedResults {
|
|
expectedResults[i] = d * time.Millisecond
|
|
}
|
|
|
|
for i, expected := range expectedResults {
|
|
// Assert that the next backoff falls in the expected range.
|
|
var minInterval = expected - time.Duration(testRandomizationFactor*float64(expected))
|
|
var maxInterval = expected + time.Duration(testRandomizationFactor*float64(expected))
|
|
|
|
if i < 3 || i == 8 {
|
|
time.Sleep(2 * time.Second)
|
|
}
|
|
|
|
var actualInterval = exp.NextBackOff()
|
|
if !(minInterval <= actualInterval && actualInterval <= maxInterval) {
|
|
t.Error("error")
|
|
}
|
|
}
|
|
}
|