ceremonyclient/go-libp2p/p2p/host/basic/internal/backoff/backoff_test.go
Cassandra Heart dbd95bd9e9
v2.1.0 (#439)
* v2.1.0 [omit consensus and adjacent] - this commit will be amended with the full release after the file copy is complete

* 2.1.0 main node rollup
2025-09-30 02:48:15 -05:00

60 lines
1.0 KiB
Go

package backoff
import (
"errors"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestBackoff(t *testing.T) {
origSince := since
defer func() { since = origSince }()
var timeSince time.Duration
since = func(time.Time) time.Duration {
return timeSince
}
var maybeErr error
b := &ExpBackoff{}
f := func() error { return maybeErr }
err, ran := b.Run(f)
require.True(t, ran)
require.NoError(t, err)
maybeErr = errors.New("some error")
err, ran = b.Run(f)
require.True(t, ran)
require.Error(t, err)
// Rerun again
_, ran = b.Run(f)
require.False(t, ran)
timeSince = 100*time.Millisecond + 1
err, ran = b.Run(f)
require.True(t, ran)
require.Error(t, err)
timeSince = 100*time.Millisecond + 1
_, ran = b.Run(f)
require.False(t, ran)
timeSince = 200*time.Millisecond + 1
err, ran = b.Run(f)
require.True(t, ran)
require.Error(t, err)
for timeSince < defaultMaxDelay*4 {
timeSince *= 2
err, ran = b.Run(f)
require.True(t, ran)
require.Error(t, err)
}
require.Equal(t, defaultMaxDelay, b.calcDelay())
}