2016-08-19 17:14:17 -07:00
package kubernetes
2016-07-22 16:07:27 -07:00
import (
"strings"
"testing"
2016-08-08 14:30:04 -07:00
"time"
2016-08-12 20:44:08 -07:00
2018-01-07 14:51:32 -05:00
"github.com/coredns/coredns/plugin/pkg/fall"
2018-02-14 15:11:26 -05:00
"github.com/coredns/coredns/plugin/proxy"
2016-08-19 17:14:17 -07:00
"github.com/mholt/caddy"
2017-09-29 15:58:50 -04:00
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
2016-07-22 16:07:27 -07:00
)
func TestKubernetesParse ( t * testing . T ) {
tests := [ ] struct {
2016-08-12 20:44:08 -07:00
input string // Corefile data as string
shouldErr bool // true if test case is exected to produce an error.
expectedErrContent string // substring from the expected error. Empty for positive cases.
expectedZoneCount int // expected count of defined zones.
expectedNSCount int // expected count of namespaces.
expectedResyncPeriod time . Duration // expected resync period value
expectedLabelSelector string // expected label selector value
2017-02-02 16:51:42 -05:00
expectedPodMode string
2018-01-07 14:51:32 -05:00
expectedFallthrough fall . F
2017-05-30 08:20:39 -04:00
expectedUpstreams [ ] string
2016-07-22 16:07:27 -07:00
} {
// positive
{
2016-08-05 18:19:51 -07:00
` kubernetes coredns.local ` ,
2016-07-22 16:07:27 -07:00
false ,
"" ,
2016-08-05 18:19:51 -07:00
1 ,
2016-07-22 16:07:27 -07:00
0 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-07-22 16:07:27 -07:00
} ,
{
2016-08-05 18:19:51 -07:00
` kubernetes coredns.local test.local ` ,
2016-07-22 16:07:27 -07:00
false ,
"" ,
2016-08-05 18:19:51 -07:00
2 ,
2016-07-22 16:07:27 -07:00
0 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-07-22 16:07:27 -07:00
} ,
{
2016-08-05 18:19:51 -07:00
` kubernetes coredns . local {
} ` ,
2016-07-22 16:07:27 -07:00
false ,
"" ,
2016-08-05 18:19:51 -07:00
1 ,
2016-07-22 16:07:27 -07:00
0 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-07-22 16:07:27 -07:00
} ,
{
` kubernetes coredns . local {
2018-01-28 16:40:10 +00:00
endpoint http : //localhost:9090 http://localhost:9091
2016-07-22 16:07:27 -07:00
} ` ,
false ,
"" ,
1 ,
0 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-07-22 16:07:27 -07:00
} ,
{
` kubernetes coredns . local {
namespaces demo
} ` ,
false ,
"" ,
1 ,
1 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-07-22 16:07:27 -07:00
} ,
{
` kubernetes coredns . local {
namespaces demo test
} ` ,
false ,
"" ,
1 ,
2 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-08 14:30:04 -07:00
} ,
{
` kubernetes coredns . local {
resyncperiod 30 s
} ` ,
false ,
"" ,
1 ,
0 ,
30 * time . Second ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-08 14:30:04 -07:00
} ,
{
` kubernetes coredns . local {
resyncperiod 15 m
} ` ,
false ,
"" ,
1 ,
0 ,
15 * time . Minute ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-12 20:44:08 -07:00
} ,
{
` kubernetes coredns . local {
labels environment = prod
} ` ,
false ,
"" ,
1 ,
0 ,
defaultResyncPeriod ,
"environment=prod" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-12 20:44:08 -07:00
} ,
{
` kubernetes coredns . local {
labels environment in ( production , staging , qa ) , application = nginx
} ` ,
false ,
"" ,
1 ,
0 ,
defaultResyncPeriod ,
"application=nginx,environment in (production,qa,staging)" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-07-22 16:07:27 -07:00
} ,
2016-08-05 18:19:51 -07:00
{
` kubernetes coredns . local test . local {
2016-08-08 14:30:04 -07:00
resyncperiod 15 m
2016-08-05 18:19:51 -07:00
endpoint http : //localhost:8080
namespaces demo test
2016-08-12 20:44:08 -07:00
labels environment in ( production , staging , qa ) , application = nginx
2017-04-19 16:08:30 -04:00
fallthrough
2016-08-05 18:19:51 -07:00
} ` ,
false ,
"" ,
2 ,
2 ,
2016-08-08 14:30:04 -07:00
15 * time . Minute ,
2016-08-12 20:44:08 -07:00
"application=nginx,environment in (production,qa,staging)" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Root ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-05 18:19:51 -07:00
} ,
2017-08-22 22:11:48 +01:00
// negative
2016-08-05 18:19:51 -07:00
{
2016-07-22 16:07:27 -07:00
` kubernetes coredns . local {
endpoint
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"rong argument count or unexpected line ending" ,
2016-07-22 16:07:27 -07:00
- 1 ,
- 1 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-05 18:19:51 -07:00
} ,
{
` kubernetes coredns . local {
namespaces
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"rong argument count or unexpected line ending" ,
2016-08-05 18:19:51 -07:00
- 1 ,
2016-07-22 16:07:27 -07:00
- 1 ,
2016-08-08 14:30:04 -07:00
defaultResyncPeriod ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-08 14:30:04 -07:00
} ,
{
` kubernetes coredns . local {
resyncperiod
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"rong argument count or unexpected line ending" ,
2016-08-08 14:30:04 -07:00
- 1 ,
0 ,
0 * time . Minute ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-08 14:30:04 -07:00
} ,
{
` kubernetes coredns . local {
resyncperiod 15
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"unable to parse resync duration value" ,
2016-08-08 14:30:04 -07:00
- 1 ,
0 ,
0 * time . Second ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-08 14:30:04 -07:00
} ,
{
` kubernetes coredns . local {
resyncperiod abc
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"unable to parse resync duration value" ,
2016-08-08 14:30:04 -07:00
- 1 ,
0 ,
0 * time . Second ,
2016-08-12 20:44:08 -07:00
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-12 20:44:08 -07:00
} ,
{
` kubernetes coredns . local {
labels
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"rong argument count or unexpected line ending" ,
2016-08-12 20:44:08 -07:00
- 1 ,
0 ,
0 * time . Second ,
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-08-12 20:44:08 -07:00
} ,
{
` kubernetes coredns . local {
labels environment in ( production , qa
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"unable to parse label selector" ,
2016-08-12 20:44:08 -07:00
- 1 ,
0 ,
0 * time . Second ,
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2017-02-02 16:51:42 -05:00
} ,
// pods disabled
{
` kubernetes coredns . local {
pods disabled
} ` ,
false ,
"" ,
1 ,
0 ,
defaultResyncPeriod ,
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2017-02-02 16:51:42 -05:00
} ,
// pods insecure
{
` kubernetes coredns . local {
pods insecure
} ` ,
false ,
"" ,
1 ,
0 ,
defaultResyncPeriod ,
"" ,
2017-08-22 22:11:48 +01:00
podModeInsecure ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2017-02-02 16:51:42 -05:00
} ,
// pods verified
{
` kubernetes coredns . local {
pods verified
} ` ,
false ,
"" ,
1 ,
0 ,
defaultResyncPeriod ,
"" ,
2017-08-22 22:11:48 +01:00
podModeVerified ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2017-02-02 16:51:42 -05:00
} ,
// pods invalid
{
` kubernetes coredns . local {
pods giant_seed
} ` ,
true ,
2017-06-14 09:37:10 -07:00
"rong value for pods" ,
2017-02-02 16:51:42 -05:00
- 1 ,
0 ,
defaultResyncPeriod ,
"" ,
2017-08-22 22:11:48 +01:00
podModeVerified ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2017-04-19 16:08:30 -04:00
} ,
2018-01-06 14:52:09 -05:00
// fallthrough with zones
2017-04-19 16:08:30 -04:00
{
` kubernetes coredns . local {
2018-01-06 14:52:09 -05:00
fallthrough ip6 . arpa inaddr . arpa foo . com
2017-04-19 16:08:30 -04:00
} ` ,
2018-01-06 14:52:09 -05:00
false ,
2017-06-14 09:37:10 -07:00
"rong argument count" ,
2018-01-06 14:52:09 -05:00
1 ,
2017-04-19 16:08:30 -04:00
0 ,
defaultResyncPeriod ,
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-07 14:51:32 -05:00
fall . F { Zones : [ ] string { "ip6.arpa." , "inaddr.arpa." , "foo.com." } } ,
2017-05-30 08:20:39 -04:00
nil ,
} ,
// Valid upstream
{
` kubernetes coredns . local {
upstream 13.14 .15 .16 : 53
} ` ,
false ,
"" ,
1 ,
0 ,
defaultResyncPeriod ,
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
[ ] string { "13.14.15.16:53" } ,
} ,
// Invalid upstream
{
` kubernetes coredns . local {
upstream 13.14 .15 .16 orange
} ` ,
true ,
"not an IP address or file: \"13.14.15.16orange\"" ,
- 1 ,
0 ,
defaultResyncPeriod ,
"" ,
2017-08-22 22:11:48 +01:00
podModeDisabled ,
2018-01-09 22:29:19 +00:00
fall . Zero ,
2017-05-30 08:20:39 -04:00
nil ,
2016-07-22 16:07:27 -07:00
} ,
2018-02-07 11:31:08 -05:00
// More than one Kubernetes not allowed
{
` kubernetes coredns . local
kubernetes cluster . local ` ,
true ,
"only one kubernetes section allowed per server block" ,
- 1 ,
0 ,
defaultResyncPeriod ,
"" ,
podModeDisabled ,
fall . Zero ,
nil ,
} ,
2016-07-22 16:07:27 -07:00
}
for i , test := range tests {
2016-08-19 17:14:17 -07:00
c := caddy . NewTestController ( "dns" , test . input )
2018-02-12 14:27:16 -05:00
k8sController , err := kubernetesParse ( c )
2016-07-22 16:07:27 -07:00
if test . shouldErr && err == nil {
2016-08-05 18:19:51 -07:00
t . Errorf ( "Test %d: Expected error, but did not find error for input '%s'. Error was: '%v'" , i , test . input , err )
2016-07-22 16:07:27 -07:00
}
if err != nil {
if ! test . shouldErr {
t . Errorf ( "Test %d: Expected no error but found one for input %s. Error was: %v" , i , test . input , err )
2016-08-05 18:19:51 -07:00
continue
2016-07-22 16:07:27 -07:00
}
if test . shouldErr && ( len ( test . expectedErrContent ) < 1 ) {
t . Fatalf ( "Test %d: Test marked as expecting an error, but no expectedErrContent provided for input '%s'. Error was: '%v'" , i , test . input , err )
}
if test . shouldErr && ( test . expectedZoneCount >= 0 ) {
2016-08-05 18:19:51 -07:00
t . Errorf ( "Test %d: Test marked as expecting an error, but provides value for expectedZoneCount!=-1 for input '%s'. Error was: '%v'" , i , test . input , err )
2016-07-22 16:07:27 -07:00
}
if ! strings . Contains ( err . Error ( ) , test . expectedErrContent ) {
t . Errorf ( "Test %d: Expected error to contain: %v, found error: %v, input: %s" , i , test . expectedErrContent , err , test . input )
}
2016-08-05 18:19:51 -07:00
continue
2016-07-22 16:07:27 -07:00
}
// No error was raised, so validate initialization of k8sController
// Zones
foundZoneCount := len ( k8sController . Zones )
if foundZoneCount != test . expectedZoneCount {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with %d zones, instead found %d zones: '%v' for input '%s'" , i , test . expectedZoneCount , foundZoneCount , k8sController . Zones , test . input )
}
// Namespaces
foundNSCount := len ( k8sController . Namespaces )
if foundNSCount != test . expectedNSCount {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with %d namespaces. Instead found %d namespaces: '%v' for input '%s'" , i , test . expectedNSCount , foundNSCount , k8sController . Namespaces , test . input )
2016-08-08 14:30:04 -07:00
}
// ResyncPeriod
2018-02-12 14:27:16 -05:00
foundResyncPeriod := k8sController . opts . resyncPeriod
2016-08-08 14:30:04 -07:00
if foundResyncPeriod != test . expectedResyncPeriod {
2016-08-12 20:44:08 -07:00
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with resync period '%s'. Instead found period '%s' for input '%s'" , i , test . expectedResyncPeriod , foundResyncPeriod , test . input )
}
// Labels
2018-02-12 14:27:16 -05:00
if k8sController . opts . labelSelector != nil {
foundLabelSelectorString := meta . FormatLabelSelector ( k8sController . opts . labelSelector )
2016-08-12 20:44:08 -07:00
if foundLabelSelectorString != test . expectedLabelSelector {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with label selector '%s'. Instead found selector '%s' for input '%s'" , i , test . expectedLabelSelector , foundLabelSelectorString , test . input )
}
2016-07-22 16:07:27 -07:00
}
2017-02-02 16:51:42 -05:00
// Pods
2017-08-22 22:11:48 +01:00
foundPodMode := k8sController . podMode
2017-02-02 16:51:42 -05:00
if foundPodMode != test . expectedPodMode {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with pod mode '%s'. Instead found pod mode '%s' for input '%s'" , i , test . expectedPodMode , foundPodMode , test . input )
}
2017-04-19 16:08:30 -04:00
// fallthrough
2018-01-07 14:51:32 -05:00
if ! k8sController . Fall . Equal ( test . expectedFallthrough ) {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with fallthrough '%v'. Instead found fallthrough '%v' for input '%s'" , i , test . expectedFallthrough , k8sController . Fall , test . input )
2017-04-19 16:08:30 -04:00
}
2017-05-30 08:20:39 -04:00
// upstream
2018-02-14 15:11:26 -05:00
var foundUpstreams * [ ] proxy . Upstream
if k8sController . Upstream . Forward != nil {
foundUpstreams = k8sController . Upstream . Forward . Upstreams
}
2017-05-30 08:20:39 -04:00
if test . expectedUpstreams == nil {
if foundUpstreams != nil {
t . Errorf ( "Test %d: Expected kubernetes controller to not be initialized with upstreams for input '%s'" , i , test . input )
}
} else {
if foundUpstreams == nil {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with upstreams for input '%s'" , i , test . input )
} else {
if len ( * foundUpstreams ) != len ( test . expectedUpstreams ) {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with %d upstreams. Instead found %d upstreams for input '%s'" , i , len ( test . expectedUpstreams ) , len ( * foundUpstreams ) , test . input )
}
for j , want := range test . expectedUpstreams {
got := ( * foundUpstreams ) [ j ] . Select ( ) . Name
if got != want {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with upstream '%s'. Instead found upstream '%s' for input '%s'" , i , want , got , test . input )
}
}
}
}
2016-07-22 16:07:27 -07:00
}
}
2017-11-08 08:07:10 -05:00
2018-02-16 11:05:52 -05:00
func TestKubernetesParseEndpointPodNames ( t * testing . T ) {
2017-11-08 08:07:10 -05:00
tests := [ ] struct {
input string // Corefile data as string
shouldErr bool // true if test case is exected to produce an error.
expectedErrContent string // substring from the expected error. Empty for positive cases.
expectedEndpointMode bool
} {
// valid endpoints mode
{
` kubernetes coredns . local {
endpoint_pod_names
} ` ,
false ,
"" ,
true ,
} ,
// endpoints invalid
{
` kubernetes coredns . local {
endpoint_pod_names giant_seed
} ` ,
true ,
"rong argument count or unexpected" ,
false ,
} ,
// endpoint not set
{
` kubernetes coredns . local {
} ` ,
false ,
"" ,
false ,
} ,
}
for i , test := range tests {
c := caddy . NewTestController ( "dns" , test . input )
2018-02-12 14:27:16 -05:00
k8sController , err := kubernetesParse ( c )
2017-11-08 08:07:10 -05:00
if test . shouldErr && err == nil {
t . Errorf ( "Test %d: Expected error, but did not find error for input '%s'. Error was: '%v'" , i , test . input , err )
}
if err != nil {
if ! test . shouldErr {
t . Errorf ( "Test %d: Expected no error but found one for input %s. Error was: %v" , i , test . input , err )
continue
}
if ! strings . Contains ( err . Error ( ) , test . expectedErrContent ) {
t . Errorf ( "Test %d: Expected error to contain: %v, found error: %v, input: %s" , i , test . expectedErrContent , err , test . input )
}
continue
}
// Endpoints
foundEndpointNameMode := k8sController . endpointNameMode
if foundEndpointNameMode != test . expectedEndpointMode {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with endpoints mode '%v'. Instead found endpoints mode '%v' for input '%s'" , i , test . expectedEndpointMode , foundEndpointNameMode , test . input )
}
}
}
2018-02-16 11:05:52 -05:00
func TestKubernetesParseNoEndpoints ( t * testing . T ) {
tests := [ ] struct {
input string // Corefile data as string
shouldErr bool // true if test case is exected to produce an error.
expectedErrContent string // substring from the expected error. Empty for positive cases.
expectedEndpointsInit bool
} {
// valid
{
` kubernetes coredns . local {
noendpoints
} ` ,
false ,
"" ,
false ,
} ,
// invalid
{
` kubernetes coredns . local {
noendpoints ixnay on the endpointsay
} ` ,
true ,
"rong argument count or unexpected" ,
true ,
} ,
// not set
{
` kubernetes coredns . local {
} ` ,
false ,
"" ,
true ,
} ,
}
for i , test := range tests {
c := caddy . NewTestController ( "dns" , test . input )
k8sController , err := kubernetesParse ( c )
if test . shouldErr && err == nil {
t . Errorf ( "Test %d: Expected error, but did not find error for input '%s'. Error was: '%v'" , i , test . input , err )
}
if err != nil {
if ! test . shouldErr {
t . Errorf ( "Test %d: Expected no error but found one for input %s. Error was: %v" , i , test . input , err )
continue
}
if ! strings . Contains ( err . Error ( ) , test . expectedErrContent ) {
t . Errorf ( "Test %d: Expected error to contain: %v, found error: %v, input: %s" , i , test . expectedErrContent , err , test . input )
}
continue
}
foundEndpointsInit := k8sController . opts . initEndpointsCache
if foundEndpointsInit != test . expectedEndpointsInit {
t . Errorf ( "Test %d: Expected kubernetes controller to be initialized with endpoints watch '%v'. Instead found endpoints watch '%v' for input '%s'" , i , test . expectedEndpointsInit , foundEndpointsInit , test . input )
}
}
}