Files

56 lines
1.2 KiB
Go

package main
import (
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/FernandoVideira/LK_API_Temp/internal/ratelimiter"
)
func TestRateLimiterMiddleware(t *testing.T) {
cfg := config{
rateLimiter: ratelimiter.Config{
RequestsPerTimeFrame: 10,
TimeFrame: time.Second * 5,
Enabled: true,
},
addr: ":8080",
}
api := newTestApi(t, cfg)
ts := httptest.NewServer(api.mount())
defer ts.Close()
client := ts.Client()
mockIP := "192.168.1.1"
marginOfError := 2
for i := range cfg.rateLimiter.RequestsPerTimeFrame + marginOfError {
req, err := http.NewRequest("GET", ts.URL+"/v1/health", nil)
if err != nil {
t.Fatalf("failed to create request: %v", err)
}
req.Header.Set("X-Forwarded-For", mockIP)
resp, err := client.Do(req)
if err != nil {
t.Fatalf("failed to send request: %v", err)
}
defer resp.Body.Close()
if i < cfg.rateLimiter.RequestsPerTimeFrame {
if resp.StatusCode != http.StatusOK {
t.Fatalf("expected status code %d, got %d", http.StatusOK, resp.StatusCode)
}
} else {
if resp.StatusCode != http.StatusTooManyRequests {
t.Fatalf("expected status code %d, got %d", http.StatusTooManyRequests, resp.StatusCode)
}
}
}
}