diff options
Diffstat (limited to 'middleware/kubernetes/handler_test.go')
-rw-r--r-- | middleware/kubernetes/handler_test.go | 347 |
1 files changed, 0 insertions, 347 deletions
diff --git a/middleware/kubernetes/handler_test.go b/middleware/kubernetes/handler_test.go deleted file mode 100644 index 8ab51aff8..000000000 --- a/middleware/kubernetes/handler_test.go +++ /dev/null @@ -1,347 +0,0 @@ -package kubernetes - -import ( - "testing" - - "github.com/coredns/coredns/middleware/pkg/dnsrecorder" - "github.com/coredns/coredns/middleware/test" - - "github.com/miekg/dns" - "golang.org/x/net/context" - "k8s.io/client-go/1.5/pkg/api" -) - -var dnsTestCases = []test.Case{ - // A Service - { - Qname: "svc1.testns.svc.cluster.local.", Qtype: dns.TypeA, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.A("svc1.testns.svc.cluster.local. 5 IN A 10.0.0.1"), - }, - }, - // A Service (wildcard) - { - Qname: "svc1.*.svc.cluster.local.", Qtype: dns.TypeA, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.A("svc1.*.svc.cluster.local. 5 IN A 10.0.0.1"), - }, - }, - { - Qname: "svc1.testns.svc.cluster.local.", Qtype: dns.TypeSRV, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{test.SRV("svc1.testns.svc.cluster.local. 303 IN SRV 0 100 80 svc1.testns.svc.cluster.local.")}, - Extra: []dns.RR{test.A("svc1.testns.svc.cluster.local. 303 IN A 10.0.0.1")}, - }, - // SRV Service (wildcard) - { - Qname: "svc1.*.svc.cluster.local.", Qtype: dns.TypeSRV, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{test.SRV("svc1.*.svc.cluster.local. 303 IN SRV 0 100 80 svc1.testns.svc.cluster.local.")}, - Extra: []dns.RR{test.A("svc1.testns.svc.cluster.local. 303 IN A 10.0.0.1")}, - }, - // SRV Service (wildcards) - { - Qname: "*.any.svc1.*.svc.cluster.local.", Qtype: dns.TypeSRV, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{test.SRV("*.any.svc1.*.svc.cluster.local. 303 IN SRV 0 100 80 svc1.testns.svc.cluster.local.")}, - Extra: []dns.RR{test.A("svc1.testns.svc.cluster.local. 303 IN A 10.0.0.1")}, - }, - // A Service (wildcards) - { - Qname: "*.any.svc1.*.svc.cluster.local.", Qtype: dns.TypeA, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.A("*.any.svc1.*.svc.cluster.local. 303 IN A 10.0.0.1"), - }, - }, - // SRV Service Not udp/tcp - { - Qname: "*._not-udp-or-tcp.svc1.testns.svc.cluster.local.", Qtype: dns.TypeSRV, - Rcode: dns.RcodeNameError, - Ns: []dns.RR{ - test.SOA("cluster.local. 300 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), - }, - }, - // SRV Service - { - Qname: "_http._tcp.svc1.testns.svc.cluster.local.", Qtype: dns.TypeSRV, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.SRV("_http._tcp.svc1.testns.svc.cluster.local. 303 IN SRV 0 100 80 svc1.testns.svc.cluster.local."), - }, - Extra: []dns.RR{ - test.A("svc1.testns.svc.cluster.local. 303 IN A 10.0.0.1"), - }, - }, - // A Service (Headless) - { - Qname: "hdls1.testns.svc.cluster.local.", Qtype: dns.TypeA, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.A("hdls1.testns.svc.cluster.local. 303 IN A 172.0.0.2"), - test.A("hdls1.testns.svc.cluster.local. 303 IN A 172.0.0.3"), - }, - }, - // SRV Service (Headless) - { - Qname: "_http._tcp.hdls1.testns.svc.cluster.local.", Qtype: dns.TypeSRV, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.SRV("_http._tcp.hdls1.testns.svc.cluster.local. 303 IN SRV 0 50 80 172-0-0-2.hdls1.testns.svc.cluster.local."), - test.SRV("_http._tcp.hdls1.testns.svc.cluster.local. 303 IN SRV 0 50 80 172-0-0-3.hdls1.testns.svc.cluster.local."), - }, - Extra: []dns.RR{ - test.A("172-0-0-2.hdls1.testns.svc.cluster.local. 303 IN A 172.0.0.2"), - test.A("172-0-0-3.hdls1.testns.svc.cluster.local. 303 IN A 172.0.0.3"), - }, - }, - // CNAME External - { - Qname: "external.testns.svc.cluster.local.", Qtype: dns.TypeCNAME, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.CNAME("external.testns.svc.cluster.local. 303 IN CNAME ext.interwebs.test."), - }, - }, - // AAAA Service (existing service) - { - Qname: "svc1.testns.svc.cluster.local.", Qtype: dns.TypeAAAA, - Rcode: dns.RcodeSuccess, - Ns: []dns.RR{ - test.SOA("cluster.local. 300 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), - }, - }, - // AAAA Service (non-existing service) - { - Qname: "svc0.testns.svc.cluster.local.", Qtype: dns.TypeAAAA, - Rcode: dns.RcodeNameError, - Ns: []dns.RR{ - test.SOA("cluster.local. 300 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), - }, - }, - // A Service (non-existing service) - { - Qname: "svc0.testns.svc.cluster.local.", Qtype: dns.TypeA, - Rcode: dns.RcodeNameError, - Ns: []dns.RR{ - test.SOA("cluster.local. 300 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), - }, - }, - // TXT Schema - { - Qname: "dns-version.cluster.local.", Qtype: dns.TypeTXT, - Rcode: dns.RcodeSuccess, - Answer: []dns.RR{ - test.TXT("dns-version.cluster.local 28800 IN TXT 1.0.1"), - }, - }, - // A Service (Headless) does not exist - { - Qname: "bogusendpoint.hdls1.testns.svc.cluster.local.", Qtype: dns.TypeA, - Rcode: dns.RcodeNameError, - Ns: []dns.RR{ - test.SOA("cluster.local. 300 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), - }, - }, - // A Service does not exist - { - Qname: "bogusendpoint.svc0.testns.svc.cluster.local.", Qtype: dns.TypeA, - Rcode: dns.RcodeNameError, - Ns: []dns.RR{ - test.SOA("cluster.local. 300 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"), - }, - }, -} - -func TestServeDNS(t *testing.T) { - - k := New([]string{"cluster.local."}) - k.APIConn = &APIConnServeTest{} - k.Next = test.NextHandler(dns.RcodeSuccess, nil) - ctx := context.TODO() - - for i, tc := range dnsTestCases { - r := tc.Msg() - - w := dnsrecorder.New(&test.ResponseWriter{}) - - _, err := k.ServeDNS(ctx, w, r) - if err != tc.Error { - t.Errorf("Test %d expected no error, got %v", i, err) - return - } - if tc.Error != nil { - continue - } - - resp := w.Msg - if resp == nil { - t.Fatalf("Test %d, got nil message and no error for %q", i, r.Question[0].Name) - } - - // Before sorting, make sure that CNAMES do not appear after their target records - test.CNAMEOrder(t, resp) - - test.SortAndCheck(t, resp, tc) - } -} - -type APIConnServeTest struct{} - -func (APIConnServeTest) Run() { return } -func (APIConnServeTest) Stop() error { return nil } - -func (APIConnServeTest) PodIndex(string) []interface{} { - a := make([]interface{}, 1) - a[0] = &api.Pod{ - ObjectMeta: api.ObjectMeta{ - Namespace: "podns", - }, - Status: api.PodStatus{ - PodIP: "10.240.0.1", // Remote IP set in test.ResponseWriter - }, - } - return a -} - -func (APIConnServeTest) ServiceList() []*api.Service { - svcs := []*api.Service{ - { - ObjectMeta: api.ObjectMeta{ - Name: "svc1", - Namespace: "testns", - }, - Spec: api.ServiceSpec{ - ClusterIP: "10.0.0.1", - Ports: []api.ServicePort{{ - Name: "http", - Protocol: "tcp", - Port: 80, - }}, - }, - }, - { - ObjectMeta: api.ObjectMeta{ - Name: "hdls1", - Namespace: "testns", - }, - Spec: api.ServiceSpec{ - ClusterIP: api.ClusterIPNone, - }, - }, - { - ObjectMeta: api.ObjectMeta{ - Name: "external", - Namespace: "testns", - }, - Spec: api.ServiceSpec{ - ExternalName: "ext.interwebs.test", - Ports: []api.ServicePort{{ - Name: "http", - Protocol: "tcp", - Port: 80, - }}, - }, - }, - } - return svcs - -} - -func (APIConnServeTest) EndpointsList() api.EndpointsList { - n := "test.node.foo.bar" - - return api.EndpointsList{ - Items: []api.Endpoints{ - { - Subsets: []api.EndpointSubset{ - { - Addresses: []api.EndpointAddress{ - { - IP: "172.0.0.1", - Hostname: "ep1a", - }, - }, - Ports: []api.EndpointPort{ - { - Port: 80, - Protocol: "tcp", - Name: "http", - }, - }, - }, - }, - ObjectMeta: api.ObjectMeta{ - Name: "svc1", - Namespace: "testns", - }, - }, - { - Subsets: []api.EndpointSubset{ - { - Addresses: []api.EndpointAddress{ - { - IP: "172.0.0.2", - }, - }, - Ports: []api.EndpointPort{ - { - Port: 80, - Protocol: "tcp", - Name: "http", - }, - }, - }, - }, - ObjectMeta: api.ObjectMeta{ - Name: "hdls1", - Namespace: "testns", - }, - }, - { - Subsets: []api.EndpointSubset{ - { - Addresses: []api.EndpointAddress{ - { - IP: "172.0.0.3", - }, - }, - Ports: []api.EndpointPort{ - { - Port: 80, - Protocol: "tcp", - Name: "http", - }, - }, - }, - }, - ObjectMeta: api.ObjectMeta{ - Name: "hdls1", - Namespace: "testns", - }, - }, - { - Subsets: []api.EndpointSubset{ - { - Addresses: []api.EndpointAddress{ - { - IP: "10.9.8.7", - NodeName: &n, - }, - }, - }, - }, - }, - }, - } -} - -func (APIConnServeTest) GetNodeByName(name string) (api.Node, error) { - return api.Node{ - ObjectMeta: api.ObjectMeta{ - Name: "test.node.foo.bar", - }, - }, nil -} |