@@ -12,6 +12,71 @@ 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 []operatorv1.DNSNodeService
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 : []operatorv1.DNSNodeService {},
30+ expected : "image-registry.openshift-image-registry.svc" ,
31+ },
32+ {
33+ name : "single additional service" ,
34+ nodeServices : []operatorv1.DNSNodeService {{Name : "my-service" , Namespace : "my-namespace" }},
35+ expected : "image-registry.openshift-image-registry.svc,my-service.my-namespace.svc" ,
36+ },
37+ {
38+ name : "multiple additional services" ,
39+ nodeServices : []operatorv1.DNSNodeService {{Name : "service1" , Namespace : "namespace1" }, {Name : "service2" , Namespace : "namespace2" }, {Name : "service3" , Namespace : "namespace3" }},
40+ expected : "image-registry.openshift-image-registry.svc,service1.namespace1.svc,service2.namespace2.svc,service3.namespace3.svc" ,
41+ },
42+ {
43+ name : "service with empty name is filtered out" ,
44+ nodeServices : []operatorv1.DNSNodeService {{Name : "" , Namespace : "my-namespace" }},
45+ expected : "image-registry.openshift-image-registry.svc" ,
46+ },
47+ {
48+ name : "service with empty namespace is filtered out" ,
49+ nodeServices : []operatorv1.DNSNodeService {{Name : "my-service" , Namespace : "" }},
50+ expected : "image-registry.openshift-image-registry.svc" ,
51+ },
52+ {
53+ name : "mixed valid and invalid services" ,
54+ nodeServices : []operatorv1.DNSNodeService {{Name : "service1" , Namespace : "namespace1" }, {Name : "" , Namespace : "namespace2" }, {Name : "service3" , Namespace : "namespace3" }},
55+ expected : "image-registry.openshift-image-registry.svc,service1.namespace1.svc,service3.namespace3.svc" ,
56+ },
57+ {
58+ name : "all invalid services filtered out" ,
59+ nodeServices : []operatorv1.DNSNodeService {{Name : "" , Namespace : "namespace1" }, {Name : "service2" , Namespace : "" }},
60+ expected : "image-registry.openshift-image-registry.svc" ,
61+ },
62+ }
63+
64+ for _ , tc := range testCases {
65+ t .Run (tc .name , func (t * testing.T ) {
66+ dns := & operatorv1.DNS {
67+ Spec : operatorv1.DNSSpec {
68+ NodeServices : tc .nodeServices ,
69+ },
70+ }
71+
72+ result := buildServicesList (dns )
73+ if result != tc .expected {
74+ t .Errorf ("expected %q, got %q" , tc .expected , result )
75+ }
76+ })
77+ }
78+ }
79+
1580// TestDesiredNodeResolverDaemonset verifies that desiredNodeResolverDaemonSet
1681// returns the expected daemonset.
1782func TestDesiredNodeResolverDaemonset (t * testing.T ) {
@@ -53,6 +118,79 @@ func TestDesiredNodeResolverDaemonset(t *testing.T) {
53118 } else if clusterDomain != domain {
54119 t .Errorf ("expected CLUSTER_DOMAIN env for dns node resolver image %q, got %q" , clusterDomain , domain )
55120 }
121+ services , ok := envs ["SERVICES" ]
122+ if ! ok {
123+ t .Errorf ("SERVICES env for dns node resolver image not found" )
124+ } else if services != "image-registry.openshift-image-registry.svc" {
125+ t .Errorf ("expected SERVICES env for dns node resolver image %q, got %q" , "image-registry.openshift-image-registry.svc" , services )
126+ }
127+ }
128+ }
129+
130+ // TestDesiredNodeResolverDaemonsetWithNodeServices verifies that desiredNodeResolverDaemonSet
131+ // correctly handles node services in the SERVICES environment variable.
132+ func TestDesiredNodeResolverDaemonsetWithNodeServices (t * testing.T ) {
133+ clusterDomain := "cluster.local"
134+ clusterIP := "172.30.77.10"
135+ openshiftCLIImage := "openshift/origin-cli:test"
136+
137+ testCases := []struct {
138+ name string
139+ nodeServices []operatorv1.DNSNodeService
140+ expectedServices string
141+ }{
142+ {
143+ name : "with single node service" ,
144+ nodeServices : []operatorv1.DNSNodeService {{Name : "my-api" , Namespace : "my-namespace" }},
145+ expectedServices : "image-registry.openshift-image-registry.svc,my-api.my-namespace.svc" ,
146+ },
147+ {
148+ name : "with multiple node services" ,
149+ nodeServices : []operatorv1.DNSNodeService {{Name : "service1" , Namespace : "ns1" }, {Name : "service2" , Namespace : "ns2" }},
150+ expectedServices : "image-registry.openshift-image-registry.svc,service1.ns1.svc,service2.ns2.svc" ,
151+ },
152+ {
153+ name : "with valid services only" ,
154+ nodeServices : []operatorv1.DNSNodeService {{Name : "clean-service" , Namespace : "namespace" }, {Name : "another-service" , Namespace : "ns" }},
155+ expectedServices : "image-registry.openshift-image-registry.svc,clean-service.namespace.svc,another-service.ns.svc" ,
156+ },
157+ }
158+
159+ for _ , tc := range testCases {
160+ t .Run (tc .name , func (t * testing.T ) {
161+ dns := & operatorv1.DNS {
162+ ObjectMeta : metav1.ObjectMeta {
163+ Name : DefaultDNSController ,
164+ },
165+ Spec : operatorv1.DNSSpec {
166+ NodeServices : tc .nodeServices ,
167+ },
168+ }
169+
170+ if want , ds , err := desiredNodeResolverDaemonSet (dns , clusterIP , clusterDomain , openshiftCLIImage ); err != nil {
171+ t .Errorf ("invalid node resolver daemonset: %v" , err )
172+ } else if ! want {
173+ t .Error ("expected the node resolver daemonset desired to be true, got false" )
174+ } else if len (ds .Spec .Template .Spec .Containers ) != 1 {
175+ t .Errorf ("expected number of daemonset containers 1, got %d" , len (ds .Spec .Template .Spec .Containers ))
176+ } else {
177+ c := ds .Spec .Template .Spec .Containers [0 ]
178+
179+ // Check environment variables
180+ envs := map [string ]string {}
181+ for _ , e := range c .Env {
182+ envs [e .Name ] = e .Value
183+ }
184+
185+ // Verify SERVICES environment variable contains expected services
186+ services , ok := envs ["SERVICES" ]
187+ if ! ok {
188+ t .Errorf ("SERVICES env for dns node resolver image not found" )
189+ } else if services != tc .expectedServices {
190+ t .Errorf ("expected SERVICES env for dns node resolver image %q, got %q" , tc .expectedServices , services )
191+ }
192+ }
193+ })
56194 }
57195}
58196
0 commit comments