@@ -13,7 +13,6 @@ import (
13
13
func TestServiceForNginxIngressController (t * testing.T ) {
14
14
name := "my-service"
15
15
namespace := "my-nginx-ingress"
16
- serviceType := "LoadBalancer"
17
16
extraLabels := map [string ]string {"app" : "my-nginx-ingress" }
18
17
19
18
instance := & k8sv1alpha1.NginxIngressController {
@@ -23,7 +22,7 @@ func TestServiceForNginxIngressController(t *testing.T) {
23
22
Labels : extraLabels ,
24
23
},
25
24
Spec : k8sv1alpha1.NginxIngressControllerSpec {
26
- ServiceType : serviceType ,
25
+ ServiceType : string ( corev1 . ServiceTypeLoadBalancer ) ,
27
26
Service : & k8sv1alpha1.Service {
28
27
ExtraLabels : extraLabels ,
29
28
},
@@ -57,7 +56,7 @@ func TestServiceForNginxIngressController(t *testing.T) {
57
56
},
58
57
},
59
58
Selector : map [string ]string {"app" : instance .Name },
60
- Type : corev1 .ServiceType ( serviceType ) ,
59
+ Type : corev1 .ServiceTypeLoadBalancer ,
61
60
},
62
61
}
63
62
@@ -66,3 +65,258 @@ func TestServiceForNginxIngressController(t *testing.T) {
66
65
t .Errorf ("serviceForNginxIngressController() mismatch (-want +got):\n %s" , diff )
67
66
}
68
67
}
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
+ Labels : map [string ]string {"my" : "labelToBeOverridden" },
255
+ },
256
+ Spec : corev1.ServiceSpec {
257
+ Type : corev1 .ServiceTypeLoadBalancer ,
258
+ },
259
+ },
260
+ & k8sv1alpha1.NginxIngressController {
261
+ ObjectMeta : v1.ObjectMeta {
262
+ Name : name ,
263
+ Namespace : namespace ,
264
+ },
265
+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
266
+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
267
+ Service : & k8sv1alpha1.Service {
268
+ ExtraLabels : extraLabels ,
269
+ },
270
+ },
271
+ },
272
+ & corev1.Service {
273
+ ObjectMeta : v1.ObjectMeta {
274
+ Name : name ,
275
+ Namespace : namespace ,
276
+ Labels : extraLabels ,
277
+ },
278
+ Spec : corev1.ServiceSpec {
279
+ Type : corev1 .ServiceTypeLoadBalancer ,
280
+ },
281
+ },
282
+ "override labels" ,
283
+ },
284
+ {
285
+ & corev1.Service {
286
+ ObjectMeta : v1.ObjectMeta {
287
+ Name : name ,
288
+ Namespace : namespace ,
289
+ Labels : map [string ]string {"my" : "labelToBeRemoved" },
290
+ },
291
+ Spec : corev1.ServiceSpec {
292
+ Type : corev1 .ServiceTypeLoadBalancer ,
293
+ },
294
+ },
295
+ & k8sv1alpha1.NginxIngressController {
296
+ ObjectMeta : v1.ObjectMeta {
297
+ Name : name ,
298
+ Namespace : namespace ,
299
+ },
300
+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
301
+ ServiceType : string (corev1 .ServiceTypeLoadBalancer ),
302
+ },
303
+ },
304
+ & corev1.Service {
305
+ ObjectMeta : v1.ObjectMeta {
306
+ Name : name ,
307
+ Namespace : namespace ,
308
+ },
309
+ Spec : corev1.ServiceSpec {
310
+ Type : corev1 .ServiceTypeLoadBalancer ,
311
+ },
312
+ },
313
+ "remove labels" ,
314
+ },
315
+ }
316
+ for _ , test := range tests {
317
+ result := updateService (test .svc , test .instance )
318
+ if diff := cmp .Diff (test .expected , result ); diff != "" {
319
+ t .Errorf ("updateService() mismatch for the case of %v (-want +got):\n %s" , test .msg , diff )
320
+ }
321
+ }
322
+ }
0 commit comments