diff options
Diffstat (limited to 'plugin/reverse/reverse_test.go')
-rw-r--r-- | plugin/reverse/reverse_test.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/plugin/reverse/reverse_test.go b/plugin/reverse/reverse_test.go new file mode 100644 index 000000000..c7a7fea6c --- /dev/null +++ b/plugin/reverse/reverse_test.go @@ -0,0 +1,71 @@ +package reverse + +import ( + "net" + "regexp" + "testing" + + "github.com/coredns/coredns/plugin" + "github.com/coredns/coredns/plugin/pkg/dnsrecorder" + "github.com/coredns/coredns/plugin/test" + + "github.com/miekg/dns" + "golang.org/x/net/context" +) + +func TestReverse(t *testing.T) { + _, net4, _ := net.ParseCIDR("10.1.1.0/24") + regexIP4, _ := regexp.Compile("^.*ip-" + regexMatchV4 + "\\.example\\.org\\.$") + + em := Reverse{ + Networks: networks{network{ + IPnet: net4, + Zone: "example.org", + Template: "ip-{ip}.example.org.", + RegexMatchIP: regexIP4, + }}, + Fallthrough: false, + } + + tests := []struct { + next plugin.Handler + qname string + qtype uint16 + expectedCode int + expectedReply string + expectedErr error + }{ + { + next: test.NextHandler(dns.RcodeSuccess, nil), + qname: "test.ip-10.1.1.2.example.org", + expectedCode: dns.RcodeSuccess, + expectedReply: "10.1.1.2", + expectedErr: nil, + }, + } + + ctx := context.TODO() + + for i, tr := range tests { + req := new(dns.Msg) + + tr.qtype = dns.TypeA + req.SetQuestion(dns.Fqdn(tr.qname), tr.qtype) + + rec := dnsrecorder.New(&test.ResponseWriter{}) + code, err := em.ServeDNS(ctx, rec, req) + + if err != tr.expectedErr { + t.Errorf("Test %d: Expected error %v, but got %v", i, tr.expectedErr, err) + } + if code != int(tr.expectedCode) { + t.Errorf("Test %d: Expected status code %d, but got %d", i, tr.expectedCode, code) + } + if tr.expectedReply != "" { + answer := rec.Msg.Answer[0].(*dns.A).A.String() + if answer != tr.expectedReply { + t.Errorf("Test %d: Expected answer %s, but got %s", i, tr.expectedReply, answer) + } + } + } +} |