package benchmarks import ( "net/http" "net/http/httptest" "testing" "time" "mengstack/internal/app/middleware" "github.com/gin-gonic/gin" ) func init() { gin.SetMode(gin.TestMode) } func BenchmarkMiddleware_RequestID(b *testing.B) { r := gin.New() r.Use(middleware.RequestID()) r.GET("/test", func(c *gin.Context) { c.String(200, "ok") }) b.ResetTimer() for i := 0; i < b.N; i++ { w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/test", nil) r.ServeHTTP(w, req) } } func BenchmarkMiddleware_SecurityHeaders(b *testing.B) { r := gin.New() r.Use(middleware.SecurityHeaders()) r.GET("/test", func(c *gin.Context) { c.String(200, "ok") }) b.ResetTimer() for i := 0; i < b.N; i++ { w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/test", nil) r.ServeHTTP(w, req) } } func BenchmarkMiddleware_CORS(b *testing.B) { r := gin.New() r.Use(middleware.CORS()) r.GET("/test", func(c *gin.Context) { c.String(200, "ok") }) b.ResetTimer() for i := 0; i < b.N; i++ { w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/test", nil) r.ServeHTTP(w, req) } } func BenchmarkMiddleware_BodyLimit(b *testing.B) { r := gin.New() r.Use(middleware.BodyLimit(10 << 20)) r.POST("/test", func(c *gin.Context) { c.String(200, "ok") }) b.ResetTimer() for i := 0; i < b.N; i++ { w := httptest.NewRecorder() req, _ := http.NewRequest("POST", "/test", nil) r.ServeHTTP(w, req) } } func BenchmarkMiddleware_FullStack(b *testing.B) { r := gin.New() r.Use(middleware.RequestID()) r.Use(middleware.SecurityHeaders()) r.Use(middleware.CORS()) r.Use(middleware.BodyLimit(10 << 20)) r.GET("/test", func(c *gin.Context) { c.String(200, "ok") }) b.ResetTimer() for i := 0; i < b.N; i++ { w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/test", nil) r.ServeHTTP(w, req) } } func BenchmarkMiddleware_RateLimit_InMemory(b *testing.B) { r := gin.New() r.Use(middleware.RateLimit(1000000, time.Minute)) r.GET("/test", func(c *gin.Context) { c.String(200, "ok") }) b.ResetTimer() for i := 0; i < b.N; i++ { w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/test", nil) r.ServeHTTP(w, req) } }