2016-09-19 19:08:39 +02:00
package job
import (
"testing"
"time"
2016-12-30 09:21:13 +01:00
2020-02-26 10:36:05 +01:00
"github.com/cenkalti/backoff/v4"
2016-09-19 19:08:39 +02:00
)
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 ( )
2021-03-04 09:02:03 +01:00
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 ,
2016-09-19 19:08:39 +02:00
}
for i , expected := range expectedResults {
// Assert that the next backoff falls in the expected range.
2020-07-07 14:42:03 +02:00
minInterval := expected - time . Duration ( testRandomizationFactor * float64 ( expected ) )
maxInterval := expected + time . Duration ( testRandomizationFactor * float64 ( expected ) )
2019-10-09 11:48:04 +02:00
2016-09-19 19:08:39 +02:00
if i < 3 || i == 8 {
time . Sleep ( 2 * time . Second )
}
2019-10-09 11:48:04 +02:00
2020-07-07 14:42:03 +02:00
actualInterval := exp . NextBackOff ( )
2016-09-19 19:08:39 +02:00
if ! ( minInterval <= actualInterval && actualInterval <= maxInterval ) {
t . Error ( "error" )
}
}
}