@@ -183,7 +183,7 @@ func fakeSynFn(interface{}) error {
183
183
return nil
184
184
}
185
185
186
- func buildExtensionsIngresses () []networkingv1beta1.Ingress {
186
+ func buildIngressesV1beta1 () []networkingv1beta1.Ingress {
187
187
return []networkingv1beta1.Ingress {
188
188
{
189
189
ObjectMeta : metav1.ObjectMeta {
@@ -234,18 +234,66 @@ func buildExtensionsIngresses() []networkingv1beta1.Ingress {
234
234
}
235
235
}
236
236
237
- type testIngressLister struct {
237
+ func buildIngressesV1 () []networkingv1.Ingress {
238
+ return []networkingv1.Ingress {
239
+ {
240
+ ObjectMeta : metav1.ObjectMeta {
241
+ Name : "foo_ingress_1" ,
242
+ Namespace : apiv1 .NamespaceDefault ,
243
+ },
244
+ Status : networkingv1.IngressStatus {
245
+ LoadBalancer : apiv1.LoadBalancerStatus {
246
+ Ingress : []apiv1.LoadBalancerIngress {
247
+ {
248
+ IP : "10.0.0.1" ,
249
+ Hostname : "foo1" ,
250
+ },
251
+ },
252
+ },
253
+ },
254
+ },
255
+ {
256
+ ObjectMeta : metav1.ObjectMeta {
257
+ Name : "foo_ingress_different_class" ,
258
+ Namespace : metav1 .NamespaceDefault ,
259
+ Annotations : map [string ]string {
260
+ "kubernetes.io/ingress.class" : "no-nginx" ,
261
+ },
262
+ },
263
+ Status : networkingv1.IngressStatus {
264
+ LoadBalancer : apiv1.LoadBalancerStatus {
265
+ Ingress : []apiv1.LoadBalancerIngress {
266
+ {
267
+ IP : "0.0.0.0" ,
268
+ Hostname : "foo.bar.com" ,
269
+ },
270
+ },
271
+ },
272
+ },
273
+ },
274
+ {
275
+ ObjectMeta : metav1.ObjectMeta {
276
+ Name : "foo_ingress_2" ,
277
+ Namespace : apiv1 .NamespaceDefault ,
278
+ },
279
+ Status : networkingv1.IngressStatus {
280
+ LoadBalancer : apiv1.LoadBalancerStatus {
281
+ Ingress : []apiv1.LoadBalancerIngress {},
282
+ },
283
+ },
284
+ },
285
+ }
238
286
}
239
287
240
- func (til * testIngressLister ) ListIngressesV1beta1 () []* networkingv1beta1.Ingress {
241
- var ingresses []* networkingv1beta1.Ingress
242
- ingresses = append (ingresses , & networkingv1beta1.Ingress {
288
+ var sampleIngressesV1beta1 = []* networkingv1beta1.Ingress {
289
+ {
243
290
ObjectMeta : metav1.ObjectMeta {
244
291
Name : "foo_ingress_non_01" ,
245
292
Namespace : apiv1 .NamespaceDefault ,
246
- }})
293
+ },
294
+ },
247
295
248
- ingresses = append ( ingresses , & networkingv1beta1. Ingress {
296
+ {
249
297
ObjectMeta : metav1.ObjectMeta {
250
298
Name : "foo_ingress_1" ,
251
299
Namespace : apiv1 .NamespaceDefault ,
@@ -255,13 +303,41 @@ func (til *testIngressLister) ListIngressesV1beta1() []*networkingv1beta1.Ingres
255
303
Ingress : buildLoadBalancerIngressByIP (),
256
304
},
257
305
},
258
- })
306
+ },
307
+ }
308
+
309
+ var sampleIngressesV1 = []* networkingv1.Ingress {
310
+ {
311
+ ObjectMeta : metav1.ObjectMeta {
312
+ Name : "foo_ingress_non_01" ,
313
+ Namespace : apiv1 .NamespaceDefault ,
314
+ },
315
+ },
316
+
317
+ {
318
+ ObjectMeta : metav1.ObjectMeta {
319
+ Name : "foo_ingress_1" ,
320
+ Namespace : apiv1 .NamespaceDefault ,
321
+ },
322
+ Status : networkingv1.IngressStatus {
323
+ LoadBalancer : apiv1.LoadBalancerStatus {
324
+ Ingress : buildLoadBalancerIngressByIP (),
325
+ },
326
+ },
327
+ },
328
+ }
329
+
330
+ type testIngressLister struct {
331
+ ingressesV1beta1 []* networkingv1beta1.Ingress
332
+ ingressesV1 []* networkingv1.Ingress
333
+ }
259
334
260
- return ingresses
335
+ func (til * testIngressLister ) ListIngressesV1beta1 () []* networkingv1beta1.Ingress {
336
+ return til .ingressesV1beta1
261
337
}
262
338
263
339
func (til * testIngressLister ) ListIngressesV1 () []* networkingv1.Ingress {
264
- return nil
340
+ return til . ingressesV1
265
341
}
266
342
267
343
func (til * testIngressLister ) ListTCPIngresses () ([]* configurationv1beta1.TCPIngress , error ) {
@@ -272,10 +348,6 @@ func (til *testIngressLister) ListKnativeIngresses() ([]*knative.Ingress, error)
272
348
return nil , nil
273
349
}
274
350
275
- func buildIngressLister () ingressLister {
276
- return & testIngressLister {}
277
- }
278
-
279
351
func buildStatusSync () statusSync {
280
352
return statusSync {
281
353
pod : & utils.PodInfo {
@@ -287,9 +359,9 @@ func buildStatusSync() statusSync {
287
359
},
288
360
syncQueue : task .NewTaskQueue (fakeSynFn , logrus .New ()),
289
361
Config : Config {
290
- CoreClient : buildSimpleClientSet (& networkingv1beta1.IngressList {Items : buildExtensionsIngresses ()}),
362
+ CoreClient : buildSimpleClientSet (& networkingv1beta1.IngressList {Items : buildIngressesV1beta1 ()}),
291
363
PublishService : apiv1 .NamespaceDefault + "/" + "foo" ,
292
- IngressLister : buildIngressLister () ,
364
+ IngressLister : & testIngressLister { ingressesV1beta1 : sampleIngressesV1beta1 } ,
293
365
IngressAPI : utils .ExtensionsV1beta1 ,
294
366
},
295
367
}
@@ -301,9 +373,9 @@ func TestStatusActionsV1beta1(t *testing.T) {
301
373
os .Setenv ("POD_NAME" , "foo1" )
302
374
os .Setenv ("POD_NAMESPACE" , apiv1 .NamespaceDefault )
303
375
c := Config {
304
- CoreClient : buildSimpleClientSet (& networkingv1beta1.IngressList {Items : buildExtensionsIngresses ()}),
376
+ CoreClient : buildSimpleClientSet (& networkingv1beta1.IngressList {Items : buildIngressesV1beta1 ()}),
305
377
PublishService : apiv1 .NamespaceDefault + "/" + "foo" ,
306
- IngressLister : buildIngressLister () ,
378
+ IngressLister : & testIngressLister { ingressesV1beta1 : sampleIngressesV1beta1 } ,
307
379
UpdateStatusOnShutdown : true ,
308
380
IngressAPI : utils .NetworkingV1beta1 ,
309
381
Logger : logrus .New (),
@@ -365,6 +437,76 @@ func TestStatusActionsV1beta1(t *testing.T) {
365
437
}
366
438
}
367
439
440
+ func TestStatusActionsV1 (t * testing.T ) {
441
+ ctx := context .Background ()
442
+ // make sure election can be created
443
+ os .Setenv ("POD_NAME" , "foo1" )
444
+ os .Setenv ("POD_NAMESPACE" , apiv1 .NamespaceDefault )
445
+ c := Config {
446
+ CoreClient : buildSimpleClientSet (& networkingv1.IngressList {Items : buildIngressesV1 ()}),
447
+ PublishService : apiv1 .NamespaceDefault + "/" + "foo" ,
448
+ IngressLister : & testIngressLister {ingressesV1 : sampleIngressesV1 },
449
+ UpdateStatusOnShutdown : true ,
450
+ IngressAPI : utils .NetworkingV1 ,
451
+ Logger : logrus .New (),
452
+ }
453
+ // create object
454
+ fkSync , err := NewStatusSyncer (ctx , c )
455
+ if fkSync == nil {
456
+ t .Fatalf ("expected a valid Sync" )
457
+ }
458
+
459
+ fk := fkSync .(statusSync )
460
+
461
+ // start it and wait for the election and syn actions
462
+ go fk .Run ()
463
+ // wait for the election
464
+ time .Sleep (100 * time .Millisecond )
465
+ // execute sync
466
+ err = fk .sync ("just-test" )
467
+ if err != nil {
468
+ t .Fatalf ("unexpected error: %v" , err )
469
+ }
470
+
471
+ newIPs := []apiv1.LoadBalancerIngress {{
472
+ IP : "11.0.0.2" ,
473
+ }}
474
+ fooIngress1 , err1 := fk .CoreClient .NetworkingV1 ().Ingresses (
475
+ apiv1 .NamespaceDefault ).Get (ctx , "foo_ingress_1" , metav1.GetOptions {})
476
+ if err1 != nil {
477
+ t .Fatalf ("unexpected error" )
478
+ }
479
+ fooIngress1CurIPs := fooIngress1 .Status .LoadBalancer .Ingress
480
+ if ! ingressSliceEqual (fooIngress1CurIPs , newIPs ) {
481
+ t .Fatalf ("returned %v but expected %v" , fooIngress1CurIPs , newIPs )
482
+ }
483
+
484
+ time .Sleep (1 * time .Second )
485
+
486
+ // execute shutdown
487
+ fk .Shutdown (true )
488
+ // ingress should be empty
489
+ newIPs2 := []apiv1.LoadBalancerIngress {}
490
+ fooIngress2 , err2 := fk .CoreClient .NetworkingV1 ().Ingresses (
491
+ apiv1 .NamespaceDefault ).Get (ctx , "foo_ingress_1" , metav1.GetOptions {})
492
+ if err2 != nil {
493
+ t .Fatalf ("unexpected error" )
494
+ }
495
+ fooIngress2CurIPs := fooIngress2 .Status .LoadBalancer .Ingress
496
+ if ! ingressSliceEqual (fooIngress2CurIPs , newIPs2 ) {
497
+ t .Fatalf ("returned %v but expected %v" , fooIngress2CurIPs , newIPs2 )
498
+ }
499
+
500
+ oic , err := fk .CoreClient .NetworkingV1 ().Ingresses (
501
+ metav1 .NamespaceDefault ).Get (ctx , "foo_ingress_different_class" , metav1.GetOptions {})
502
+ if err != nil {
503
+ t .Fatalf ("unexpected error" )
504
+ }
505
+ if oic .Status .LoadBalancer .Ingress [0 ].IP != "0.0.0.0" && oic .Status .LoadBalancer .Ingress [0 ].Hostname != "foo.bar.com" {
506
+ t .Fatalf ("invalid ingress status for rule with different class" )
507
+ }
508
+ }
509
+
368
510
func TestCallback (t * testing.T ) {
369
511
buildStatusSync ()
370
512
}
0 commit comments