diff options
author | 2017-08-10 02:23:27 -0700 | |
---|---|---|
committer | 2017-08-10 02:23:27 -0700 | |
commit | 28447234b164a990c7007158422cbad42d1ff855 (patch) | |
tree | 785cb926bfd5d657818c44f78c13af4e3a4c473b /middleware/kubernetes | |
parent | 7e56cc74e5420bfc1670ddf858420909fdaf3fee (diff) | |
download | coredns-28447234b164a990c7007158422cbad42d1ff855.tar.gz coredns-28447234b164a990c7007158422cbad42d1ff855.tar.zst coredns-28447234b164a990c7007158422cbad42d1ff855.zip |
mw/kubernetes: fix parseTests (#875)
* mw/kubernetes: fix parseTests
Make parse tests table driven to remove a duplicate code, i.e. most
of the contents of parse_test.go can be removed as well as the
expectString helper function.
* cleanup parse tests
Diffstat (limited to 'middleware/kubernetes')
-rw-r--r-- | middleware/kubernetes/parse_test.go | 158 |
1 files changed, 47 insertions, 111 deletions
diff --git a/middleware/kubernetes/parse_test.go b/middleware/kubernetes/parse_test.go index 06c3711cd..164bf295e 100644 --- a/middleware/kubernetes/parse_test.go +++ b/middleware/kubernetes/parse_test.go @@ -1,131 +1,67 @@ package kubernetes import ( - "reflect" "testing" "github.com/miekg/dns" ) -func expectString(t *testing.T, function, qtype, query string, r *recordRequest, field, expected string) { - ref := reflect.ValueOf(r) - refField := reflect.Indirect(ref).FieldByName(field) - got := refField.String() - if got != expected { - t.Errorf("Expected %v(%v, \"%v\") to get %v == \"%v\". Instead got \"%v\".", function, query, qtype, field, expected, got) - } -} - func TestParseRequest(t *testing.T) { - - var tcs map[string]string - - zone := "intern.webs.tests." k := Kubernetes{Zones: []string{zone}} - f := "parseRequest" - - // Test a valid SRV request - // - query := "_http._tcp.webs.mynamespace.svc.inter.webs.test." - r, e := k.parseRequest(query, dns.TypeSRV, zone) - if e != nil { - t.Errorf("Expected no error from parseRequest(%v, \"SRV\"). Instead got '%v'.", query, e) - } - - tcs = map[string]string{ - "port": "http", - "protocol": "tcp", - "endpoint": "", - "service": "webs", - "namespace": "mynamespace", - "podOrSvc": Svc, - "zone": zone, - } - for field, expected := range tcs { - expectString(t, f, "SRV", query, &r, field, expected) - } - - // Test wildcard acceptance - // - query = "*.any.*.any.svc.inter.webs.test." - r, e = k.parseRequest(query, dns.TypeSRV, zone) - if e != nil { - t.Errorf("Expected no error from parseRequest(\"%v\", \"SRV\"). Instead got '%v'.", query, e) - } - - tcs = map[string]string{ - "port": "*", - "protocol": "any", - "endpoint": "", - "service": "*", - "namespace": "any", - "podOrSvc": Svc, - "zone": zone, - } - for field, expected := range tcs { - expectString(t, f, "SRV", query, &r, field, expected) - } - // Test A request of endpoint - query = "1-2-3-4.webs.mynamespace.svc.inter.webs.test." - r, e = k.parseRequest(query, dns.TypeA, zone) - if e != nil { - t.Errorf("Expected no error from parseRequest(\"%v\", \"A\"). Instead got '%v'.", query, e) - } - tcs = map[string]string{ - "port": "", - "protocol": "", - "endpoint": "1-2-3-4", - "service": "webs", - "namespace": "mynamespace", - "podOrSvc": Svc, - "zone": zone, - } - for field, expected := range tcs { - expectString(t, f, "A", query, &r, field, expected) - } - - // Test NS request - query = "inter.webs.test." - r, e = k.parseRequest(query, dns.TypeNS, zone) - if e != nil { - t.Errorf("Expected no error from parseRequest(\"%v\", \"NS\"). Instead got '%v'.", query, e) - } - tcs = map[string]string{ - "port": "", - "protocol": "", - "endpoint": "", - "service": "", - "namespace": "", - "podOrSvc": "", - "zone": zone, - } - for field, expected := range tcs { - expectString(t, f, "NS", query, &r, field, expected) + tests := []struct { + query string + qtype uint16 + expected string // output from r.String() + }{ + { + // valid SRV request + "_http._tcp.webs.mynamespace.svc.inter.webs.test.", dns.TypeSRV, + "http.tcp..webs.mynamespace.svc.intern.webs.tests..", + }, + { + // wildcard acceptance + "*.any.*.any.svc.inter.webs.test.", dns.TypeSRV, + "*.any..*.any.svc.intern.webs.tests..", + }, + { + // A request of endpoint + "1-2-3-4.webs.mynamespace.svc.inter.webs.test.", dns.TypeA, + "..1-2-3-4.webs.mynamespace.svc.intern.webs.tests..", + }, + { + "inter.webs.test.", dns.TypeNS, + "......intern.webs.tests..", + }, + } + for i, tc := range tests { + r, e := k.parseRequest(tc.query, tc.qtype, zone) + if e != nil { + t.Errorf("Test %d, expected no error, got '%v'.", i, e) + } + rs := r.String() + if rs != tc.expected { + t.Errorf("Test %d, expected (stringyfied) recordRequest: %s, got %s", i, tc.expected, rs) + } } +} - // Invalid query tests - invalidAQueries := []string{ - "_http._tcp.webs.mynamespace.svc.inter.webs.test.", // A requests cannot have port or protocol TODO(miek): this must return NODATA +func TestParseInvalidRequest(t *testing.T) { + k := Kubernetes{Zones: []string{zone}} - } - for _, q := range invalidAQueries { - _, e = k.parseRequest(q, dns.TypeA, zone) - if e == nil { - t.Errorf("Expected error from %v(\"%v\", \"A\").", f, q) - } - } + invalid := map[string]uint16{ + "_http._tcp.webs.mynamespace.svc.inter.webs.test.": dns.TypeA, // A requests cannot have port or protocol + "_http._pcp.webs.mynamespace.svc.inter.webs.test.": dns.TypeSRV, // SRV protocol must be tcp or udp + "_http._tcp.ep.webs.ns.svc.inter.webs.test.": dns.TypeSRV, // SRV requests cannot have an endpoint + "_*._*.webs.mynamespace.svc.inter.webs.test.": dns.TypeSRV, // SRV request with invalid wildcards - invalidSRVQueries := []string{ - "_http._pcp.webs.mynamespace.svc.inter.webs.test.", // SRV protocol must be tcp or udp - "_http._tcp.ep.webs.ns.svc.inter.webs.test.", // SRV requests cannot have an endpoint - "_*._*.webs.mynamespace.svc.inter.webs.test.", // SRV request with invalid wildcards } - for _, q := range invalidSRVQueries { - _, e = k.parseRequest(q, dns.TypeSRV, zone) - if e == nil { - t.Errorf("Expected error from %v(\"%v\", \"SRV\").", f, q) + for query, qtype := range invalid { + if _, e := k.parseRequest(query, qtype, zone); e == nil { + t.Errorf("Expected error from %s:%d, got none", query, qtype) } } } + +const zone = "intern.webs.tests." |