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