zoraxy/src/mod/dynamicproxy/ratelimit_benchmark_test.go
2024-06-11 16:53:29 +02:00

129 lines
3.0 KiB
Go

package dynamicproxy
import (
"net/http"
"net/http/httptest"
"sync"
"testing"
)
func BenchmarkRateLimitLockMapInt64(b *testing.B) {
go InitRateLimit()
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handleRateLimit(w, r, &ProxyEndpoint{RateLimiting: 10})
})
request := httptest.NewRequest("GET", "/", nil)
request.RemoteAddr = "192.168.1.1:1234"
b.ResetTimer()
for i := 0; i < b.N; i++ {
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, request)
}
}
func BenchmarkRateLimitSyncMapInt64(b *testing.B) {
go InitRateLimitSyncMapInt64()
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handleRateLimitSyncMapInt64(w, r, &ProxyEndpoint{RateLimiting: 10})
})
request := httptest.NewRequest("GET", "/", nil)
request.RemoteAddr = "192.168.1.1:1234"
b.ResetTimer()
for i := 0; i < b.N; i++ {
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, request)
}
}
func BenchmarkRateLimitSyncMapAtomicInt64(b *testing.B) {
go InitRateLimitSyncMapAtomicInt64()
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handleRateLimitSyncMapAtomicInt64(w, r, &ProxyEndpoint{RateLimiting: 10})
})
request := httptest.NewRequest("GET", "/", nil)
request.RemoteAddr = "192.168.1.1:1234"
b.ResetTimer()
for i := 0; i < b.N; i++ {
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, request)
}
}
func BenchmarkRateLimitLockMapInt64Concurrent(b *testing.B) {
go InitRateLimit()
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handleRateLimit(w, r, &ProxyEndpoint{RateLimiting: 10})
})
request := httptest.NewRequest("GET", "/", nil)
request.RemoteAddr = "192.168.1.1:1234"
b.ResetTimer()
var wg sync.WaitGroup
for i := 0; i < b.N; i++ {
wg.Add(1)
go func() {
defer wg.Done()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, request)
}()
}
wg.Wait()
}
func BenchmarkRateLimitSyncMapInt64Concurrent(b *testing.B) {
go InitRateLimitSyncMapInt64()
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handleRateLimitSyncMapInt64(w, r, &ProxyEndpoint{RateLimiting: 10})
})
request := httptest.NewRequest("GET", "/", nil)
request.RemoteAddr = "192.168.1.1:1234"
b.ResetTimer()
var wg sync.WaitGroup
for i := 0; i < b.N; i++ {
wg.Add(1)
go func() {
defer wg.Done()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, request)
}()
}
wg.Wait()
}
func BenchmarkRateLimitSyncMapAtomicInt64Concurrent(b *testing.B) {
go InitRateLimitSyncMapAtomicInt64()
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handleRateLimitSyncMapAtomicInt64(w, r, &ProxyEndpoint{RateLimiting: 10})
})
request := httptest.NewRequest("GET", "/", nil)
request.RemoteAddr = "192.168.1.1:1234"
b.ResetTimer()
var wg sync.WaitGroup
for i := 0; i < b.N; i++ {
wg.Add(1)
go func() {
defer wg.Done()
recorder := httptest.NewRecorder()
handler.ServeHTTP(recorder, request)
}()
}
wg.Wait()
}