@@ -369,4 +369,186 @@ var _ = Describe("Source", func() {
369
369
})
370
370
})
371
371
})
372
+
373
+ Describe ("InformerProvider" , func () {
374
+ var c chan struct {}
375
+ var rs * appsv1.ReplicaSet
376
+ var informerFactory kubeinformers.SharedInformerFactory
377
+ var stopTest chan struct {}
378
+
379
+ BeforeEach (func (done Done ) {
380
+ stopTest = make (chan struct {})
381
+ informerFactory = kubeinformers .NewSharedInformerFactory (clientset , time .Second * 30 )
382
+ i := informerFactory .Apps ().V1 ().ReplicaSets ().Informer ()
383
+ informerFactory .Start (stopTest )
384
+ Eventually (i .HasSynced ).Should (BeTrue ())
385
+
386
+ c = make (chan struct {})
387
+ rs = & appsv1.ReplicaSet {
388
+ ObjectMeta : metav1.ObjectMeta {Name : "informer-rs-name" },
389
+ Spec : appsv1.ReplicaSetSpec {
390
+ Selector : & metav1.LabelSelector {
391
+ MatchLabels : map [string ]string {"foo" : "bar" },
392
+ },
393
+ Template : corev1.PodTemplateSpec {
394
+ ObjectMeta : metav1.ObjectMeta {Labels : map [string ]string {"foo" : "bar" }},
395
+ Spec : corev1.PodSpec {
396
+ Containers : []corev1.Container {
397
+ {
398
+ Name : "nginx" ,
399
+ Image : "nginx" ,
400
+ },
401
+ },
402
+ },
403
+ },
404
+ },
405
+ }
406
+ close (done )
407
+ })
408
+
409
+ AfterEach (func (done Done ) {
410
+ close (stopTest )
411
+ close (done )
412
+ })
413
+
414
+ It ("should error if both Informer and InformerProvider are given" , func () {
415
+ q := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "test" )
416
+ rsi := informerFactory .Apps ().V1 ().ReplicaSets ()
417
+ instance := & source.Informer {InformerProvider : rsi , Informer : rsi .Informer ()}
418
+ err := instance .Start (handler.Funcs {
419
+ CreateFunc : func (evt event.CreateEvent , q2 workqueue.RateLimitingInterface ) {},
420
+ UpdateFunc : func (event.UpdateEvent , workqueue.RateLimitingInterface ) {},
421
+ DeleteFunc : func (event.DeleteEvent , workqueue.RateLimitingInterface ) {},
422
+ GenericFunc : func (event.GenericEvent , workqueue.RateLimitingInterface ) {},
423
+ }, q )
424
+ Expect (err ).To (HaveOccurred ())
425
+ })
426
+
427
+ It ("should error if neither Informer and InformerProvider are given" , func () {
428
+ q := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "test" )
429
+ instance := & source.Informer {}
430
+ err := instance .Start (handler.Funcs {
431
+ CreateFunc : func (evt event.CreateEvent , q2 workqueue.RateLimitingInterface ) {},
432
+ UpdateFunc : func (event.UpdateEvent , workqueue.RateLimitingInterface ) {},
433
+ DeleteFunc : func (event.DeleteEvent , workqueue.RateLimitingInterface ) {},
434
+ GenericFunc : func (event.GenericEvent , workqueue.RateLimitingInterface ) {},
435
+ }, q )
436
+ Expect (err ).To (HaveOccurred ())
437
+ })
438
+
439
+ Context ("for a ReplicaSet resource" , func () {
440
+
441
+ It ("should provide a ReplicaSet CreateEvent" , func (done Done ) {
442
+ c := make (chan struct {})
443
+
444
+ q := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "test" )
445
+ instance := & source.Informer {InformerProvider : informerFactory .Apps ().V1 ().ReplicaSets ()}
446
+ err := instance .Start (handler.Funcs {
447
+ CreateFunc : func (evt event.CreateEvent , q2 workqueue.RateLimitingInterface ) {
448
+ defer GinkgoRecover ()
449
+ var err error
450
+ rs , err = clientset .AppsV1 ().ReplicaSets ("default" ).Get (rs .Name , metav1.GetOptions {})
451
+ Expect (err ).NotTo (HaveOccurred ())
452
+
453
+ Expect (q2 ).To (BeIdenticalTo (q ))
454
+ Expect (evt .Meta ).To (Equal (rs ))
455
+ Expect (evt .Object ).To (Equal (rs ))
456
+ close (c )
457
+ },
458
+ UpdateFunc : func (event.UpdateEvent , workqueue.RateLimitingInterface ) {
459
+ defer GinkgoRecover ()
460
+ Fail ("Unexpected UpdateEvent" )
461
+ },
462
+ DeleteFunc : func (event.DeleteEvent , workqueue.RateLimitingInterface ) {
463
+ defer GinkgoRecover ()
464
+ Fail ("Unexpected DeleteEvent" )
465
+ },
466
+ GenericFunc : func (event.GenericEvent , workqueue.RateLimitingInterface ) {
467
+ defer GinkgoRecover ()
468
+ Fail ("Unexpected GenericEvent" )
469
+ },
470
+ }, q )
471
+ Expect (err ).NotTo (HaveOccurred ())
472
+
473
+ rs , err = clientset .AppsV1 ().ReplicaSets ("default" ).Create (rs )
474
+ Expect (err ).NotTo (HaveOccurred ())
475
+ <- c
476
+ close (done )
477
+ }, 30 )
478
+
479
+ It ("should provide a ReplicaSet UpdateEvent" , func (done Done ) {
480
+ var err error
481
+ rs , err = clientset .AppsV1 ().ReplicaSets ("default" ).Get (rs .Name , metav1.GetOptions {})
482
+ Expect (err ).NotTo (HaveOccurred ())
483
+
484
+ rs2 := rs .DeepCopy ()
485
+ rs2 .SetLabels (map [string ]string {"biz" : "baz" })
486
+
487
+ q := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "test" )
488
+ instance := & source.Informer {InformerProvider : informerFactory .Apps ().V1 ().ReplicaSets ()}
489
+ err = instance .Start (handler.Funcs {
490
+ CreateFunc : func (evt event.CreateEvent , q2 workqueue.RateLimitingInterface ) {
491
+ },
492
+ UpdateFunc : func (evt event.UpdateEvent , q2 workqueue.RateLimitingInterface ) {
493
+ defer GinkgoRecover ()
494
+ var err error
495
+ rs2 , err = clientset .AppsV1 ().ReplicaSets ("default" ).Get (rs .Name , metav1.GetOptions {})
496
+ Expect (err ).NotTo (HaveOccurred ())
497
+
498
+ Expect (q2 ).To (Equal (q ))
499
+ Expect (evt .MetaOld ).To (Equal (rs ))
500
+ Expect (evt .ObjectOld ).To (Equal (rs ))
501
+
502
+ Expect (evt .MetaNew ).To (Equal (rs2 ))
503
+ Expect (evt .ObjectNew ).To (Equal (rs2 ))
504
+
505
+ close (c )
506
+ },
507
+ DeleteFunc : func (event.DeleteEvent , workqueue.RateLimitingInterface ) {
508
+ defer GinkgoRecover ()
509
+ Fail ("Unexpected DeleteEvent" )
510
+ },
511
+ GenericFunc : func (event.GenericEvent , workqueue.RateLimitingInterface ) {
512
+ defer GinkgoRecover ()
513
+ Fail ("Unexpected GenericEvent" )
514
+ },
515
+ }, q )
516
+ Expect (err ).NotTo (HaveOccurred ())
517
+
518
+ rs2 , err = clientset .AppsV1 ().ReplicaSets ("default" ).Update (rs2 )
519
+ Expect (err ).NotTo (HaveOccurred ())
520
+ <- c
521
+ close (done )
522
+ })
523
+
524
+ It ("should provide a ReplicaSet DeletedEvent" , func (done Done ) {
525
+ c := make (chan struct {})
526
+
527
+ q := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "test" )
528
+ instance := & source.Informer {InformerProvider : informerFactory .Apps ().V1 ().ReplicaSets ()}
529
+ err := instance .Start (handler.Funcs {
530
+ CreateFunc : func (event.CreateEvent , workqueue.RateLimitingInterface ) {
531
+ },
532
+ UpdateFunc : func (event.UpdateEvent , workqueue.RateLimitingInterface ) {
533
+ },
534
+ DeleteFunc : func (evt event.DeleteEvent , q2 workqueue.RateLimitingInterface ) {
535
+ defer GinkgoRecover ()
536
+ Expect (q2 ).To (Equal (q ))
537
+ Expect (evt .Meta .GetName ()).To (Equal (rs .Name ))
538
+ close (c )
539
+ },
540
+ GenericFunc : func (event.GenericEvent , workqueue.RateLimitingInterface ) {
541
+ defer GinkgoRecover ()
542
+ Fail ("Unexpected GenericEvent" )
543
+ },
544
+ }, q )
545
+ Expect (err ).NotTo (HaveOccurred ())
546
+
547
+ err = clientset .AppsV1 ().ReplicaSets ("default" ).Delete (rs .Name , & metav1.DeleteOptions {})
548
+ Expect (err ).NotTo (HaveOccurred ())
549
+ <- c
550
+ close (done )
551
+ })
552
+ })
553
+ })
372
554
})
0 commit comments