coredns/middleware/kubernetes/ns_test.go
Chris O'Haver 7f950e496a 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
2017-05-22 16:05:48 -04:00

133 lines
3 KiB
Go

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)
}
}