@@ -13,7 +13,6 @@ import (
1313func TestServiceForNginxIngressController (t * testing.T ) {
1414 name := "my-service"
1515 namespace := "my-nginx-ingress"
16- serviceType := "LoadBalancer"
1716 extraLabels := map [string ]string {"app" : "my-nginx-ingress" }
1817
1918 instance := & k8sv1alpha1.NginxIngressController {
@@ -23,7 +22,7 @@ func TestServiceForNginxIngressController(t *testing.T) {
2322 Labels : extraLabels ,
2423 },
2524 Spec : k8sv1alpha1.NginxIngressControllerSpec {
26- ServiceType : serviceType ,
25+ ServiceType : string ( corev1 . ServiceTypeLoadBalancer ) ,
2726 Service : & k8sv1alpha1.Service {
2827 ExtraLabels : extraLabels ,
2928 },
@@ -57,7 +56,7 @@ func TestServiceForNginxIngressController(t *testing.T) {
5756 },
5857 },
5958 Selector : map [string ]string {"app" : instance .Name },
60- Type : corev1 .ServiceType ( serviceType ) ,
59+ Type : corev1 .ServiceTypeLoadBalancer ,
6160 },
6261 }
6362
@@ -66,3 +65,256 @@ func TestServiceForNginxIngressController(t *testing.T) {
6665 t .Errorf ("serviceForNginxIngressController() mismatch (-want +got):\n %s" , diff )
6766 }
6867}
68+
69+ func TestHasServiceChanged (t * testing.T ) {
70+ name := "my-service"
71+ namespace := "my-nginx-ingress"
72+ extraLabels := map [string ]string {"app" : "my-nginx-ingress" }
73+
74+ tests := []struct {
75+ svc * corev1.Service
76+ instance * k8sv1alpha1.NginxIngressController
77+ expected bool
78+ msg string
79+ }{
80+ {
81+ & corev1.Service {
82+ ObjectMeta : v1.ObjectMeta {
83+ Name : name ,
84+ Namespace : namespace ,
85+ },
86+ Spec : corev1.ServiceSpec {
87+ Type : corev1 .ServiceTypeLoadBalancer ,
88+ },
89+ },
90+ & k8sv1alpha1.NginxIngressController {
91+ ObjectMeta : v1.ObjectMeta {
92+ Name : name ,
93+ Namespace : namespace ,
94+ },
95+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
96+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
97+ },
98+ },
99+ false ,
100+ "no changes" ,
101+ },
102+ {
103+ & corev1.Service {
104+ ObjectMeta : v1.ObjectMeta {
105+ Name : name ,
106+ Namespace : namespace ,
107+ },
108+ Spec : corev1.ServiceSpec {
109+ Type : corev1 .ServiceTypeLoadBalancer ,
110+ },
111+ },
112+ & k8sv1alpha1.NginxIngressController {
113+ ObjectMeta : v1.ObjectMeta {
114+ Name : name ,
115+ Namespace : namespace ,
116+ },
117+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
118+ ServiceType : "NodePort" ,
119+ },
120+ },
121+ true ,
122+ "different service type" ,
123+ },
124+ {
125+ & corev1.Service {
126+ ObjectMeta : v1.ObjectMeta {
127+ Name : name ,
128+ Namespace : namespace ,
129+ Labels : extraLabels ,
130+ },
131+ Spec : corev1.ServiceSpec {
132+ Type : corev1 .ServiceTypeLoadBalancer ,
133+ },
134+ },
135+ & k8sv1alpha1.NginxIngressController {
136+ ObjectMeta : v1.ObjectMeta {
137+ Name : name ,
138+ Namespace : namespace ,
139+ },
140+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
141+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
142+ Service : & k8sv1alpha1.Service {
143+ ExtraLabels : map [string ]string {"new" : "label" },
144+ },
145+ },
146+ },
147+ true ,
148+ "different label" ,
149+ },
150+ {
151+ & corev1.Service {
152+ ObjectMeta : v1.ObjectMeta {
153+ Name : name ,
154+ Namespace : namespace ,
155+ Labels : extraLabels ,
156+ },
157+ Spec : corev1.ServiceSpec {
158+ Type : corev1 .ServiceTypeLoadBalancer ,
159+ },
160+ },
161+ & k8sv1alpha1.NginxIngressController {
162+ ObjectMeta : v1.ObjectMeta {
163+ Name : name ,
164+ Namespace : namespace ,
165+ },
166+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
167+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
168+ Service : & k8sv1alpha1.Service {
169+ ExtraLabels : nil ,
170+ },
171+ },
172+ },
173+ true ,
174+ "remove label" ,
175+ },
176+ {
177+ & corev1.Service {
178+ ObjectMeta : v1.ObjectMeta {
179+ Name : name ,
180+ Namespace : namespace ,
181+ Labels : extraLabels ,
182+ },
183+ Spec : corev1.ServiceSpec {
184+ Type : corev1 .ServiceTypeLoadBalancer ,
185+ },
186+ },
187+ & k8sv1alpha1.NginxIngressController {
188+ ObjectMeta : v1.ObjectMeta {
189+ Name : name ,
190+ Namespace : namespace ,
191+ },
192+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
193+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
194+ },
195+ },
196+ true ,
197+ "remove service parameters" ,
198+ },
199+ }
200+ for _ , test := range tests {
201+ result := hasServiceChanged (test .svc , test .instance )
202+ if result != test .expected {
203+ t .Errorf ("hasServiceChanged() = %v, want %v for the case of %v" , result , test .expected , test .msg )
204+ }
205+ }
206+ }
207+
208+ func TestUpdateService (t * testing.T ) {
209+ name := "my-service"
210+ namespace := "my-nginx-ingress"
211+ extraLabels := map [string ]string {"app" : "my-nginx-ingress" }
212+
213+ tests := []struct {
214+ svc * corev1.Service
215+ instance * k8sv1alpha1.NginxIngressController
216+ expected * corev1.Service
217+ msg string
218+ }{
219+ {
220+ & corev1.Service {
221+ ObjectMeta : v1.ObjectMeta {
222+ Name : name ,
223+ Namespace : namespace ,
224+ },
225+ Spec : corev1.ServiceSpec {
226+ Type : corev1 .ServiceTypeLoadBalancer ,
227+ },
228+ },
229+ & k8sv1alpha1.NginxIngressController {
230+ ObjectMeta : v1.ObjectMeta {
231+ Name : name ,
232+ Namespace : namespace ,
233+ },
234+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
235+ ServiceType : string (corev1 .ServiceTypeNodePort ),
236+ },
237+ },
238+ & corev1.Service {
239+ ObjectMeta : v1.ObjectMeta {
240+ Name : name ,
241+ Namespace : namespace ,
242+ },
243+ Spec : corev1.ServiceSpec {
244+ Type : corev1 .ServiceTypeNodePort ,
245+ },
246+ },
247+ "override service type" ,
248+ },
249+ {
250+ & corev1.Service {
251+ ObjectMeta : v1.ObjectMeta {
252+ Name : name ,
253+ Namespace : namespace ,
254+ },
255+ Spec : corev1.ServiceSpec {
256+ Type : corev1 .ServiceTypeLoadBalancer ,
257+ },
258+ },
259+ & k8sv1alpha1.NginxIngressController {
260+ ObjectMeta : v1.ObjectMeta {
261+ Name : name ,
262+ Namespace : namespace ,
263+ },
264+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
265+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
266+ Service : & k8sv1alpha1.Service {
267+ ExtraLabels : extraLabels ,
268+ },
269+ },
270+ },
271+ & corev1.Service {
272+ ObjectMeta : v1.ObjectMeta {
273+ Name : name ,
274+ Namespace : namespace ,
275+ Labels : extraLabels ,
276+ },
277+ Spec : corev1.ServiceSpec {
278+ Type : corev1 .ServiceTypeLoadBalancer ,
279+ },
280+ },
281+ "override labels" ,
282+ },
283+ {
284+ & corev1.Service {
285+ ObjectMeta : v1.ObjectMeta {
286+ Name : name ,
287+ Namespace : namespace ,
288+ },
289+ Spec : corev1.ServiceSpec {
290+ Type : corev1 .ServiceTypeLoadBalancer ,
291+ },
292+ },
293+ & k8sv1alpha1.NginxIngressController {
294+ ObjectMeta : v1.ObjectMeta {
295+ Name : name ,
296+ Namespace : namespace ,
297+ },
298+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
299+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
300+ },
301+ },
302+ & corev1.Service {
303+ ObjectMeta : v1.ObjectMeta {
304+ Name : name ,
305+ Namespace : namespace ,
306+ },
307+ Spec : corev1.ServiceSpec {
308+ Type : corev1 .ServiceTypeLoadBalancer ,
309+ },
310+ },
311+ "remove labels" ,
312+ },
313+ }
314+ for _ , test := range tests {
315+ result := updateService (test .svc , test .instance )
316+ if diff := cmp .Diff (test .expected , result ); diff != "" {
317+ t .Errorf ("updateService() mismatch for the case of %v (-want +got):\n %s" , test .msg , diff )
318+ }
319+ }
320+ }
0 commit comments