diff options
author | 2017-01-15 03:12:28 -0500 | |
---|---|---|
committer | 2017-01-15 08:12:28 +0000 | |
commit | a6d232a622a2f83a5d5ea1d9d946da7f910a0f9e (patch) | |
tree | 187a9366c8515bf1d8f6d483476555ea4f9897b8 /middleware/kubernetes/kubernetes_test.go | |
parent | b6a2a5aeaa0811199c6206eb87893eaa2298ae95 (diff) | |
download | coredns-a6d232a622a2f83a5d5ea1d9d946da7f910a0f9e.tar.gz coredns-a6d232a622a2f83a5d5ea1d9d946da7f910a0f9e.tar.zst coredns-a6d232a622a2f83a5d5ea1d9d946da7f910a0f9e.zip |
dont require/allow "_" prefix for srv wildcard fields (#472)
* dont require/allow "_" prefix for srv wildcard fields
* streamline parse/validation of req name
* removing nametemplate
* error when zone not found, loopify unit tests
Diffstat (limited to 'middleware/kubernetes/kubernetes_test.go')
-rw-r--r-- | middleware/kubernetes/kubernetes_test.go | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/middleware/kubernetes/kubernetes_test.go b/middleware/kubernetes/kubernetes_test.go index 53404ecf5..f7529a1d5 100644 --- a/middleware/kubernetes/kubernetes_test.go +++ b/middleware/kubernetes/kubernetes_test.go @@ -1,6 +1,7 @@ package kubernetes import "testing" +import "reflect" // Test data for TestSymbolContainsWildcard cases. var testdataSymbolContainsWildcard = []struct { @@ -23,3 +24,114 @@ func TestSymbolContainsWildcard(t *testing.T) { } } } + +func expectString(t *testing.T, function, qtype, query string, r *recordRequest, field, expected string) { + ref := reflect.ValueOf(r) + ref_f := reflect.Indirect(ref).FieldByName(field) + got := ref_f.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 + + k := Kubernetes{Zones: []string{"inter.webs.test"}} + f := "parseRequest" + + // Test a valid SRV request + // + query := "_http._tcp.webs.mynamespace.svc.inter.webs.test." + r, e := k.parseRequest(query, "SRV") + 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", + "typeName": "svc", + "zone": "inter.webs.test", + } + 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, "SRV") + 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", + "typeName": "svc", + "zone": "inter.webs.test", + } + 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, "A") + 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", + "typeName": "svc", + "zone": "inter.webs.test", + } + for field, expected := range tcs { + expectString(t, f, "A", query, &r, field, expected) + } + + // Invalid query tests + // + + invalidAQueries := []string{ + "_http._tcp.webs.mynamespace.svc.inter.webs.test.", // A requests cannot have port or protocol + "servname.ns1.srv.inter.nets.test.", // A requests must have zone that matches corefile + + } + for _, q := range invalidAQueries { + _, e = k.parseRequest(q, "A") + if e == nil { + t.Errorf("Expected error from %v(\"%v\", \"A\").", f, q) + } + } + + invalidSRVQueries := []string{ + "webs.mynamespace.svc.inter.webs.test.", // SRV requests must have port and protocol + "_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 + "_http._tcp", + "_tcp.test.", + ".", + } + + for _, q := range invalidSRVQueries { + _, e = k.parseRequest(q, "SRV") + if e == nil { + t.Errorf("Expected error from %v(\"%v\", \"SRV\").", f, q) + } + } +} |