mirror of
https://github.com/lukaszraczylo/traefikoidc.git
synced 2026-06-05 22:44:17 +00:00
c474bbafd6
* Cleanup excessive comments. * Remove leftovers hanging around from previous refactor * Improve test coverage
162 lines
3.5 KiB
Go
162 lines
3.5 KiB
Go
package traefikoidc
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func BenchmarkMemoryLeakFixes(b *testing.B) {
|
|
suite := NewMemoryLeakFixesTestSuite()
|
|
|
|
b.Run("OptimizedCacheLifecycle", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
cache := NewOptimizedCache()
|
|
cache.Set("bench-key", "bench-value", time.Minute)
|
|
_, _ = cache.Get("bench-key")
|
|
cache.Close()
|
|
}
|
|
})
|
|
|
|
b.Run("BackgroundTaskLifecycle", func(b *testing.B) {
|
|
logger := GetSingletonNoOpLogger()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
taskFunc := func() {}
|
|
task := NewBackgroundTask("bench-task", 100*time.Millisecond, taskFunc, logger)
|
|
task.Start()
|
|
task.Stop()
|
|
}
|
|
})
|
|
|
|
b.Run("LazyBackgroundTaskLifecycle", func(b *testing.B) {
|
|
logger := GetSingletonNoOpLogger()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
taskFunc := func() {}
|
|
task := NewLazyBackgroundTask("bench-lazy-task", 100*time.Millisecond, taskFunc, logger)
|
|
task.StartIfNeeded()
|
|
task.Stop()
|
|
}
|
|
})
|
|
|
|
b.Run("LazyCacheLifecycle", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
cache := NewLazyCache()
|
|
cache.Set("bench-key", "bench-value", time.Minute)
|
|
_, _ = cache.Get("bench-key")
|
|
}
|
|
})
|
|
|
|
b.Run("MetadataCacheLifecycle", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
var wg sync.WaitGroup
|
|
cache := NewMetadataCache(&wg)
|
|
cache.Close()
|
|
}
|
|
})
|
|
|
|
b.Run("SecureDataCleanup", func(b *testing.B) {
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
cache := NewOptimizedCache()
|
|
sensitiveData := []byte(suite.factory.GenerateRandomString(64))
|
|
cache.Set("sensitive-key", sensitiveData, time.Minute)
|
|
cache.Close()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkMemoryUsage(b *testing.B) {
|
|
b.Run("Cache_Operations", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
cache := NewCache()
|
|
defer cache.Close()
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
key := fmt.Sprintf("bench-key-%d", i)
|
|
cache.Set(key, "value", time.Minute)
|
|
cache.Get(key)
|
|
cache.Delete(key)
|
|
}
|
|
})
|
|
|
|
b.Run("Session_Creation", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
sm, _ := NewSessionManager(
|
|
"test-encryption-key-32-bytes-long-enough",
|
|
false,
|
|
"",
|
|
"",
|
|
0,
|
|
NewLogger("error"),
|
|
)
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
req := httptest.NewRequest("GET", "/", nil)
|
|
_, _ = sm.GetSession(req)
|
|
}
|
|
})
|
|
|
|
b.Run("Buffer_Pool", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
pool := NewBufferPool(4096)
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
buf := pool.Get()
|
|
buf.WriteString("benchmark data")
|
|
pool.Put(buf)
|
|
}
|
|
})
|
|
|
|
b.Run("Gzip_Pool", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
pool := NewGzipWriterPool()
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
w := pool.Get()
|
|
var buf bytes.Buffer
|
|
w.Reset(&buf)
|
|
w.Write([]byte("benchmark compression data"))
|
|
w.Close()
|
|
pool.Put(w)
|
|
}
|
|
})
|
|
|
|
b.Run("Plugin_Request", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
config := CreateConfig()
|
|
config.ProviderURL = "https://accounts.google.com"
|
|
config.SessionEncryptionKey = "test-encryption-key-32-bytes-long"
|
|
config.ClientID = "test-client"
|
|
config.ClientSecret = "test-secret"
|
|
|
|
next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
})
|
|
|
|
handler, _ := New(context.Background(), next, config, "bench")
|
|
plugin := handler.(*TraefikOidc)
|
|
defer plugin.Close()
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
req := httptest.NewRequest("GET", "/", nil)
|
|
w := httptest.NewRecorder()
|
|
plugin.ServeHTTP(w, req)
|
|
}
|
|
})
|
|
}
|