1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
package response
import (
"testing"
"time"
"github.com/coredns/coredns/plugin/test"
"github.com/miekg/dns"
)
func TestTypifyNilMsg(t *testing.T) {
var m *dns.Msg
ty, _ := Typify(m, time.Now().UTC())
if ty != OtherError {
t.Errorf("Message wrongly typified, expected OtherError, got %s", ty)
}
}
func TestTypifyDelegation(t *testing.T) {
m := delegationMsg()
mt, _ := Typify(m, time.Now().UTC())
if mt != Delegation {
t.Errorf("Message is wrongly typified, expected Delegation, got %s", mt)
}
}
func TestTypifyRRSIG(t *testing.T) {
now, _ := time.Parse(time.UnixDate, "Fri Apr 21 10:51:21 BST 2017")
utc := now.UTC()
m := delegationMsgRRSIGOK()
if mt, _ := Typify(m, utc); mt != Delegation {
t.Errorf("Message is wrongly typified, expected Delegation, got %s", mt)
}
// Still a Delegation because EDNS0 OPT DO bool is not set, so we won't check the sigs.
m = delegationMsgRRSIGFail()
if mt, _ := Typify(m, utc); mt != Delegation {
t.Errorf("Message is wrongly typified, expected Delegation, got %s", mt)
}
m = delegationMsgRRSIGFail()
m.Extra = append(m.Extra, test.OPT(4096, true))
if mt, _ := Typify(m, utc); mt != OtherError {
t.Errorf("Message is wrongly typified, expected OtherError, got %s", mt)
}
}
func TestTypifyImpossible(t *testing.T) {
// create impossible message that denies its own existence
m := new(dns.Msg)
m.SetQuestion("bar.www.example.org.", dns.TypeAAAA)
m.Rcode = dns.RcodeNameError // name does not exist
m.Answer = []dns.RR{test.CNAME("bar.www.example.org. IN CNAME foo.example.org.")} // but we add a cname with the name!
mt, _ := Typify(m, time.Now().UTC())
if mt != OtherError {
t.Errorf("Impossible message not typified as OtherError, got %s", mt)
}
}
func TestTypifyRefused(t *testing.T) {
m := new(dns.Msg)
m.SetQuestion("foo.example.org.", dns.TypeA)
m.Rcode = dns.RcodeRefused
mt, _ := Typify(m, time.Now().UTC())
if mt != OtherError {
t.Errorf("Refused message not typified as OtherError, got %s", mt)
}
}
func delegationMsg() *dns.Msg {
return &dns.Msg{
Ns: []dns.RR{
test.NS("miek.nl. 3600 IN NS linode.atoom.net."),
test.NS("miek.nl. 3600 IN NS ns-ext.nlnetlabs.nl."),
test.NS("miek.nl. 3600 IN NS omval.tednet.nl."),
},
Extra: []dns.RR{
test.A("omval.tednet.nl. 3600 IN A 185.49.141.42"),
test.AAAA("omval.tednet.nl. 3600 IN AAAA 2a04:b900:0:100::42"),
},
}
}
func delegationMsgRRSIGOK() *dns.Msg {
del := delegationMsg()
del.Ns = append(del.Ns,
test.RRSIG("miek.nl. 1800 IN RRSIG NS 8 2 1800 20170521031301 20170421031301 12051 miek.nl. PIUu3TKX/sB/N1n1E1yWxHHIcPnc2q6Wq9InShk+5ptRqChqKdZNMLDm gCq+1bQAZ7jGvn2PbwTwE65JzES7T+hEiqR5PU23DsidvZyClbZ9l0xG JtKwgzGXLtUHxp4xv/Plq+rq/7pOG61bNCxRyS7WS7i7QcCCWT1BCcv+ wZ0="),
)
return del
}
func delegationMsgRRSIGFail() *dns.Msg {
del := delegationMsg()
del.Ns = append(del.Ns,
test.RRSIG("miek.nl. 1800 IN RRSIG NS 8 2 1800 20160521031301 20160421031301 12051 miek.nl. PIUu3TKX/sB/N1n1E1yWxHHIcPnc2q6Wq9InShk+5ptRqChqKdZNMLDm gCq+1bQAZ7jGvn2PbwTwE65JzES7T+hEiqR5PU23DsidvZyClbZ9l0xG JtKwgzGXLtUHxp4xv/Plq+rq/7pOG61bNCxRyS7WS7i7QcCCWT1BCcv+ wZ0="),
)
return del
}
|