aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/setup_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/kubernetes/setup_test.go')
-rw-r--r--middleware/kubernetes/setup_test.go152
1 files changed, 151 insertions, 1 deletions
diff --git a/middleware/kubernetes/setup_test.go b/middleware/kubernetes/setup_test.go
index 8414d76fd..c8e84a724 100644
--- a/middleware/kubernetes/setup_test.go
+++ b/middleware/kubernetes/setup_test.go
@@ -2,11 +2,16 @@ package kubernetes
import (
"net"
+ "os"
+ "reflect"
"strings"
"testing"
"time"
+ "github.com/coredns/coredns/middleware/test"
+
"github.com/mholt/caddy"
+ "github.com/miekg/dns"
unversionedapi "k8s.io/client-go/1.5/pkg/api/unversioned"
)
@@ -16,6 +21,13 @@ func parseCidr(cidr string) net.IPNet {
}
func TestKubernetesParse(t *testing.T) {
+ f, rm, err := test.TempFile(os.TempDir(), testResolveConf)
+ autoPathResolvConfFile := f
+ if err != nil {
+ t.Fatalf("Could not create resolv.conf TempFile: %s", err)
+ }
+ defer rm()
+
tests := []struct {
description string // Human-facing description of test case
input string // Corefile data as string
@@ -30,6 +42,7 @@ func TestKubernetesParse(t *testing.T) {
expectedFallthrough bool
expectedUpstreams []string
expectedFederations []Federation
+ expectedAutoPath AutoPath
}{
// positive
{
@@ -46,6 +59,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"kubernetes keyword with multiple zones",
@@ -61,6 +75,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"kubernetes keyword with zone and empty braces",
@@ -77,6 +92,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"endpoint keyword with url",
@@ -94,6 +110,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"namespaces keyword with one namespace",
@@ -111,6 +128,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
nil,
+ AutoPath{},
},
{
"namespaces keyword with multiple namespaces",
@@ -128,6 +146,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"resync period in seconds",
@@ -145,6 +164,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"resync period in minutes",
@@ -162,6 +182,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"basic label selector",
@@ -179,6 +200,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"multi-label selector",
@@ -196,6 +218,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"fully specified valid config",
@@ -217,6 +240,7 @@ func TestKubernetesParse(t *testing.T) {
true,
nil,
[]Federation{},
+ AutoPath{},
},
// negative
{
@@ -233,6 +257,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"kubernetes keyword without a zone",
@@ -248,6 +273,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"endpoint keyword without an endpoint value",
@@ -265,6 +291,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"namespace keyword without a namespace value",
@@ -282,6 +309,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"resyncperiod keyword without a duration value",
@@ -299,6 +327,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"resync period no units",
@@ -316,6 +345,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"resync period invalid",
@@ -333,6 +363,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"labels with no selector value",
@@ -350,6 +381,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
{
"labels with invalid selector value",
@@ -367,6 +399,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// pods disabled
{
@@ -385,6 +418,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// pods insecure
{
@@ -403,6 +437,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// pods verified
{
@@ -421,6 +456,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// pods invalid
{
@@ -439,6 +475,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// cidrs ok
{
@@ -457,6 +494,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// cidrs ok
{
@@ -475,6 +513,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// fallthrough invalid
{
@@ -493,6 +532,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// Valid upstream
{
@@ -511,6 +551,7 @@ func TestKubernetesParse(t *testing.T) {
false,
[]string{"13.14.15.16:53"},
[]Federation{},
+ AutoPath{},
},
// Invalid upstream
{
@@ -529,6 +570,7 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
},
// Valid federations
{
@@ -551,6 +593,7 @@ func TestKubernetesParse(t *testing.T) {
{name: "foo", zone: "bar.crawl.com"},
{name: "fed", zone: "era.tion.com"},
},
+ AutoPath{},
},
// Invalid federations
{
@@ -569,6 +612,104 @@ func TestKubernetesParse(t *testing.T) {
false,
nil,
[]Federation{},
+ AutoPath{},
+ },
+ // autopath
+ {
+ "valid autopath",
+ `kubernetes coredns.local {
+ autopath 1 NXDOMAIN ` + autoPathResolvConfFile + `
+}`,
+ false,
+ "",
+ 1,
+ 0,
+ defaultResyncPeriod,
+ "",
+ defaultPodMode,
+ nil,
+ false,
+ nil,
+ nil,
+ AutoPath{
+ Enabled: true,
+ NDots: 1,
+ HostSearchPath: []string{"bar.com.", "baz.com."},
+ ResolvConfFile: autoPathResolvConfFile,
+ OnNXDOMAIN: dns.RcodeNameError,
+ },
+ },
+ {
+ "invalid autopath RESPONSE",
+ `kubernetes coredns.local {
+ autopath 0 CRY
+}`,
+ true,
+ "invalid RESPONSE argument for autopath",
+ -1,
+ 0,
+ defaultResyncPeriod,
+ "",
+ defaultPodMode,
+ nil,
+ false,
+ nil,
+ nil,
+ AutoPath{},
+ },
+ {
+ "invalid autopath NDOTS",
+ `kubernetes coredns.local {
+ autopath polka
+}`,
+ true,
+ "invalid NDOTS argument for autopath",
+ -1,
+ 0,
+ defaultResyncPeriod,
+ "",
+ defaultPodMode,
+ nil,
+ false,
+ nil,
+ nil,
+ AutoPath{},
+ },
+ {
+ "invalid autopath RESOLV-CONF",
+ `kubernetes coredns.local {
+ autopath 1 NOERROR /wrong/path/to/resolv.conf
+}`,
+ true,
+ "error when parsing",
+ -1,
+ 0,
+ defaultResyncPeriod,
+ "",
+ defaultPodMode,
+ nil,
+ false,
+ nil,
+ nil,
+ AutoPath{},
+ },
+ {
+ "invalid autopath invalid option",
+ `kubernetes coredns.local {
+ autopath 1 SERVFAIL ` + autoPathResolvConfFile + ` foo
+}`,
+ true,
+ "incorrect number of arguments",
+ -1,
+ 0,
+ defaultResyncPeriod,
+ "",
+ defaultPodMode,
+ nil,
+ false,
+ nil,
+ nil,
+ AutoPath{},
},
}
@@ -669,6 +810,15 @@ func TestKubernetesParse(t *testing.T) {
}
}
-
+ // autopath
+ if !reflect.DeepEqual(test.expectedAutoPath, k8sController.AutoPath) {
+ t.Errorf("Test %d: Expected kubernetes controller to be initialized with autopath '%v'. Instead found autopath '%v' for input '%s'", i, test.expectedAutoPath, k8sController.AutoPath, test.input)
+ }
}
}
+
+const testResolveConf = `nameserver 1.2.3.4
+domain foo.com
+search bar.com baz.com
+options ndots:5
+`