chore: establish local platform baseline
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package ratelimit
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
func TestLimiterEnforcesBurstAndRefills(t *testing.T) {
|
||||
redisAddr := os.Getenv("TEST_REDIS_ADDR")
|
||||
if redisAddr == "" {
|
||||
t.Skip("TEST_REDIS_ADDR is not set")
|
||||
}
|
||||
client := redis.NewClient(&redis.Options{Addr: redisAddr})
|
||||
defer func() { _ = client.Close() }()
|
||||
limiter, err := New(client, "integration", Policy{RatePerSecond: 10, Burst: 2})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
identifier := fmt.Sprintf("test-%d", time.Now().UnixNano())
|
||||
for attempt := 0; attempt < 2; attempt++ {
|
||||
result, err := limiter.Allow(context.Background(), "user", identifier)
|
||||
if err != nil || !result.Allowed {
|
||||
t.Fatalf("attempt %d result=%#v err=%v", attempt, result, err)
|
||||
}
|
||||
}
|
||||
limited, err := limiter.Allow(context.Background(), "user", identifier)
|
||||
if err != nil || limited.Allowed || limited.RetryAfter <= 0 {
|
||||
t.Fatalf("limited result=%#v err=%v", limited, err)
|
||||
}
|
||||
time.Sleep(150 * time.Millisecond)
|
||||
refilled, err := limiter.Allow(context.Background(), "user", identifier)
|
||||
if err != nil || !refilled.Allowed {
|
||||
t.Fatalf("refilled result=%#v err=%v", refilled, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user