@@ -99,3 +99,166 @@ func TestDeploymentForNginxIngressController(t *testing.T) {
99
99
t .Errorf ("deploymentForNginxIngressController(%+v) returned %+v but expected %+v" , instance , result , expected )
100
100
}
101
101
}
102
+
103
+ func TestHasDeploymentChanged (t * testing.T ) {
104
+ runAsUser := new (int64 )
105
+ allowPrivilegeEscalation := new (bool )
106
+ * runAsUser = 101
107
+ * allowPrivilegeEscalation = true
108
+ replicas := new (int32 )
109
+ * replicas = 1
110
+
111
+ instance := & k8sv1alpha1.NginxIngressController {
112
+ ObjectMeta : metav1.ObjectMeta {
113
+ Name : "my-nginx-ingress-controller" ,
114
+ Namespace : "my-nginx-ingress-controller" ,
115
+ },
116
+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
117
+ Image : k8sv1alpha1.Image {
118
+ Repository : "nginx-ingress" ,
119
+ Tag : "edge" ,
120
+ },
121
+ Replicas : replicas ,
122
+ },
123
+ }
124
+
125
+ defaultDeployment := & appsv1.Deployment {
126
+ ObjectMeta : metav1.ObjectMeta {
127
+ Name : "my-nginx-ingress-controller" ,
128
+ Namespace : "my-nginx-ingress-controller" ,
129
+ },
130
+ Spec : appsv1.DeploymentSpec {
131
+ Replicas : replicas ,
132
+ Template : corev1.PodTemplateSpec {
133
+ ObjectMeta : v1.ObjectMeta {
134
+ Name : "my-nginx-ingress-controller" ,
135
+ Namespace : "my-nginx-ingress-controller" ,
136
+ },
137
+ Spec : corev1.PodSpec {
138
+ Containers : []corev1.Container {
139
+ {
140
+ Name : "my-nginx-ingress-controller" ,
141
+ Image : "nginx-ingress:edge" ,
142
+ Args : generatePodArgs (instance ),
143
+ },
144
+ },
145
+ },
146
+ },
147
+ },
148
+ }
149
+
150
+ tenReplicas := int32 (10 )
151
+
152
+ tests := []struct {
153
+ deployment * appsv1.Deployment
154
+ instance * k8sv1alpha1.NginxIngressController
155
+ expected bool
156
+ msg string
157
+ }{
158
+ {
159
+ deployment : defaultDeployment ,
160
+ instance : instance ,
161
+ expected : false ,
162
+ msg : "no changes" ,
163
+ },
164
+ {
165
+ deployment : defaultDeployment ,
166
+ instance : & k8sv1alpha1.NginxIngressController {
167
+ ObjectMeta : metav1.ObjectMeta {
168
+ Name : "my-nginx-ingress-controller" ,
169
+ Namespace : "my-nginx-ingress-controller" ,
170
+ },
171
+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
172
+ Image : k8sv1alpha1.Image {
173
+ Repository : "nginx-ingress" ,
174
+ Tag : "edge" ,
175
+ },
176
+ Replicas : & tenReplicas ,
177
+ },
178
+ },
179
+ expected : true ,
180
+ msg : "replicas increased" ,
181
+ },
182
+ {
183
+ deployment : & appsv1.Deployment {
184
+ ObjectMeta : metav1.ObjectMeta {
185
+ Name : "my-nginx-ingress-controller" ,
186
+ Namespace : "my-nginx-ingress-controller" ,
187
+ },
188
+ Spec : appsv1.DeploymentSpec {
189
+ Replicas : & tenReplicas , // Deployment with 10 replicas
190
+ Template : corev1.PodTemplateSpec {
191
+ ObjectMeta : v1.ObjectMeta {
192
+ Name : "my-nginx-ingress-controller" ,
193
+ Namespace : "my-nginx-ingress-controller" ,
194
+ },
195
+ Spec : corev1.PodSpec {
196
+ Containers : []corev1.Container {
197
+ {
198
+ Name : "my-nginx-ingress-controller" ,
199
+ Image : "nginx-ingress:edge" ,
200
+ Args : generatePodArgs (instance ),
201
+ },
202
+ },
203
+ },
204
+ },
205
+ },
206
+ },
207
+ instance : & k8sv1alpha1.NginxIngressController {
208
+ ObjectMeta : metav1.ObjectMeta {
209
+ Name : "my-nginx-ingress-controller" ,
210
+ Namespace : "my-nginx-ingress-controller" ,
211
+ },
212
+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
213
+ Image : k8sv1alpha1.Image {
214
+ Repository : "nginx-ingress" ,
215
+ Tag : "edge" ,
216
+ },
217
+ },
218
+ },
219
+ expected : true ,
220
+ msg : "replicas field removed" ,
221
+ },
222
+ {
223
+ deployment : defaultDeployment ,
224
+ instance : & k8sv1alpha1.NginxIngressController {
225
+ ObjectMeta : metav1.ObjectMeta {
226
+ Name : "my-nginx-ingress-controller" ,
227
+ Namespace : "my-nginx-ingress-controller" ,
228
+ },
229
+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
230
+ Image : k8sv1alpha1.Image {
231
+ Repository : "nginx-plus-ingress" ,
232
+ Tag : "edge" ,
233
+ },
234
+ },
235
+ },
236
+ expected : true ,
237
+ msg : "image repository update" ,
238
+ },
239
+ {
240
+ deployment : defaultDeployment ,
241
+ instance : & k8sv1alpha1.NginxIngressController {
242
+ ObjectMeta : metav1.ObjectMeta {
243
+ Name : "my-nginx-ingress-controller" ,
244
+ Namespace : "my-nginx-ingress-controller" ,
245
+ },
246
+ Spec : k8sv1alpha1.NginxIngressControllerSpec {
247
+ Image : k8sv1alpha1.Image {
248
+ Repository : "nginx-ingress" ,
249
+ Tag : "edge" ,
250
+ PullPolicy : "Always" ,
251
+ },
252
+ },
253
+ },
254
+ expected : true ,
255
+ msg : "pull policy update" ,
256
+ },
257
+ }
258
+ for _ , test := range tests {
259
+ result := hasDeploymentChanged (test .deployment , test .instance )
260
+ if result != test .expected {
261
+ t .Errorf ("hasDeploymentChanged() returned %v but expected %v for the case of %v" , result , test .expected , test .msg )
262
+ }
263
+ }
264
+ }
0 commit comments