@@ -12,6 +12,81 @@ import (
1212 "k8s.io/apimachinery/pkg/util/intstr"
1313)
1414
15+ // TestBuildServicesList tests the buildServicesList function with various DNS configurations
16+ func TestBuildServicesList (t * testing.T ) {
17+ testCases := []struct {
18+ name string
19+ nodeServices []string
20+ expected string
21+ }{
22+ {
23+ name : "no additional services" ,
24+ nodeServices : nil ,
25+ expected : "image-registry.openshift-image-registry.svc" ,
26+ },
27+ {
28+ name : "empty additional services slice" ,
29+ nodeServices : []string {},
30+ expected : "image-registry.openshift-image-registry.svc" ,
31+ },
32+ {
33+ name : "single additional service" ,
34+ nodeServices : []string {"my-service.my-namespace.svc" },
35+ expected : "image-registry.openshift-image-registry.svc,my-service.my-namespace.svc" ,
36+ },
37+ {
38+ name : "multiple additional services" ,
39+ nodeServices : []string {"service1.namespace1.svc" , "service2.namespace2.svc" , "service3.namespace3.svc" },
40+ expected : "image-registry.openshift-image-registry.svc,service1.namespace1.svc,service2.namespace2.svc,service3.namespace3.svc" ,
41+ },
42+ {
43+ name : "service with whitespace gets trimmed" ,
44+ nodeServices : []string {" my-service.my-namespace.svc " },
45+ expected : "image-registry.openshift-image-registry.svc,my-service.my-namespace.svc" ,
46+ },
47+ {
48+ name : "mixed clean and whitespace services" ,
49+ nodeServices : []string {"service1.namespace1.svc" , " service2.namespace2.svc " , "service3.namespace3.svc" },
50+ expected : "image-registry.openshift-image-registry.svc,service1.namespace1.svc,service2.namespace2.svc,service3.namespace3.svc" ,
51+ },
52+ {
53+ name : "empty string services are filtered out" ,
54+ nodeServices : []string {"service1.namespace1.svc" , "" , "service2.namespace2.svc" },
55+ expected : "image-registry.openshift-image-registry.svc,service1.namespace1.svc,service2.namespace2.svc" ,
56+ },
57+ {
58+ name : "whitespace-only services are filtered out" ,
59+ nodeServices : []string {"service1.namespace1.svc" , " " , "service2.namespace2.svc" },
60+ expected : "image-registry.openshift-image-registry.svc,service1.namespace1.svc,service2.namespace2.svc" ,
61+ },
62+ {
63+ name : "all whitespace/empty services filtered out" ,
64+ nodeServices : []string {"" , " " , "\t " },
65+ expected : "image-registry.openshift-image-registry.svc" ,
66+ },
67+ {
68+ name : "service without .svc suffix" ,
69+ nodeServices : []string {"my-service.my-namespace" },
70+ expected : "image-registry.openshift-image-registry.svc,my-service.my-namespace" ,
71+ },
72+ }
73+
74+ for _ , tc := range testCases {
75+ t .Run (tc .name , func (t * testing.T ) {
76+ dns := & operatorv1.DNS {
77+ Spec : operatorv1.DNSSpec {
78+ NodeServices : tc .nodeServices ,
79+ },
80+ }
81+
82+ result := buildServicesList (dns )
83+ if result != tc .expected {
84+ t .Errorf ("expected %q, got %q" , tc .expected , result )
85+ }
86+ })
87+ }
88+ }
89+
1590// TestDesiredNodeResolverDaemonset verifies that desiredNodeResolverDaemonSet
1691// returns the expected daemonset.
1792func TestDesiredNodeResolverDaemonset (t * testing.T ) {
@@ -53,6 +128,79 @@ func TestDesiredNodeResolverDaemonset(t *testing.T) {
53128 } else if clusterDomain != domain {
54129 t .Errorf ("expected CLUSTER_DOMAIN env for dns node resolver image %q, got %q" , clusterDomain , domain )
55130 }
131+ services , ok := envs ["SERVICES" ]
132+ if ! ok {
133+ t .Errorf ("SERVICES env for dns node resolver image not found" )
134+ } else if services != "image-registry.openshift-image-registry.svc" {
135+ t .Errorf ("expected SERVICES env for dns node resolver image %q, got %q" , "image-registry.openshift-image-registry.svc" , services )
136+ }
137+ }
138+ }
139+
140+ // TestDesiredNodeResolverDaemonsetWithNodeServices verifies that desiredNodeResolverDaemonSet
141+ // correctly handles node services in the SERVICES environment variable.
142+ func TestDesiredNodeResolverDaemonsetWithNodeServices (t * testing.T ) {
143+ clusterDomain := "cluster.local"
144+ clusterIP := "172.30.77.10"
145+ openshiftCLIImage := "openshift/origin-cli:test"
146+
147+ testCases := []struct {
148+ name string
149+ nodeServices []string
150+ expectedServices string
151+ }{
152+ {
153+ name : "with single node service" ,
154+ nodeServices : []string {"my-api.my-namespace.svc" },
155+ expectedServices : "image-registry.openshift-image-registry.svc,my-api.my-namespace.svc" ,
156+ },
157+ {
158+ name : "with multiple node services" ,
159+ nodeServices : []string {"service1.ns1.svc" , "service2.ns2.svc" },
160+ expectedServices : "image-registry.openshift-image-registry.svc,service1.ns1.svc,service2.ns2.svc" ,
161+ },
162+ {
163+ name : "with services containing whitespace" ,
164+ nodeServices : []string {" clean-service.namespace.svc " , "another-service.ns.svc" },
165+ expectedServices : "image-registry.openshift-image-registry.svc,clean-service.namespace.svc,another-service.ns.svc" ,
166+ },
167+ }
168+
169+ for _ , tc := range testCases {
170+ t .Run (tc .name , func (t * testing.T ) {
171+ dns := & operatorv1.DNS {
172+ ObjectMeta : metav1.ObjectMeta {
173+ Name : DefaultDNSController ,
174+ },
175+ Spec : operatorv1.DNSSpec {
176+ NodeServices : tc .nodeServices ,
177+ },
178+ }
179+
180+ if want , ds , err := desiredNodeResolverDaemonSet (dns , clusterIP , clusterDomain , openshiftCLIImage ); err != nil {
181+ t .Errorf ("invalid node resolver daemonset: %v" , err )
182+ } else if ! want {
183+ t .Error ("expected the node resolver daemonset desired to be true, got false" )
184+ } else if len (ds .Spec .Template .Spec .Containers ) != 1 {
185+ t .Errorf ("expected number of daemonset containers 1, got %d" , len (ds .Spec .Template .Spec .Containers ))
186+ } else {
187+ c := ds .Spec .Template .Spec .Containers [0 ]
188+
189+ // Check environment variables
190+ envs := map [string ]string {}
191+ for _ , e := range c .Env {
192+ envs [e .Name ] = e .Value
193+ }
194+
195+ // Verify SERVICES environment variable contains expected services
196+ services , ok := envs ["SERVICES" ]
197+ if ! ok {
198+ t .Errorf ("SERVICES env for dns node resolver image not found" )
199+ } else if services != tc .expectedServices {
200+ t .Errorf ("expected SERVICES env for dns node resolver image %q, got %q" , tc .expectedServices , services )
201+ }
202+ }
203+ })
56204 }
57205}
58206
0 commit comments