aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/kubernetes_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--middleware/kubernetes/kubernetes_test.go183
1 files changed, 164 insertions, 19 deletions
diff --git a/middleware/kubernetes/kubernetes_test.go b/middleware/kubernetes/kubernetes_test.go
index 2b83aaecf..4f748565a 100644
--- a/middleware/kubernetes/kubernetes_test.go
+++ b/middleware/kubernetes/kubernetes_test.go
@@ -1,22 +1,95 @@
package kubernetes
-import "testing"
-import "reflect"
-
-// Test data for TestSymbolContainsWildcard cases.
-var testdataSymbolContainsWildcard = []struct {
- Symbol string
- ExpectedResult bool
-}{
- {"mynamespace", false},
- {"*", true},
- {"any", true},
- {"my*space", false},
- {"*space", false},
- {"myname*", false},
+import (
+ "errors"
+ "net"
+ "reflect"
+ "testing"
+
+ "github.com/miekg/dns"
+ "k8s.io/client-go/1.5/pkg/api"
+
+ "github.com/coredns/coredns/middleware/etcd/msg"
+)
+
+func TestRecordForTXT(t *testing.T) {
+ k := Kubernetes{Zones: []string{"inter.webs.test"}}
+ r, _ := k.parseRequest("dns-version.inter.webs.test", dns.TypeTXT)
+ expected := DNSSchemaVersion
+
+ var svcs []msg.Service
+ k.recordsForTXT(r, &svcs)
+ if svcs[0].Text != expected {
+ t.Errorf("Expected result '%v'. Instead got result '%v'.", expected, svcs[0].Text)
+ }
+}
+
+func TestPrimaryZone(t *testing.T) {
+ k := Kubernetes{Zones: []string{"inter.webs.test", "inter.nets.test"}}
+ expected := "inter.webs.test"
+ result := k.PrimaryZone()
+ if result != expected {
+ t.Errorf("Expected result '%v'. Instead got result '%v'.", expected, result)
+ }
+}
+
+func TestIsRequestInReverseRange(t *testing.T) {
+
+ tests := []struct {
+ cidr string
+ name string
+ expected bool
+ }{
+ {"1.2.3.0/24", "4.3.2.1.in-addr.arpa.", true},
+ {"1.2.3.0/24", "5.3.2.1.in-addr.arpa.", true},
+ {"1.2.3.0/24", "5.4.2.1.in-addr.arpa.", false},
+ {"5.6.0.0/16", "5.4.2.1.in-addr.arpa.", false},
+ {"5.6.0.0/16", "5.4.6.5.in-addr.arpa.", true},
+ {"5.6.0.0/16", "5.6.0.1.in-addr.arpa.", false},
+ }
+
+ k := Kubernetes{Zones: []string{"inter.webs.test"}}
+
+ for _, test := range tests {
+ _, cidr, _ := net.ParseCIDR(test.cidr)
+ k.ReverseCidrs = []net.IPNet{*cidr}
+ result := k.isRequestInReverseRange(test.name)
+ if result != test.expected {
+ t.Errorf("Expected '%v' for '%v' in %v.", test.expected, test.name, test.cidr)
+ }
+ }
+}
+
+func TestIsNameError(t *testing.T) {
+ k := Kubernetes{Zones: []string{"inter.webs.test"}}
+ if !k.IsNameError(errNoItems) {
+ t.Errorf("Expected 'true' for '%v'", errNoItems)
+ }
+ if !k.IsNameError(errNsNotExposed) {
+ t.Errorf("Expected 'true' for '%v'", errNsNotExposed)
+ }
+ if !k.IsNameError(errInvalidRequest) {
+ t.Errorf("Expected 'true' for '%v'", errInvalidRequest)
+ }
+ otherErr := errors.New("Some other error occured")
+ if k.IsNameError(otherErr) {
+ t.Errorf("Expected 'true' for '%v'", otherErr)
+ }
}
func TestSymbolContainsWildcard(t *testing.T) {
+ var testdataSymbolContainsWildcard = []struct {
+ Symbol string
+ ExpectedResult bool
+ }{
+ {"mynamespace", false},
+ {"*", true},
+ {"any", true},
+ {"my*space", false},
+ {"*space", false},
+ {"myname*", false},
+ }
+
for _, example := range testdataSymbolContainsWildcard {
actualResult := symbolContainsWildcard(example.Symbol)
if actualResult != example.ExpectedResult {
@@ -44,7 +117,7 @@ func TestParseRequest(t *testing.T) {
// Test a valid SRV request
//
query := "_http._tcp.webs.mynamespace.svc.inter.webs.test."
- r, e := k.parseRequest(query, "SRV")
+ r, e := k.parseRequest(query, dns.TypeSRV)
if e != nil {
t.Errorf("Expected no error from parseRequest(%v, \"SRV\"). Instead got '%v'.", query, e)
}
@@ -65,7 +138,7 @@ func TestParseRequest(t *testing.T) {
// Test wildcard acceptance
//
query = "*.any.*.any.svc.inter.webs.test."
- r, e = k.parseRequest(query, "SRV")
+ r, e = k.parseRequest(query, dns.TypeSRV)
if e != nil {
t.Errorf("Expected no error from parseRequest(\"%v\", \"SRV\"). Instead got '%v'.", query, e)
}
@@ -85,7 +158,7 @@ func TestParseRequest(t *testing.T) {
// Test A request of endpoint
query = "1-2-3-4.webs.mynamespace.svc.inter.webs.test."
- r, e = k.parseRequest(query, "A")
+ r, e = k.parseRequest(query, dns.TypeA)
if e != nil {
t.Errorf("Expected no error from parseRequest(\"%v\", \"A\"). Instead got '%v'.", query, e)
}
@@ -102,6 +175,44 @@ func TestParseRequest(t *testing.T) {
expectString(t, f, "A", query, &r, field, expected)
}
+ // Test NS request
+ query = "inter.webs.test."
+ r, e = k.parseRequest(query, dns.TypeNS)
+ 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": "",
+ "typeName": "",
+ "zone": "inter.webs.test",
+ }
+ for field, expected := range tcs {
+ expectString(t, f, "NS", query, &r, field, expected)
+ }
+
+ // Test TXT request
+ query = "dns-version.inter.webs.test."
+ r, e = k.parseRequest(query, dns.TypeTXT)
+ if e != nil {
+ t.Errorf("Expected no error from parseRequest(\"%v\", \"TXT\"). Instead got '%v'.", query, e)
+ }
+ tcs = map[string]string{
+ "port": "",
+ "protocol": "",
+ "endpoint": "",
+ "service": "",
+ "namespace": "",
+ "typeName": "dns-version",
+ "zone": "inter.webs.test",
+ }
+ for field, expected := range tcs {
+ expectString(t, f, "TXT", query, &r, field, expected)
+ }
+
// Invalid query tests
invalidAQueries := []string{
"_http._tcp.webs.mynamespace.svc.inter.webs.test.", // A requests cannot have port or protocol
@@ -109,7 +220,7 @@ func TestParseRequest(t *testing.T) {
}
for _, q := range invalidAQueries {
- _, e = k.parseRequest(q, "A")
+ _, e = k.parseRequest(q, dns.TypeA)
if e == nil {
t.Errorf("Expected error from %v(\"%v\", \"A\").", f, q)
}
@@ -126,9 +237,43 @@ func TestParseRequest(t *testing.T) {
}
for _, q := range invalidSRVQueries {
- _, e = k.parseRequest(q, "SRV")
+ _, e = k.parseRequest(q, dns.TypeSRV)
if e == nil {
t.Errorf("Expected error from %v(\"%v\", \"SRV\").", f, q)
}
}
}
+
+func TestEndpointHostname(t *testing.T) {
+ var tests = []struct {
+ ip string
+ hostname string
+ expected string
+ }{
+ {"10.11.12.13", "", "10-11-12-13"},
+ {"10.11.12.13", "epname", "epname"},
+ }
+ for _, test := range tests {
+ result := endpointHostname(api.EndpointAddress{IP: test.ip, Hostname: test.hostname})
+ if result != test.expected {
+ t.Errorf("Expected endpoint name for (ip:%v hostname:%v) to be '%v', but got '%v'", test.ip, test.hostname, test.expected, result)
+ }
+ }
+}
+
+func TestIpFromPodName(t *testing.T) {
+ var tests = []struct {
+ ip string
+ expected string
+ }{
+ {"10-11-12-13", "10.11.12.13"},
+ {"1-2-3-4", "1.2.3.4"},
+ {"1-2-3--A-B-C", "1:2:3::A:B:C"},
+ }
+ for _, test := range tests {
+ result := ipFromPodName(test.ip)
+ if result != test.expected {
+ t.Errorf("Expected ip for podname '%v' to be '%v', but got '%v'", test.ip, test.expected, result)
+ }
+ }
+}