36 lines
713 B
Go
36 lines
713 B
Go
package middleware
|
||
|
||
import (
|
||
"testing"
|
||
"time"
|
||
)
|
||
|
||
func TestRateLimiter_AllowAndRefill(t *testing.T) {
|
||
rl := NewRateLimiter(2, 1) // 容量2,每秒补充1
|
||
|
||
// 注入可控时间
|
||
now := time.Unix(0, 0).UnixNano()
|
||
rl.now = func() int64 { return now }
|
||
rl.lastRefill = now
|
||
rl.tokens = 2
|
||
|
||
if !rl.Allow() {
|
||
t.Fatalf("expected first Allow() true")
|
||
}
|
||
if !rl.Allow() {
|
||
t.Fatalf("expected second Allow() true")
|
||
}
|
||
if rl.Allow() {
|
||
t.Fatalf("expected third Allow() false (no tokens)")
|
||
}
|
||
|
||
// 过 1 秒应补充 1 个令牌
|
||
now += int64(time.Second)
|
||
if !rl.Allow() {
|
||
t.Fatalf("expected Allow() true after refill")
|
||
}
|
||
if rl.Allow() {
|
||
t.Fatalf("expected Allow() false again (tokens should be 0)")
|
||
}
|
||
}
|