@@ -42,6 +42,7 @@ import (
42
42
"sigs.k8s.io/controller-runtime/pkg/handler"
43
43
ctrlmetrics "sigs.k8s.io/controller-runtime/pkg/internal/controller/metrics"
44
44
"sigs.k8s.io/controller-runtime/pkg/internal/log"
45
+ "sigs.k8s.io/controller-runtime/pkg/kontext"
45
46
"sigs.k8s.io/controller-runtime/pkg/predicate"
46
47
"sigs.k8s.io/controller-runtime/pkg/reconcile"
47
48
"sigs.k8s.io/controller-runtime/pkg/source"
@@ -51,13 +52,13 @@ var _ = Describe("controller", func() {
51
52
var fakeReconcile * fakeReconciler
52
53
var ctrl * Controller
53
54
var queue * controllertest.Queue
54
- var reconciled chan reconcile. Request
55
+ var reconciled chan fakeReconcilerRequest
55
56
var request = reconcile.Request {
56
57
NamespacedName : types.NamespacedName {Namespace : "foo" , Name : "bar" },
57
58
}
58
59
59
60
BeforeEach (func () {
60
- reconciled = make (chan reconcile. Request )
61
+ reconciled = make (chan fakeReconcilerRequest )
61
62
fakeReconcile = & fakeReconciler {
62
63
Requests : reconciled ,
63
64
results : make (chan fakeReconcileResultPair , 10 /* chosen by the completely scientific approach of guessing */ ),
@@ -80,7 +81,7 @@ var _ = Describe("controller", func() {
80
81
ctx , cancel := context .WithCancel (context .Background ())
81
82
defer cancel ()
82
83
83
- ctrl .Do = reconcile .Func (func (context.Context , reconcile.Request ) (reconcile.Result , error ) {
84
+ ctrl .Do = reconcile .Func (func (doCtx context.Context , doReq reconcile.Request ) (reconcile.Result , error ) {
84
85
return reconcile.Result {Requeue : true }, nil
85
86
})
86
87
result , err := ctrl .Reconcile (ctx ,
@@ -325,7 +326,7 @@ var _ = Describe("controller", func() {
325
326
326
327
By ("Invoking Reconciler" )
327
328
fakeReconcile .AddResult (reconcile.Result {}, nil )
328
- Expect (<- reconciled ). To ( Equal ( request ) )
329
+ checkReconcile (<- reconciled , request )
329
330
330
331
By ("Removing the item from the queue" )
331
332
Eventually (queue .Len ).Should (Equal (0 ))
@@ -370,14 +371,14 @@ var _ = Describe("controller", func() {
370
371
371
372
By ("Invoking Reconciler which will give an error" )
372
373
fakeReconcile .AddResult (reconcile.Result {}, fmt .Errorf ("expected error: reconcile" ))
373
- Expect (<- reconciled ). To ( Equal ( request ) )
374
+ checkReconcile (<- reconciled , request )
374
375
queue .AddedRateLimitedLock .Lock ()
375
376
Expect (queue .AddedRatelimited ).To (Equal ([]any {request }))
376
377
queue .AddedRateLimitedLock .Unlock ()
377
378
378
379
By ("Invoking Reconciler a second time without error" )
379
380
fakeReconcile .AddResult (reconcile.Result {}, nil )
380
- Expect (<- reconciled ). To ( Equal ( request ) )
381
+ checkReconcile (<- reconciled , request )
381
382
382
383
By ("Removing the item from the queue" )
383
384
Eventually (queue .Len ).Should (Equal (0 ))
@@ -396,7 +397,7 @@ var _ = Describe("controller", func() {
396
397
397
398
By ("Invoking Reconciler which will give an error" )
398
399
fakeReconcile .AddResult (reconcile.Result {}, reconcile .TerminalError (fmt .Errorf ("expected error: reconcile" )))
399
- Expect (<- reconciled ). To ( Equal ( request ) )
400
+ checkReconcile (<- reconciled , request )
400
401
401
402
queue .AddedRateLimitedLock .Lock ()
402
403
Expect (queue .AddedRatelimited ).To (BeEmpty ())
@@ -423,18 +424,18 @@ var _ = Describe("controller", func() {
423
424
424
425
By ("Invoking Reconciler which returns an error" )
425
426
fakeReconcile .AddResult (reconcile.Result {}, fmt .Errorf ("something's wrong" ))
426
- Expect (<- reconciled ). To ( Equal ( request ) )
427
+ checkReconcile (<- reconciled , request )
427
428
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : 1 , AddRateLimited : 1 }))
428
429
429
430
By ("Invoking Reconciler a second time with an error" )
430
431
fakeReconcile .AddResult (reconcile.Result {}, fmt .Errorf ("another thing's wrong" ))
431
- Expect (<- reconciled ). To ( Equal ( request ) )
432
+ checkReconcile (<- reconciled , request )
432
433
433
434
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : 1 , AddRateLimited : 2 }))
434
435
435
436
By ("Invoking Reconciler a third time, where it finally does not return an error" )
436
437
fakeReconcile .AddResult (reconcile.Result {}, nil )
437
- Expect (<- reconciled ). To ( Equal ( request ) )
438
+ checkReconcile (<- reconciled , request )
438
439
439
440
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : 0 , AddRateLimited : 2 }))
440
441
@@ -459,12 +460,12 @@ var _ = Describe("controller", func() {
459
460
460
461
By ("Invoking Reconciler which will ask for requeue" )
461
462
fakeReconcile .AddResult (reconcile.Result {Requeue : true }, nil )
462
- Expect (<- reconciled ). To ( Equal ( request ) )
463
+ checkReconcile (<- reconciled , request )
463
464
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : 1 , AddRateLimited : 1 }))
464
465
465
466
By ("Invoking Reconciler a second time without asking for requeue" )
466
467
fakeReconcile .AddResult (reconcile.Result {Requeue : false }, nil )
467
- Expect (<- reconciled ). To ( Equal ( request ) )
468
+ checkReconcile (<- reconciled , request )
468
469
469
470
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : 0 , AddRateLimited : 1 }))
470
471
@@ -489,12 +490,12 @@ var _ = Describe("controller", func() {
489
490
490
491
By ("Invoking Reconciler which will ask for requeue & requeueafter" )
491
492
fakeReconcile .AddResult (reconcile.Result {RequeueAfter : time .Millisecond * 100 , Requeue : true }, nil )
492
- Expect (<- reconciled ). To ( Equal ( request ) )
493
+ checkReconcile (<- reconciled , request )
493
494
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : 0 , AddAfter : 1 }))
494
495
495
496
By ("Invoking Reconciler a second time asking for a requeueafter only" )
496
497
fakeReconcile .AddResult (reconcile.Result {RequeueAfter : time .Millisecond * 100 }, nil )
497
- Expect (<- reconciled ). To ( Equal ( request ) )
498
+ checkReconcile (<- reconciled , request )
498
499
499
500
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : - 1 /* we don't increment the count in addafter */ , AddAfter : 2 }))
500
501
@@ -519,12 +520,12 @@ var _ = Describe("controller", func() {
519
520
520
521
By ("Invoking Reconciler which will ask for requeueafter with an error" )
521
522
fakeReconcile .AddResult (reconcile.Result {RequeueAfter : time .Millisecond * 100 }, fmt .Errorf ("expected error: reconcile" ))
522
- Expect (<- reconciled ). To ( Equal ( request ) )
523
+ checkReconcile (<- reconciled , request )
523
524
Eventually (dq .getCounts ).Should (Equal (countInfo {Trying : 1 , AddRateLimited : 1 }))
524
525
525
526
By ("Invoking Reconciler a second time asking for requeueafter without errors" )
526
527
fakeReconcile .AddResult (reconcile.Result {RequeueAfter : time .Millisecond * 100 }, nil )
527
- Expect (<- reconciled ). To ( Equal ( request ) )
528
+ checkReconcile (<- reconciled , request )
528
529
Eventually (dq .getCounts ).Should (Equal (countInfo {AddAfter : 1 , AddRateLimited : 1 }))
529
530
530
531
By ("Removing the item from the queue" )
@@ -571,7 +572,7 @@ var _ = Describe("controller", func() {
571
572
queue .Add (request )
572
573
573
574
fakeReconcile .AddResult (reconcile.Result {}, nil )
574
- Expect (<- reconciled ). To ( Equal ( request ) )
575
+ checkReconcile (<- reconciled , request )
575
576
Eventually (func () error {
576
577
Expect (ctrlmetrics .ReconcileTotal .WithLabelValues (ctrl .Name , "success" ).Write (& reconcileTotal )).To (Succeed ())
577
578
if actual := reconcileTotal .GetCounter ().GetValue (); actual != 1.0 {
@@ -600,7 +601,7 @@ var _ = Describe("controller", func() {
600
601
queue .Add (request )
601
602
602
603
fakeReconcile .AddResult (reconcile.Result {}, fmt .Errorf ("expected error: reconcile" ))
603
- Expect (<- reconciled ). To ( Equal ( request ) )
604
+ checkReconcile (<- reconciled , request )
604
605
Eventually (func () error {
605
606
Expect (ctrlmetrics .ReconcileTotal .WithLabelValues (ctrl .Name , "error" ).Write (& reconcileTotal )).To (Succeed ())
606
607
if actual := reconcileTotal .GetCounter ().GetValue (); actual != 1.0 {
@@ -630,7 +631,7 @@ var _ = Describe("controller", func() {
630
631
queue .Add (request )
631
632
632
633
fakeReconcile .AddResult (reconcile.Result {Requeue : true }, nil )
633
- Expect (<- reconciled ). To ( Equal ( request ) )
634
+ checkReconcile (<- reconciled , request )
634
635
Eventually (func () error {
635
636
Expect (ctrlmetrics .ReconcileTotal .WithLabelValues (ctrl .Name , "requeue" ).Write (& reconcileTotal )).To (Succeed ())
636
637
if actual := reconcileTotal .GetCounter ().GetValue (); actual != 1.0 {
@@ -659,7 +660,7 @@ var _ = Describe("controller", func() {
659
660
queue .Add (request )
660
661
661
662
fakeReconcile .AddResult (reconcile.Result {RequeueAfter : 5 * time .Hour }, nil )
662
- Expect (<- reconciled ). To ( Equal ( request ) )
663
+ checkReconcile (<- reconciled , request )
663
664
Eventually (func () error {
664
665
Expect (ctrlmetrics .ReconcileTotal .WithLabelValues (ctrl .Name , "requeue_after" ).Write (& reconcileTotal )).To (Succeed ())
665
666
if actual := reconcileTotal .GetCounter ().GetValue (); actual != 1.0 {
@@ -692,7 +693,7 @@ var _ = Describe("controller", func() {
692
693
693
694
By ("Invoking Reconciler which will give an error" )
694
695
fakeReconcile .AddResult (reconcile.Result {}, fmt .Errorf ("expected error: reconcile" ))
695
- Expect (<- reconciled ). To ( Equal ( request ) )
696
+ checkReconcile (<- reconciled , request )
696
697
Eventually (func () error {
697
698
Expect (ctrlmetrics .ReconcileErrors .WithLabelValues (ctrl .Name ).Write (& reconcileErrs )).To (Succeed ())
698
699
if reconcileErrs .GetCounter ().GetValue () != 1.0 {
@@ -703,7 +704,7 @@ var _ = Describe("controller", func() {
703
704
704
705
By ("Invoking Reconciler a second time without error" )
705
706
fakeReconcile .AddResult (reconcile.Result {}, nil )
706
- Expect (<- reconciled ). To ( Equal ( request ) )
707
+ checkReconcile (<- reconciled , request )
707
708
708
709
By ("Removing the item from the queue" )
709
710
Eventually (queue .Len ).Should (Equal (0 ))
@@ -734,7 +735,7 @@ var _ = Describe("controller", func() {
734
735
735
736
By ("Invoking Reconciler" )
736
737
fakeReconcile .AddResult (reconcile.Result {}, nil )
737
- Expect (<- reconciled ). To ( Equal ( request ) )
738
+ checkReconcile (<- reconciled , request )
738
739
739
740
By ("Removing the item from the queue" )
740
741
Eventually (queue .Len ).Should (Equal (0 ))
@@ -832,20 +833,26 @@ type fakeReconcileResultPair struct {
832
833
Err error
833
834
}
834
835
836
+ type fakeReconcilerRequest struct {
837
+ reconcile.Request
838
+ ctx context.Context
839
+ }
840
+
835
841
type fakeReconciler struct {
836
- Requests chan reconcile. Request
842
+ Requests chan fakeReconcilerRequest
837
843
results chan fakeReconcileResultPair
838
844
}
839
845
840
846
func (f * fakeReconciler ) AddResult (res reconcile.Result , err error ) {
841
847
f .results <- fakeReconcileResultPair {Result : res , Err : err }
842
848
}
843
849
844
- func (f * fakeReconciler ) Reconcile (_ context.Context , r reconcile.Request ) (reconcile.Result , error ) {
850
+ func (f * fakeReconciler ) Reconcile (ctx context.Context , r reconcile.Request ) (reconcile.Result , error ) {
845
851
res := <- f .results
846
852
if f .Requests != nil {
847
- f .Requests <- r
853
+ f .Requests <- fakeReconcilerRequest { ctx : ctx , Request : r }
848
854
}
855
+
849
856
return res .Result , res .Err
850
857
}
851
858
@@ -877,3 +884,10 @@ func (c *cacheWithIndefinitelyBlockingGetInformer) GetInformer(ctx context.Conte
877
884
<- ctx .Done ()
878
885
return nil , errors .New ("GetInformer timed out" )
879
886
}
887
+
888
+ func checkReconcile (rec fakeReconcilerRequest , request reconcile.Request ) {
889
+ Expect (rec .Request ).To (Equal (request ))
890
+
891
+ _ , ok := kontext .ClusterFrom (rec .ctx )
892
+ Expect (ok ).To (BeTrue ())
893
+ }
0 commit comments