From b86799bc1341c88e29cffb2c84619dfb75931641 Mon Sep 17 00:00:00 2001 From: jub0bs Date: Wed, 2 Aug 2023 13:49:38 +0200 Subject: [PATCH 1/3] Use constants where possible in benchmarks --- bench_test.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/bench_test.go b/bench_test.go index b6e3721..ae8c9b1 100644 --- a/bench_test.go +++ b/bench_test.go @@ -20,9 +20,17 @@ func (r FakeResponse) Write(b []byte) (n int, err error) { return len(b), nil } +const ( + headerOrigin = "Origin" + headerACRM = "Access-Control-Request-Method" + headerACRH = "Access-Control-Request-Headers" + dummyEndpoint = "http://example.com/foo" + dummyOrigin = "https://somedomain.com" +) + func BenchmarkWithout(b *testing.B) { res := FakeResponse{http.Header{}} - req, _ := http.NewRequest("GET", "http://example.com/foo", nil) + req, _ := http.NewRequest(http.MethodGet, dummyEndpoint, nil) b.ReportAllocs() b.ResetTimer() @@ -33,8 +41,8 @@ func BenchmarkWithout(b *testing.B) { func BenchmarkDefault(b *testing.B) { res := FakeResponse{http.Header{}} - req, _ := http.NewRequest("GET", "http://example.com/foo", nil) - req.Header.Add("Origin", "somedomain.com") + req, _ := http.NewRequest(http.MethodGet, dummyEndpoint, nil) + req.Header.Add(headerOrigin, dummyOrigin) handler := Default().Handler(testHandler) b.ReportAllocs() @@ -46,10 +54,10 @@ func BenchmarkDefault(b *testing.B) { func BenchmarkAllowedOrigin(b *testing.B) { res := FakeResponse{http.Header{}} - req, _ := http.NewRequest("GET", "http://example.com/foo", nil) - req.Header.Add("Origin", "somedomain.com") + req, _ := http.NewRequest(http.MethodGet, dummyEndpoint, nil) + req.Header.Add(headerOrigin, dummyOrigin) c := New(Options{ - AllowedOrigins: []string{"somedomain.com"}, + AllowedOrigins: []string{dummyOrigin}, }) handler := c.Handler(testHandler) @@ -62,8 +70,8 @@ func BenchmarkAllowedOrigin(b *testing.B) { func BenchmarkPreflight(b *testing.B) { res := FakeResponse{http.Header{}} - req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil) - req.Header.Add("Access-Control-Request-Method", "GET") + req, _ := http.NewRequest(http.MethodOptions, dummyEndpoint, nil) + req.Header.Add(headerACRM, http.MethodGet) handler := Default().Handler(testHandler) b.ReportAllocs() @@ -75,9 +83,9 @@ func BenchmarkPreflight(b *testing.B) { func BenchmarkPreflightHeader(b *testing.B) { res := FakeResponse{http.Header{}} - req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil) - req.Header.Add("Access-Control-Request-Method", "GET") - req.Header.Add("Access-Control-Request-Headers", "Accept") + req, _ := http.NewRequest(http.MethodOptions, dummyEndpoint, nil) + req.Header.Add(headerACRM, http.MethodGet) + req.Header.Add(headerACRH, "Accept") handler := Default().Handler(testHandler) b.ReportAllocs() From 29471d6ad21b0d3dc517fcc4c016e600fb27863b Mon Sep 17 00:00:00 2001 From: jub0bs Date: Wed, 2 Aug 2023 13:51:18 +0200 Subject: [PATCH 2/3] Add missing Origin to preflights in benchmarks --- bench_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bench_test.go b/bench_test.go index ae8c9b1..381f3e1 100644 --- a/bench_test.go +++ b/bench_test.go @@ -71,6 +71,7 @@ func BenchmarkAllowedOrigin(b *testing.B) { func BenchmarkPreflight(b *testing.B) { res := FakeResponse{http.Header{}} req, _ := http.NewRequest(http.MethodOptions, dummyEndpoint, nil) + req.Header.Add(headerOrigin, dummyOrigin) req.Header.Add(headerACRM, http.MethodGet) handler := Default().Handler(testHandler) @@ -84,6 +85,7 @@ func BenchmarkPreflight(b *testing.B) { func BenchmarkPreflightHeader(b *testing.B) { res := FakeResponse{http.Header{}} req, _ := http.NewRequest(http.MethodOptions, dummyEndpoint, nil) + req.Header.Add(headerOrigin, dummyOrigin) req.Header.Add(headerACRM, http.MethodGet) req.Header.Add(headerACRH, "Accept") handler := Default().Handler(testHandler) From b6207e9a080275926541961c7bf883e9246a18e1 Mon Sep 17 00:00:00 2001 From: jub0bs Date: Wed, 2 Aug 2023 13:54:19 +0200 Subject: [PATCH 3/3] Clear headers of shared response in benchmarks --- bench_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bench_test.go b/bench_test.go index 381f3e1..92815cc 100644 --- a/bench_test.go +++ b/bench_test.go @@ -35,6 +35,7 @@ func BenchmarkWithout(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) testHandler.ServeHTTP(res, req) } } @@ -48,6 +49,7 @@ func BenchmarkDefault(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) handler.ServeHTTP(res, req) } } @@ -64,6 +66,7 @@ func BenchmarkAllowedOrigin(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) handler.ServeHTTP(res, req) } } @@ -78,6 +81,7 @@ func BenchmarkPreflight(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) handler.ServeHTTP(res, req) } } @@ -93,6 +97,13 @@ func BenchmarkPreflightHeader(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) handler.ServeHTTP(res, req) } } + +func clear(h http.Header) { + for k := range h { + delete(h, k) + } +}