diff --git a/backoff_test.go b/backoff_test.go index bfca7b17..1ec48fe0 100644 --- a/backoff_test.go +++ b/backoff_test.go @@ -1,6 +1,10 @@ package grpc -import "testing" +import ( + "testing" + "math/rand" + "time" +) func TestBackoffConfigDefaults(t *testing.T) { b := BackoffConfig{} @@ -9,3 +13,36 @@ func TestBackoffConfigDefaults(t *testing.T) { t.Fatalf("expected BackoffConfig to pickup default parameters: %v != %v", b, DefaultBackoffConfig) } } + +func TestBackoffWitDifferentNumberOfRetries(t *testing.T) { + const MAX_RETRIES = 10 + randSrc := rand.NewSource(time.Now().UnixNano()) + randGen := rand.New(randSrc) + for i := 0; i < 5; i++ { + // generate a randon number, between 0 and MAX_RETRIES, to be used as number of retries + retries := randGen.Intn(MAX_RETRIES) + b := BackoffConfig{} + setDefaults(&b) + backoffTime := b.backoff(retries) + // backoff time should be between basedelay and max delay + if backoffTime < b.baseDelay || backoffTime > b.MaxDelay { + t.Fatalf("expected backoff time: %v to be between basedelay: %v and maxdelay: %v",backoffTime,b.baseDelay,b.MaxDelay) + } + } +} + +func TestBackOffTimeIncreasesWithRetries(t *testing.T) { + const MAX_RETRIES = 10 + b := BackoffConfig{} + setDefaults(&b) + // base delay + lastBackOffTime := b.backoff(0) + for retries := 1; retries <= MAX_RETRIES; retries++ { + backoffTime := b.backoff(retries) + // backoff time should increase as number of retries increase + if backoffTime <= lastBackOffTime { + t.Fatalf("backoffTime for %v retries : %v is smaller than backoffTime for %v retries: %v",retries,backoffTime,retries-1,lastBackOffTime) + } + lastBackOffTime = backoffTime + } +}