mengstack-api/tests/benchmarks/middleware_bench_test.go
MengStack Dev df809f1045
Some checks failed
CI / Build & Test (push) Failing after 1m31s
feat: user CRUD API + dashboard stats + kernel infrastructure
- Add user management endpoints (list/create/get/update/delete) with pagination and search
- Add dashboard stats endpoint with tenant/user/online counts and growth metrics
- Add tenant resolver middleware for multi-tenant request scoping
- Add i18n kernel with zh/en message files and AcceptLanguage middleware
- Add WebSocket hub/handler for real-time communication
- Add job scheduler kernel with cron support
- Add plugin sandbox for isolated execution
- Add storage kernel (local filesystem)
- Add event bus kernel for pub/sub
- Add cache kernel abstraction
- Add database migration runner and version upgrade checker
- Add rate limiting middleware with Redis backend
- Add SQL migrations for rbac, audit_logs, settings, notifications, examples
- Extend user repository with list/delete/count operations
- Register all module routes with tenant resolver
2026-10-03 03:42:58 +08:00

98 lines
2.2 KiB
Go

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)
}
}