1package cors 2 3import ( 4 "net/http" 5 "testing" 6) 7 8type FakeResponse struct { 9 header http.Header 10} 11 12func (r FakeResponse) Header() http.Header { 13 return r.header 14} 15 16func (r FakeResponse) WriteHeader(n int) { 17} 18 19func (r FakeResponse) Write(b []byte) (n int, err error) { 20 return len(b), nil 21} 22 23func BenchmarkWithout(b *testing.B) { 24 res := FakeResponse{http.Header{}} 25 req, _ := http.NewRequest("GET", "http://example.com/foo", nil) 26 27 b.ReportAllocs() 28 b.ResetTimer() 29 for i := 0; i < b.N; i++ { 30 testHandler.ServeHTTP(res, req) 31 } 32} 33 34func BenchmarkDefault(b *testing.B) { 35 res := FakeResponse{http.Header{}} 36 req, _ := http.NewRequest("GET", "http://example.com/foo", nil) 37 req.Header.Add("Origin", "somedomain.com") 38 handler := Default().Handler(testHandler) 39 40 b.ReportAllocs() 41 b.ResetTimer() 42 for i := 0; i < b.N; i++ { 43 handler.ServeHTTP(res, req) 44 } 45} 46 47func BenchmarkAllowedOrigin(b *testing.B) { 48 res := FakeResponse{http.Header{}} 49 req, _ := http.NewRequest("GET", "http://example.com/foo", nil) 50 req.Header.Add("Origin", "somedomain.com") 51 c := New(Options{ 52 AllowedOrigins: []string{"somedomain.com"}, 53 }) 54 handler := c.Handler(testHandler) 55 56 b.ReportAllocs() 57 b.ResetTimer() 58 for i := 0; i < b.N; i++ { 59 handler.ServeHTTP(res, req) 60 } 61} 62 63func BenchmarkPreflight(b *testing.B) { 64 res := FakeResponse{http.Header{}} 65 req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil) 66 req.Header.Add("Access-Control-Request-Method", "GET") 67 handler := Default().Handler(testHandler) 68 69 b.ReportAllocs() 70 b.ResetTimer() 71 for i := 0; i < b.N; i++ { 72 handler.ServeHTTP(res, req) 73 } 74} 75 76func BenchmarkPreflightHeader(b *testing.B) { 77 res := FakeResponse{http.Header{}} 78 req, _ := http.NewRequest("OPTIONS", "http://example.com/foo", nil) 79 req.Header.Add("Access-Control-Request-Method", "GET") 80 req.Header.Add("Access-Control-Request-Headers", "Accept") 81 handler := Default().Handler(testHandler) 82 83 b.ReportAllocs() 84 b.ResetTimer() 85 for i := 0; i < b.N; i++ { 86 handler.ServeHTTP(res, req) 87 } 88} 89