feat: initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user