Some checks failed
CI / Build & Test (push) Failing after 1m31s
- 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
98 lines
2.2 KiB
Go
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)
|
|
}
|
|
}
|