1package dns
2
3import "testing"
4
5func TestDotAsCatchAllWildcard(t *testing.T) {
6	mux := NewServeMux()
7	mux.Handle(".", HandlerFunc(HelloServer))
8	mux.Handle("example.com.", HandlerFunc(AnotherHelloServer))
9
10	handler := mux.match("www.miek.nl.", TypeTXT)
11	if handler == nil {
12		t.Error("wildcard match failed")
13	}
14
15	handler = mux.match("www.example.com.", TypeTXT)
16	if handler == nil {
17		t.Error("example.com match failed")
18	}
19
20	handler = mux.match("a.www.example.com.", TypeTXT)
21	if handler == nil {
22		t.Error("a.www.example.com match failed")
23	}
24
25	handler = mux.match("boe.", TypeTXT)
26	if handler == nil {
27		t.Error("boe. match failed")
28	}
29}
30
31func TestCaseFolding(t *testing.T) {
32	mux := NewServeMux()
33	mux.Handle("_udp.example.com.", HandlerFunc(HelloServer))
34
35	handler := mux.match("_dns._udp.example.com.", TypeSRV)
36	if handler == nil {
37		t.Error("case sensitive characters folded")
38	}
39
40	handler = mux.match("_DNS._UDP.EXAMPLE.COM.", TypeSRV)
41	if handler == nil {
42		t.Error("case insensitive characters not folded")
43	}
44}
45
46func TestRootServer(t *testing.T) {
47	mux := NewServeMux()
48	mux.Handle(".", HandlerFunc(HelloServer))
49
50	handler := mux.match(".", TypeNS)
51	if handler == nil {
52		t.Error("root match failed")
53	}
54}
55
56func BenchmarkMuxMatch(b *testing.B) {
57	mux := NewServeMux()
58	mux.Handle("_udp.example.com.", HandlerFunc(HelloServer))
59
60	bench := func(q string) func(*testing.B) {
61		return func(b *testing.B) {
62			for n := 0; n < b.N; n++ {
63				handler := mux.match(q, TypeSRV)
64				if handler == nil {
65					b.Fatal("couldn't find match")
66				}
67			}
68		}
69	}
70	b.Run("lowercase", bench("_dns._udp.example.com."))
71	b.Run("uppercase", bench("_DNS._UDP.EXAMPLE.COM."))
72}
73