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 := 0; i < cfg.rateLimiter.RequestsPerTimeFrame+marginOfError; i++ { 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) } } } }