From 193c777c5b8948a3803004a2e49aac66aacbcffc Mon Sep 17 00:00:00 2001 From: Chris Stockton Date: Mon, 27 Jan 2025 10:53:01 -0700 Subject: [PATCH] fix: allow rate limit of 0 We have a special case check for rate limits of 0 in some areas of the code. Eventually I would like to remove those so I'm going to set the rate limit of 0 as a valid rate limit which allows no events. --- internal/ratelimit/burst.go | 2 +- internal/ratelimit/burst_test.go | 33 ++++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/internal/ratelimit/burst.go b/internal/ratelimit/burst.go index 9f2224338..6ae0ef58b 100644 --- a/internal/ratelimit/burst.go +++ b/internal/ratelimit/burst.go @@ -37,7 +37,7 @@ func NewBurstLimiter(r conf.Rate) *BurstLimiter { e := r.Events if e <= 0 { - e = 1 + e = 0 } // BurstLimiter will have an initial token bucket of size `e`. It will diff --git a/internal/ratelimit/burst_test.go b/internal/ratelimit/burst_test.go index 201721b92..b854e3b27 100644 --- a/internal/ratelimit/burst_test.go +++ b/internal/ratelimit/burst_test.go @@ -150,9 +150,9 @@ func TestBurstLimiter(t *testing.T) { }, }, - // zero value for Events = 1 event per second + // 1 event per second { - cfg: conf.Rate{Events: 0, OverTime: time.Second}, + cfg: conf.Rate{Events: 1, OverTime: time.Second}, now: now, evts: []event{ {true, now, 0}, @@ -162,9 +162,9 @@ func TestBurstLimiter(t *testing.T) { }, }, - // zero value for both Events and OverTime = 1 event per hour. + // 1 events per second and OverTime = 1 event per hour. { - cfg: conf.Rate{Events: 0, OverTime: 0}, + cfg: conf.Rate{Events: 1, OverTime: 0}, now: now, evts: []event{ {true, now, 0}, @@ -173,6 +173,31 @@ func TestBurstLimiter(t *testing.T) { {true, now.Add(time.Hour * 2), 0}, }, }, + + // zero value for Events = 0 event per second + { + cfg: conf.Rate{Events: 0, OverTime: time.Second}, + now: now, + evts: []event{ + {false, now, 0}, + {false, now.Add(-time.Second), 0}, + {false, now.Add(time.Second), 0}, + {false, now.Add(time.Second * 2), 0}, + }, + }, + + // zero value for both Events and OverTime = 1 event per hour. + { + cfg: conf.Rate{Events: 0, OverTime: 0}, + now: now, + evts: []event{ + {false, now, 0}, + {false, now.Add(time.Hour - time.Second), 0}, + {false, now.Add(-time.Hour), 0}, + {false, now.Add(time.Hour), 0}, + {false, now.Add(time.Hour * 2), 0}, + }, + }, } for _, tc := range cases {