aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/kubernetes_test.go
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2017-01-15 03:12:28 -0500
committerGravatar Miek Gieben <miek@miek.nl> 2017-01-15 08:12:28 +0000
commita6d232a622a2f83a5d5ea1d9d946da7f910a0f9e (patch)
tree187a9366c8515bf1d8f6d483476555ea4f9897b8 /middleware/kubernetes/kubernetes_test.go
parentb6a2a5aeaa0811199c6206eb87893eaa2298ae95 (diff)
downloadcoredns-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.go112
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)
+ }
+ }
+}