From 7134657304a6d5b3a62c51cad82af6ca703d40c4 Mon Sep 17 00:00:00 2001 From: Karthik K N Date: Tue, 28 Sep 2021 12:23:27 +0530 Subject: [PATCH] Changes to fix the flake test case in ratelimiter --- .../workqueue/default_rate_limiters_test.go | 44 +++++++++++++++---- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/staging/src/k8s.io/client-go/util/workqueue/default_rate_limiters_test.go b/staging/src/k8s.io/client-go/util/workqueue/default_rate_limiters_test.go index 5b1546f3a6f..3776ed4e61b 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/default_rate_limiters_test.go +++ b/staging/src/k8s.io/client-go/util/workqueue/default_rate_limiters_test.go @@ -184,22 +184,48 @@ func TestMaxOfRateLimiter(t *testing.T) { } func TestWithMaxWaitRateLimiter(t *testing.T) { - limiter := NewWithMaxWaitRateLimiter(DefaultControllerRateLimiter(), 500*time.Second) + limiter := NewWithMaxWaitRateLimiter(NewStepRateLimiter(5*time.Millisecond, 1000*time.Second, 100), 500*time.Second) for i := 0; i < 100; i++ { if e, a := 5*time.Millisecond, limiter.When(i); e != a { - t.Errorf("expected %v, got %v", e, a) + t.Errorf("expected %v, got %v ", e, a) } } - for i := 100; i < 5100; i++ { - if e, a := 500*time.Second, limiter.When(i); e < a { - t.Errorf("expected %v, got %v", e, a) - } - } - - for i := 5100; i < 5200; i++ { + for i := 100; i < 200; i++ { if e, a := 500*time.Second, limiter.When(i); e != a { t.Errorf("expected %v, got %v", e, a) } } } + +var _ RateLimiter = &StepRateLimiter{} + +func NewStepRateLimiter(baseDelay time.Duration, maxDelay time.Duration, threshold int) RateLimiter { + return &StepRateLimiter{ + baseDelay: baseDelay, + maxDelay: maxDelay, + threshold: threshold, + } +} + +type StepRateLimiter struct { + count int + threshold int + baseDelay time.Duration + maxDelay time.Duration +} + +func (r *StepRateLimiter) When(item interface{}) time.Duration { + r.count += 1 + if r.count <= r.threshold { + return r.baseDelay + } + return r.maxDelay +} + +func (r *StepRateLimiter) NumRequeues(item interface{}) int { + return 0 +} + +func (r *StepRateLimiter) Forget(item interface{}) { +}