1package dns
2
3import "testing"
4
5func TestDedup(t *testing.T) {
6	testcases := map[[3]RR][]string{
7		[...]RR{
8			testRR("mIek.nl. IN A 127.0.0.1"),
9			testRR("mieK.nl. IN A 127.0.0.1"),
10			testRR("miek.Nl. IN A 127.0.0.1"),
11		}: {"mIek.nl.\t3600\tIN\tA\t127.0.0.1"},
12		[...]RR{
13			testRR("miEk.nl. 2000 IN A 127.0.0.1"),
14			testRR("mieK.Nl. 1000 IN A 127.0.0.1"),
15			testRR("Miek.nL. 500 IN A 127.0.0.1"),
16		}: {"miEk.nl.\t500\tIN\tA\t127.0.0.1"},
17		[...]RR{
18			testRR("miek.nl. IN A 127.0.0.1"),
19			testRR("miek.nl. CH A 127.0.0.1"),
20			testRR("miek.nl. IN A 127.0.0.1"),
21		}: {"miek.nl.\t3600\tIN\tA\t127.0.0.1",
22			"miek.nl.\t3600\tCH\tA\t127.0.0.1",
23		},
24		[...]RR{
25			testRR("miek.nl. CH A 127.0.0.1"),
26			testRR("miek.nl. IN A 127.0.0.1"),
27			testRR("miek.de. IN A 127.0.0.1"),
28		}: {"miek.nl.\t3600\tCH\tA\t127.0.0.1",
29			"miek.nl.\t3600\tIN\tA\t127.0.0.1",
30			"miek.de.\t3600\tIN\tA\t127.0.0.1",
31		},
32		[...]RR{
33			testRR("miek.de. IN A 127.0.0.1"),
34			testRR("miek.nl. 200 IN A 127.0.0.1"),
35			testRR("miek.nl. 300 IN A 127.0.0.1"),
36		}: {"miek.de.\t3600\tIN\tA\t127.0.0.1",
37			"miek.nl.\t200\tIN\tA\t127.0.0.1",
38		},
39	}
40
41	for rr, expected := range testcases {
42		out := Dedup([]RR{rr[0], rr[1], rr[2]}, nil)
43		for i, o := range out {
44			if o.String() != expected[i] {
45				t.Fatalf("expected %v, got %v", expected[i], o.String())
46			}
47		}
48	}
49}
50
51func BenchmarkDedup(b *testing.B) {
52	rrs := []RR{
53		testRR("miEk.nl. 2000 IN A 127.0.0.1"),
54		testRR("mieK.Nl. 1000 IN A 127.0.0.1"),
55		testRR("Miek.nL. 500 IN A 127.0.0.1"),
56	}
57	m := make(map[string]RR)
58	for i := 0; i < b.N; i++ {
59		Dedup(rrs, m)
60	}
61}
62
63func TestNormalizedString(t *testing.T) {
64	tests := map[RR]string{
65		testRR("mIEk.Nl. 3600 IN A 127.0.0.1"):     "miek.nl.\tIN\tA\t127.0.0.1",
66		testRR("m\\ iek.nL. 3600 IN A 127.0.0.1"):  "m\\ iek.nl.\tIN\tA\t127.0.0.1",
67		testRR("m\\\tIeK.nl. 3600 in A 127.0.0.1"): "m\\009iek.nl.\tIN\tA\t127.0.0.1",
68	}
69	for tc, expected := range tests {
70		n := normalizedString(tc)
71		if n != expected {
72			t.Errorf("expected %s, got %s", expected, n)
73		}
74	}
75}
76