Files
grafana/pkg/services/ngalert/schedule/retry_test.go
T

74 lines
2.3 KiB
Go

package schedule
import (
"testing"
"time"
"github.com/benbjohnson/clock"
"github.com/cenkalti/backoff/v4"
"github.com/stretchr/testify/require"
)
func TestExponentialBackoffRetryProvider_New(t *testing.T) {
testClock := clock.NewMock()
maxRetries := int64(5)
initialDelay := 100 * time.Millisecond
maxDelay := 1 * time.Second
retry := newExponentialBackoffRetryer(maxRetries, initialDelay, maxDelay, 0, testClock)
require.NotNil(t, retry, "Retry instance should not be nil")
for i := int64(0); i < maxRetries; i++ {
delay := retry.NextAttemptIn()
require.GreaterOrEqual(t, delay, initialDelay, "Delay should be at least the initial delay")
require.LessOrEqual(t, delay, maxDelay, "Delay should not exceed the max delay")
testClock.Add(delay)
}
delay := retry.NextAttemptIn()
require.Equal(t, backoff.Stop, delay, "Delay should be backoff.Stop after max retries")
}
func TestExponentialBackoffRetryProvider_MaxRetries(t *testing.T) {
testClock := clock.NewMock()
t.Run("max retries is zero", func(t *testing.T) {
retry := newExponentialBackoffRetryer(0, 100*time.Millisecond, 1*time.Second, 0, testClock)
require.NotNil(t, retry, "Retry instance should not be nil")
delay := retry.NextAttemptIn()
require.Equal(t, backoff.Stop, delay, "Should immediately stop when maxRetries is 0")
})
t.Run("max retries is not zero", func(t *testing.T) {
maxRetries := int64(10)
retry := newExponentialBackoffRetryer(maxRetries, 10*time.Millisecond, 1*time.Second, 0, testClock)
for i := int64(0); i < maxRetries; i++ {
delay := retry.NextAttemptIn()
require.NotEqual(t, backoff.Stop, delay, "Should not stop before reaching max retries")
testClock.Add(delay)
}
delay := retry.NextAttemptIn()
require.Equal(t, backoff.Stop, delay, "Should stop after reaching maxRetries")
})
}
func TestExponentialBackoffRetryProvider_DelaysWithinBounds(t *testing.T) {
testClock := clock.NewMock()
initialDelay := 200 * time.Millisecond
maxDelay := 2 * time.Second
maxRetries := int64(10)
retry := newExponentialBackoffRetryer(maxRetries, initialDelay, maxDelay, 0, testClock)
for i := int64(0); i < maxRetries; i++ {
delay := retry.NextAttemptIn()
require.GreaterOrEqual(t, delay, initialDelay, "Delay should not be less than initial delay")
require.LessOrEqual(t, delay, maxDelay, "Delay should not exceed max delay")
testClock.Add(delay)
}
}