aboutsummaryrefslogtreecommitdiffstats
path: root/web/web_bench_test.go
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-18 13:38:27 -0800
committerGitHub <noreply@github.com>2026-02-18 13:38:27 -0800
commit7776e81b39130c211eb0ec566c6467a28a9fa64c (patch)
tree807539911d272878d65b79cccc72e8589cdc599f /web/web_bench_test.go
parenta74885d269d2fddb21be5db402e70ac1a41a0e23 (diff)
parentc585d7873e9b4bfd9f6efd30f9ce08aed8a0d92b (diff)
downloadneko-7776e81b39130c211eb0ec566c6467a28a9fa64c.tar.gz
neko-7776e81b39130c211eb0ec566c6467a28a9fa64c.tar.bz2
neko-7776e81b39130c211eb0ec566c6467a28a9fa64c.zip
Merge pull request #19 from adammathes/claude/improve-image-proxy-5iY78
Improve image proxy security, caching, and error handling
Diffstat (limited to 'web/web_bench_test.go')
-rw-r--r--web/web_bench_test.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/web/web_bench_test.go b/web/web_bench_test.go
index 7897fc7..068fd55 100644
--- a/web/web_bench_test.go
+++ b/web/web_bench_test.go
@@ -1,8 +1,11 @@
package web
import (
+ "encoding/base64"
+ "fmt"
"net/http"
"net/http/httptest"
+ "net/url"
"strings"
"testing"
@@ -90,3 +93,48 @@ func BenchmarkFullMiddlewareStack(b *testing.B) {
handler.ServeHTTP(rr, req)
}
}
+
+// --- Image proxy benchmarks ---
+
+func BenchmarkImageProxyCacheHit(b *testing.B) {
+ encoded := base64.URLEncoding.EncodeToString([]byte("https://example.com/image.jpg"))
+ etag := `"` + encoded + `"`
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ req := httptest.NewRequest("GET", "/"+encoded, nil)
+ req.Header.Set("If-None-Match", etag)
+ rr := httptest.NewRecorder()
+ imageProxyHandler(rr, req)
+ }
+}
+
+func benchmarkImageProxySize(b *testing.B, size int) {
+ data := make([]byte, size)
+ for i := range data {
+ data[i] = byte(i % 256)
+ }
+
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "image/jpeg")
+ w.Header().Set("Content-Length", fmt.Sprintf("%d", size))
+ w.Write(data)
+ }))
+ defer ts.Close()
+
+ encoded := base64.URLEncoding.EncodeToString([]byte(ts.URL + "/img.jpg"))
+
+ b.ResetTimer()
+ b.SetBytes(int64(size))
+ for i := 0; i < b.N; i++ {
+ req := httptest.NewRequest("GET", "/"+encoded, nil)
+ req.URL = &url.URL{Path: encoded}
+ rr := httptest.NewRecorder()
+ imageProxyHandler(rr, req)
+ }
+}
+
+func BenchmarkImageProxy_1KB(b *testing.B) { benchmarkImageProxySize(b, 1<<10) }
+func BenchmarkImageProxy_64KB(b *testing.B) { benchmarkImageProxySize(b, 64<<10) }
+func BenchmarkImageProxy_1MB(b *testing.B) { benchmarkImageProxySize(b, 1<<20) }
+func BenchmarkImageProxy_5MB(b *testing.B) { benchmarkImageProxySize(b, 5<<20) }