1 package bdns
2
3 import (
4 "context"
5 "errors"
6 "net"
7 "testing"
8
9 "github.com/letsencrypt/boulder/test"
10 "github.com/miekg/dns"
11 )
12
13 func TestError(t *testing.T) {
14 testCases := []struct {
15 err error
16 expected string
17 }{
18 {
19 &Error{dns.TypeA, "hostname", makeTimeoutError(), -1, nil},
20 "DNS problem: query timed out looking up A for hostname",
21 }, {
22 &Error{dns.TypeMX, "hostname", &net.OpError{Err: errors.New("some net error")}, -1, nil},
23 "DNS problem: networking error looking up MX for hostname",
24 }, {
25 &Error{dns.TypeTXT, "hostname", nil, dns.RcodeNameError, nil},
26 "DNS problem: NXDOMAIN looking up TXT for hostname - check that a DNS record exists for this domain",
27 }, {
28 &Error{dns.TypeTXT, "hostname", context.DeadlineExceeded, -1, nil},
29 "DNS problem: query timed out looking up TXT for hostname",
30 }, {
31 &Error{dns.TypeTXT, "hostname", context.Canceled, -1, nil},
32 "DNS problem: query timed out (and was canceled) looking up TXT for hostname",
33 }, {
34 &Error{dns.TypeCAA, "hostname", nil, dns.RcodeServerFailure, nil},
35 "DNS problem: SERVFAIL looking up CAA for hostname - the domain's nameservers may be malfunctioning",
36 }, {
37 &Error{dns.TypeA, "hostname", nil, dns.RcodeServerFailure, &dns.EDNS0_EDE{InfoCode: 1, ExtraText: "oh no"}},
38 "DNS problem: looking up A for hostname: DNSSEC: Unsupported DNSKEY Algorithm: oh no",
39 }, {
40 &Error{dns.TypeA, "hostname", nil, dns.RcodeServerFailure, &dns.EDNS0_EDE{InfoCode: 6, ExtraText: ""}},
41 "DNS problem: looking up A for hostname: DNSSEC: Bogus",
42 }, {
43 &Error{dns.TypeA, "hostname", nil, dns.RcodeServerFailure, &dns.EDNS0_EDE{InfoCode: 1337, ExtraText: "mysterious"}},
44 "DNS problem: looking up A for hostname: Unknown Extended DNS Error code 1337: mysterious",
45 }, {
46 &Error{dns.TypeCAA, "hostname", nil, dns.RcodeServerFailure, nil},
47 "DNS problem: SERVFAIL looking up CAA for hostname - the domain's nameservers may be malfunctioning",
48 }, {
49 &Error{dns.TypeCAA, "hostname", nil, dns.RcodeServerFailure, nil},
50 "DNS problem: SERVFAIL looking up CAA for hostname - the domain's nameservers may be malfunctioning",
51 }, {
52 &Error{dns.TypeA, "hostname", nil, dns.RcodeFormatError, nil},
53 "DNS problem: FORMERR looking up A for hostname",
54 },
55 }
56 for _, tc := range testCases {
57 if tc.err.Error() != tc.expected {
58 t.Errorf("got %q, expected %q", tc.err.Error(), tc.expected)
59 }
60 }
61 }
62
63 func TestWrapErr(t *testing.T) {
64 err := wrapErr(dns.TypeA, "hostname", &dns.Msg{
65 MsgHdr: dns.MsgHdr{Rcode: dns.RcodeSuccess},
66 }, nil)
67 test.AssertNotError(t, err, "expected success")
68
69 err = wrapErr(dns.TypeA, "hostname", &dns.Msg{
70 MsgHdr: dns.MsgHdr{Rcode: dns.RcodeRefused},
71 }, nil)
72 test.AssertError(t, err, "expected error")
73
74 err = wrapErr(dns.TypeA, "hostname", &dns.Msg{
75 MsgHdr: dns.MsgHdr{Rcode: dns.RcodeSuccess},
76 }, errors.New("oh no"))
77 test.AssertError(t, err, "expected error")
78 }
79
View as plain text