diff --git a/bench_test.go b/bench_test.go index b6e3721..92815cc 100644 --- a/bench_test.go +++ b/bench_test.go @@ -20,69 +20,90 @@ 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() for i := 0; i < b.N; i++ { + clear(res.header) testHandler.ServeHTTP(res, req) } } 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() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) handler.ServeHTTP(res, req) } } 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) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) handler.ServeHTTP(res, req) } } 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(headerOrigin, dummyOrigin) + req.Header.Add(headerACRM, http.MethodGet) handler := Default().Handler(testHandler) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { + clear(res.header) handler.ServeHTTP(res, req) } } 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(headerOrigin, dummyOrigin) + req.Header.Add(headerACRM, http.MethodGet) + req.Header.Add(headerACRH, "Accept") handler := Default().Handler(testHandler) 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) + } +}