Skip to content

Commit

Permalink
Fix skewed middleware benchmarks (#156)
Browse files Browse the repository at this point in the history
* Use constants where possible in benchmarks

* Add missing Origin to preflights in benchmarks

* Clear headers of shared response in benchmarks
  • Loading branch information
jub0bs committed Aug 2, 2023
1 parent e90f167 commit 066574e
Showing 1 changed file with 32 additions and 11 deletions.
43 changes: 32 additions & 11 deletions bench_test.go
Expand Up @@ -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)
}
}

0 comments on commit 066574e

Please sign in to comment.