forked from TrueCloudLab/restic
55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package backoff
|
|
|
|
import (
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestMaxTriesHappy(t *testing.T) {
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
max := 17 + r.Intn(13)
|
|
bo := WithMaxTries(&ZeroBackOff{}, uint64(max))
|
|
|
|
// Load up the tries count, but reset should clear the record
|
|
for ix := 0; ix < max/2; ix++ {
|
|
bo.NextBackOff()
|
|
}
|
|
bo.Reset()
|
|
|
|
// Now fill the tries count all the way up
|
|
for ix := 0; ix < max; ix++ {
|
|
d := bo.NextBackOff()
|
|
if d == Stop {
|
|
t.Errorf("returned Stop on try %d", ix)
|
|
}
|
|
}
|
|
|
|
// We have now called the BackOff max number of times, we expect
|
|
// the next result to be Stop, even if we try it multiple times
|
|
for ix := 0; ix < 7; ix++ {
|
|
d := bo.NextBackOff()
|
|
if d != Stop {
|
|
t.Error("invalid next back off")
|
|
}
|
|
}
|
|
|
|
// Reset makes it all work again
|
|
bo.Reset()
|
|
d := bo.NextBackOff()
|
|
if d == Stop {
|
|
t.Error("returned Stop after reset")
|
|
}
|
|
|
|
}
|
|
|
|
func TestMaxTriesZero(t *testing.T) {
|
|
// It might not make sense, but its okay to send a zero
|
|
bo := WithMaxTries(&ZeroBackOff{}, uint64(0))
|
|
for ix := 0; ix < 11; ix++ {
|
|
d := bo.NextBackOff()
|
|
if d == Stop {
|
|
t.Errorf("returned Stop on try %d", ix)
|
|
}
|
|
}
|
|
}
|