1package cors
2
3import (
4	"strings"
5	"testing"
6)
7
8func TestWildcard(t *testing.T) {
9	w := wildcard{"foo", "bar"}
10	if !w.match("foobar") {
11		t.Error("foo*bar should match foobar")
12	}
13	if !w.match("foobazbar") {
14		t.Error("foo*bar should match foobazbar")
15	}
16	if w.match("foobaz") {
17		t.Error("foo*bar should not match foobaz")
18	}
19
20	w = wildcard{"foo", "oof"}
21	if w.match("foof") {
22		t.Error("foo*oof should not match foof")
23	}
24}
25
26func TestConvert(t *testing.T) {
27	s := convert([]string{"A", "b", "C"}, strings.ToLower)
28	e := []string{"a", "b", "c"}
29	if s[0] != e[0] || s[1] != e[1] || s[2] != e[2] {
30		t.Errorf("%v != %v", s, e)
31	}
32}
33
34func TestParseHeaderList(t *testing.T) {
35	h := parseHeaderList("header, second-header, THIRD-HEADER, Numb3r3d-H34d3r")
36	e := []string{"Header", "Second-Header", "Third-Header", "Numb3r3d-H34d3r"}
37	if h[0] != e[0] || h[1] != e[1] || h[2] != e[2] {
38		t.Errorf("%v != %v", h, e)
39	}
40}
41
42func TestParseHeaderListEmpty(t *testing.T) {
43	if len(parseHeaderList("")) != 0 {
44		t.Error("should be empty sclice")
45	}
46	if len(parseHeaderList(" , ")) != 0 {
47		t.Error("should be empty sclice")
48	}
49}
50
51func BenchmarkParseHeaderList(b *testing.B) {
52	b.ReportAllocs()
53	for i := 0; i < b.N; i++ {
54		parseHeaderList("header, second-header, THIRD-HEADER")
55	}
56}
57
58func BenchmarkParseHeaderListSingle(b *testing.B) {
59	b.ReportAllocs()
60	for i := 0; i < b.N; i++ {
61		parseHeaderList("header")
62	}
63}
64
65func BenchmarkParseHeaderListNormalized(b *testing.B) {
66	b.ReportAllocs()
67	for i := 0; i < b.N; i++ {
68		parseHeaderList("Header1, Header2, Third-Header")
69	}
70}
71
72func BenchmarkWildcard(b *testing.B) {
73	w := wildcard{"foo", "bar"}
74	b.Run("match", func(b *testing.B) {
75		b.ReportAllocs()
76		for i := 0; i < b.N; i++ {
77			w.match("foobazbar")
78		}
79	})
80	b.Run("too short", func(b *testing.B) {
81		b.ReportAllocs()
82		for i := 0; i < b.N; i++ {
83			w.match("fobar")
84		}
85	})
86}
87