Files
cv-site/internal/middleware/benchmarks_test.go
T

171 lines
4.5 KiB
Go
Raw Normal View History

package middleware
import (
"net/http"
"net/http/httptest"
"testing"
)
// BenchmarkPreferencesMiddleware benchmarks the middleware
func BenchmarkPreferencesMiddleware(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = GetPreferences(r)
w.WriteHeader(http.StatusOK)
})
wrappedHandler := PreferencesMiddleware(handler)
b.ResetTimer()
for i := 0; i < b.N; i++ {
req := httptest.NewRequest(http.MethodGet, "/", nil)
req.AddCookie(&http.Cookie{Name: "cv-length", Value: "long"})
req.AddCookie(&http.Cookie{Name: "cv-icons", Value: "show"})
req.AddCookie(&http.Cookie{Name: "cv-language", Value: "en"})
req.AddCookie(&http.Cookie{Name: "cv-theme", Value: "default"})
req.AddCookie(&http.Cookie{Name: "color-theme", Value: "light"})
w := httptest.NewRecorder()
wrappedHandler.ServeHTTP(w, req)
}
}
// BenchmarkPreferencesMiddlewareWithMigration benchmarks with value migration
func BenchmarkPreferencesMiddlewareWithMigration(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = GetPreferences(r)
w.WriteHeader(http.StatusOK)
})
wrappedHandler := PreferencesMiddleware(handler)
b.ResetTimer()
for i := 0; i < b.N; i++ {
req := httptest.NewRequest(http.MethodGet, "/", nil)
req.AddCookie(&http.Cookie{Name: "cv-length", Value: "extended"}) // Old value
req.AddCookie(&http.Cookie{Name: "cv-icons", Value: "true"}) // Old value
w := httptest.NewRecorder()
wrappedHandler.ServeHTTP(w, req)
}
}
// BenchmarkGetPreferences benchmarks context retrieval
func BenchmarkGetPreferences(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = GetPreferences(r)
w.WriteHeader(http.StatusOK)
})
wrappedHandler := PreferencesMiddleware(handler)
req := httptest.NewRequest(http.MethodGet, "/", nil)
req.AddCookie(&http.Cookie{Name: "cv-length", Value: "long"})
w := httptest.NewRecorder()
// Setup context once
wrappedHandler.ServeHTTP(w, req)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = GetPreferences(req)
}
}
// BenchmarkContextHelpers benchmarks helper functions
func BenchmarkGetLanguage(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
wrappedHandler := PreferencesMiddleware(handler)
req := httptest.NewRequest(http.MethodGet, "/", nil)
req.AddCookie(&http.Cookie{Name: "cv-language", Value: "es"})
w := httptest.NewRecorder()
// Setup context
wrappedHandler.ServeHTTP(w, req)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = GetLanguage(req)
}
}
func BenchmarkIsLongCV(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
wrappedHandler := PreferencesMiddleware(handler)
req := httptest.NewRequest(http.MethodGet, "/", nil)
req.AddCookie(&http.Cookie{Name: "cv-length", Value: "long"})
w := httptest.NewRecorder()
wrappedHandler.ServeHTTP(w, req)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = IsLongCV(req)
}
}
func BenchmarkShowIcons(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
wrappedHandler := PreferencesMiddleware(handler)
req := httptest.NewRequest(http.MethodGet, "/", nil)
req.AddCookie(&http.Cookie{Name: "cv-icons", Value: "show"})
w := httptest.NewRecorder()
wrappedHandler.ServeHTTP(w, req)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = ShowIcons(req)
}
}
// BenchmarkSetPreferenceCookie benchmarks cookie setting
func BenchmarkSetPreferenceCookie(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
w := httptest.NewRecorder()
SetPreferenceCookie(w, "cv-length", "long")
}
}
// BenchmarkParallelPreferencesMiddleware benchmarks under parallel load
func BenchmarkParallelPreferencesMiddleware(b *testing.B) {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = GetPreferences(r)
w.WriteHeader(http.StatusOK)
})
wrappedHandler := PreferencesMiddleware(handler)
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
req := httptest.NewRequest(http.MethodGet, "/", nil)
req.AddCookie(&http.Cookie{Name: "cv-length", Value: "long"})
w := httptest.NewRecorder()
wrappedHandler.ServeHTTP(w, req)
}
})
}
// BenchmarkPreferencesWithoutMiddleware benchmarks fallback path
func BenchmarkPreferencesWithoutMiddleware(b *testing.B) {
req := httptest.NewRequest(http.MethodGet, "/", nil)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = GetPreferences(req)
}
}