aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/ns_test.go
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2017-05-22 16:05:48 -0400
committerGravatar John Belamaric <jbelamaric@infoblox.com> 2017-05-22 16:05:48 -0400
commit7f950e496ab8ae518d8f78f3a80225604dd90da3 (patch)
tree5e03de273df60b8072c649551be90c55714e00e3 /middleware/kubernetes/ns_test.go
parent024f56682dcaaaae2dd990d6fae3b54c8d17c467 (diff)
downloadcoredns-7f950e496ab8ae518d8f78f3a80225604dd90da3.tar.gz
coredns-7f950e496ab8ae518d8f78f3a80225604dd90da3.tar.zst
coredns-7f950e496ab8ae518d8f78f3a80225604dd90da3.zip
Handle K8s middleware NS record (#662)
* commit for testing in cluster * commit for testing in cluster * refactor and add ns.dns record * Release 007 * reduce heap allocations * gofmt * revert accidental Makefile commits * restore prior rcode for disabled pod mode * revert Makefile deltas * add unit tests * more unit tests * make isRequestInReverseRange easier to test * more unit tests * addressing review feedback * commit setup.go
Diffstat (limited to 'middleware/kubernetes/ns_test.go')
-rw-r--r--middleware/kubernetes/ns_test.go133
1 files changed, 133 insertions, 0 deletions
diff --git a/middleware/kubernetes/ns_test.go b/middleware/kubernetes/ns_test.go
new file mode 100644
index 000000000..193eb056a
--- /dev/null
+++ b/middleware/kubernetes/ns_test.go
@@ -0,0 +1,133 @@
+package kubernetes
+
+import "testing"
+import "net"
+
+import "github.com/coredns/coredns/middleware/etcd/msg"
+import "k8s.io/client-go/1.5/pkg/api"
+import "github.com/miekg/dns"
+
+func TestRecordForNS(t *testing.T) {
+ k := Kubernetes{Zones: []string{"inter.webs.test"}}
+ corednsRecord.Hdr.Name = "coredns.kube-system."
+ corednsRecord.A = net.IP("1.2.3.4")
+ r, _ := k.parseRequest("inter.webs.test", dns.TypeNS)
+ expected := "/coredns/test/webs/inter/kube-system/coredns"
+
+ var svcs []msg.Service
+ k.recordsForNS(r, &svcs)
+ if svcs[0].Key != expected {
+ t.Errorf("Expected result '%v'. Instead got result '%v'.", expected, svcs[0].Key)
+ }
+}
+
+func TestDefaultNSMsg(t *testing.T) {
+ k := Kubernetes{Zones: []string{"inter.webs.test"}}
+ corednsRecord.Hdr.Name = "coredns.kube-system."
+ corednsRecord.A = net.IP("1.2.3.4")
+ r, _ := k.parseRequest("ns.dns.inter.webs.test", dns.TypeA)
+ expected := "/coredns/test/webs/inter/dns/ns"
+
+ svc := k.defaultNSMsg(r)
+ if svc.Key != expected {
+ t.Errorf("Expected result '%v'. Instead got result '%v'.", expected, svc.Key)
+ }
+}
+
+func TestIsDefaultNS(t *testing.T) {
+ k := Kubernetes{Zones: []string{"inter.webs.test"}}
+ r, _ := k.parseRequest("ns.dns.inter.webs.test", dns.TypeA)
+
+ var name string
+ var expected bool
+
+ name = "ns.dns.inter.webs.test"
+ expected = true
+ if isDefaultNS(name, r) != expected {
+ t.Errorf("Expected IsDefaultNS('%v') to be '%v'.", name, expected)
+ }
+ name = "ns.dns.blah.inter.webs.test"
+ expected = false
+ if isDefaultNS(name, r) != expected {
+ t.Errorf("Expected IsDefaultNS('%v') to be '%v'.", name, expected)
+ }
+}
+
+type APIConnTest struct{}
+
+func (APIConnTest) Run() {
+ return
+}
+
+func (APIConnTest) Stop() error {
+ return nil
+}
+
+func (APIConnTest) ServiceList() []*api.Service {
+ svc := api.Service{
+ ObjectMeta: api.ObjectMeta{
+ Name: "dns-service",
+ Namespace: "kube-system",
+ },
+ Spec: api.ServiceSpec{
+ ClusterIP: "10.0.0.111",
+ },
+ }
+
+ return []*api.Service{&svc}
+
+}
+
+func (APIConnTest) PodIndex(string) []interface{} {
+ return nil
+}
+
+func (APIConnTest) EndpointsList() api.EndpointsList {
+ return api.EndpointsList{
+ Items: []api.Endpoints{
+ {
+ Subsets: []api.EndpointSubset{
+ {
+ Addresses: []api.EndpointAddress{
+ {
+ IP: "172.0.40.10",
+ },
+ },
+ },
+ },
+ ObjectMeta: api.ObjectMeta{
+ Name: "dns-service",
+ Namespace: "kube-system",
+ },
+ },
+ },
+ }
+}
+
+type InterfaceAddrsTest struct{}
+
+func (i InterfaceAddrsTest) InterfaceAddrs() ([]net.Addr, error) {
+ _, ipnet, _ := net.ParseCIDR("172.0.40.10/32")
+ return []net.Addr{ipnet}, nil
+}
+
+func TestDoCoreDNSRecord(t *testing.T) {
+
+ corednsRecord = dns.A{}
+ k := Kubernetes{Zones: []string{"inter.webs.test"}}
+
+ k.interfaceAddrs = &InterfaceAddrsTest{}
+ k.APIConn = &APIConnTest{}
+
+ cdr := k.CoreDNSRecord()
+
+ expected := "10.0.0.111"
+
+ if cdr.A.String() != expected {
+ t.Errorf("Expected A to be '%v', got '%v'", expected, cdr.A.String())
+ }
+ expected = "dns-service.kube-system.svc."
+ if cdr.Hdr.Name != expected {
+ t.Errorf("Expected Hdr.Name to be '%v', got '%v'", expected, cdr.Hdr.Name)
+ }
+}