diff options
author | 2017-08-23 14:07:10 +0100 | |
---|---|---|
committer | 2017-08-23 14:07:10 +0100 | |
commit | 4b105c761e77873405e40730b07a935eec7cad80 (patch) | |
tree | d64cb19b1d37218119e9e626b2b57f60b8063535 /middleware/kubernetes | |
parent | 61fc672e1939df3dd365c9d836427d8eec1e5e7d (diff) | |
download | coredns-4b105c761e77873405e40730b07a935eec7cad80.tar.gz coredns-4b105c761e77873405e40730b07a935eec7cad80.tar.zst coredns-4b105c761e77873405e40730b07a935eec7cad80.zip |
Parse fix (#974)
* mw/kubernetes: add apex test
This adds small test case for apex queries: SOA and HINFO.
Fix (obvious) parse bug in parse.go.
* Test Ns request also here
Diffstat (limited to 'middleware/kubernetes')
-rw-r--r-- | middleware/kubernetes/kubernetes_apex_test.go | 68 | ||||
-rw-r--r-- | middleware/kubernetes/parse.go | 3 |
2 files changed, 71 insertions, 0 deletions
diff --git a/middleware/kubernetes/kubernetes_apex_test.go b/middleware/kubernetes/kubernetes_apex_test.go new file mode 100644 index 000000000..9a87a790a --- /dev/null +++ b/middleware/kubernetes/kubernetes_apex_test.go @@ -0,0 +1,68 @@ +package kubernetes + +import ( + "testing" + + "github.com/coredns/coredns/middleware/pkg/dnsrecorder" + "github.com/coredns/coredns/middleware/test" + + "github.com/miekg/dns" + "golang.org/x/net/context" +) + +var kubeApexCases = [](test.Case){ + { + Qname: "cluster.local.", Qtype: dns.TypeSOA, + Rcode: dns.RcodeSuccess, + Answer: []dns.RR{ + test.SOA("cluster.local. 303 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), + }, + }, + { + Qname: "cluster.local.", Qtype: dns.TypeHINFO, + Rcode: dns.RcodeSuccess, + Ns: []dns.RR{ + test.SOA("cluster.local. 303 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), + }, + }, + { + Qname: "cluster.local.", Qtype: dns.TypeNS, + Rcode: dns.RcodeSuccess, + Answer: []dns.RR{ + test.NS("cluster.local. 303 IN NS ns.dns.cluster.local."), + }, + Extra: []dns.RR{ + test.A("ns.dns.cluster.local. 303 IN A 127.0.0.1"), + }, + }, +} + +func TestServeDNSApex(t *testing.T) { + + k := New([]string{"cluster.local."}) + k.APIConn = &APIConnServeTest{} + k.Next = test.NextHandler(dns.RcodeSuccess, nil) + ctx := context.TODO() + + for i, tc := range kubeApexCases { + r := tc.Msg() + + w := dnsrecorder.New(&test.ResponseWriter{}) + + _, err := k.ServeDNS(ctx, w, r) + if err != tc.Error { + t.Errorf("Test %d, expected no error, got %v\n", i, err) + return + } + if tc.Error != nil { + continue + } + + resp := w.Msg + if resp == nil { + t.Fatalf("Test %d, got nil message and no error ford", i) + } + + test.SortAndCheck(t, resp, tc) + } +} diff --git a/middleware/kubernetes/parse.go b/middleware/kubernetes/parse.go index cadaaa3a1..f2a846552 100644 --- a/middleware/kubernetes/parse.go +++ b/middleware/kubernetes/parse.go @@ -50,6 +50,9 @@ func parseRequest(state request.Request) (r recordRequest, err error) { // *_protocol._port last := len(segs) - 1 + if last < 0 { + return r, nil + } r.podOrSvc = segs[last] if r.podOrSvc != Pod && r.podOrSvc != Svc { return r, errInvalidRequest |