@@ -745,7 +745,36 @@ var _ = Describe("controller", func() {
745
745
}}))
746
746
})
747
747
748
- It ("should requeue a Request after a duration (but not rate-limitted) if the Result sets RequeueAfter (regardless of Requeue)" , func (ctx SpecContext ) {
748
+ It ("should use the priority from Result when the reconciler requests a requeue" , func (ctx SpecContext ) {
749
+ q := & fakePriorityQueue {PriorityQueue : priorityqueue.New [reconcile.Request ]("controller1" )}
750
+ ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
751
+ return q
752
+ }
753
+
754
+ go func () {
755
+ defer GinkgoRecover ()
756
+ Expect (ctrl .Start (ctx )).NotTo (HaveOccurred ())
757
+ }()
758
+
759
+ q .PriorityQueue .AddWithOpts (priorityqueue.AddOpts {Priority : ptr .To (10 )}, request )
760
+
761
+ By ("Invoking Reconciler which will request a requeue" )
762
+ fakeReconcile .AddResult (reconcile.Result {Requeue : true , Priority : ptr .To (99 )}, nil )
763
+ Expect (<- reconciled ).To (Equal (request ))
764
+ Eventually (func () []priorityQueueAddition {
765
+ q .lock .Lock ()
766
+ defer q .lock .Unlock ()
767
+ return q .added
768
+ }).Should (Equal ([]priorityQueueAddition {{
769
+ AddOpts : priorityqueue.AddOpts {
770
+ RateLimited : true ,
771
+ Priority : ptr .To (99 ),
772
+ },
773
+ items : []reconcile.Request {request },
774
+ }}))
775
+ })
776
+
777
+ It ("should requeue a Request after a duration (but not rate-limited) if the Result sets RequeueAfter (regardless of Requeue)" , func (ctx SpecContext ) {
749
778
dq := & DelegatingQueue {TypedRateLimitingInterface : ctrl .NewQueue ("controller1" , nil )}
750
779
ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
751
780
return dq
@@ -775,7 +804,7 @@ var _ = Describe("controller", func() {
775
804
Eventually (func () int { return dq .NumRequeues (request ) }).Should (Equal (0 ))
776
805
})
777
806
778
- It ("should retain the priority with RequeAfter " , func (ctx SpecContext ) {
807
+ It ("should retain the priority with RequeueAfter " , func (ctx SpecContext ) {
779
808
q := & fakePriorityQueue {PriorityQueue : priorityqueue.New [reconcile.Request ]("controller1" )}
780
809
ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
781
810
return q
@@ -804,6 +833,35 @@ var _ = Describe("controller", func() {
804
833
}}))
805
834
})
806
835
836
+ It ("should use the priority from Result with RequeueAfter" , func (ctx SpecContext ) {
837
+ q := & fakePriorityQueue {PriorityQueue : priorityqueue.New [reconcile.Request ]("controller1" )}
838
+ ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
839
+ return q
840
+ }
841
+
842
+ go func () {
843
+ defer GinkgoRecover ()
844
+ Expect (ctrl .Start (ctx )).NotTo (HaveOccurred ())
845
+ }()
846
+
847
+ q .PriorityQueue .AddWithOpts (priorityqueue.AddOpts {Priority : ptr .To (10 )}, request )
848
+
849
+ By ("Invoking Reconciler which will ask for RequeueAfter" )
850
+ fakeReconcile .AddResult (reconcile.Result {RequeueAfter : time .Millisecond * 100 , Priority : ptr .To (99 )}, nil )
851
+ Expect (<- reconciled ).To (Equal (request ))
852
+ Eventually (func () []priorityQueueAddition {
853
+ q .lock .Lock ()
854
+ defer q .lock .Unlock ()
855
+ return q .added
856
+ }).Should (Equal ([]priorityQueueAddition {{
857
+ AddOpts : priorityqueue.AddOpts {
858
+ After : time .Millisecond * 100 ,
859
+ Priority : ptr .To (99 ),
860
+ },
861
+ items : []reconcile.Request {request },
862
+ }}))
863
+ })
864
+
807
865
It ("should perform error behavior if error is not nil, regardless of RequeueAfter" , func (ctx SpecContext ) {
808
866
dq := & DelegatingQueue {TypedRateLimitingInterface : ctrl .NewQueue ("controller1" , nil )}
809
867
ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
@@ -862,6 +920,35 @@ var _ = Describe("controller", func() {
862
920
}}))
863
921
})
864
922
923
+ It ("should use the priority from Result when there was an error" , func (ctx SpecContext ) {
924
+ q := & fakePriorityQueue {PriorityQueue : priorityqueue.New [reconcile.Request ]("controller1" )}
925
+ ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
926
+ return q
927
+ }
928
+
929
+ go func () {
930
+ defer GinkgoRecover ()
931
+ Expect (ctrl .Start (ctx )).NotTo (HaveOccurred ())
932
+ }()
933
+
934
+ q .PriorityQueue .AddWithOpts (priorityqueue.AddOpts {Priority : ptr .To (10 )}, request )
935
+
936
+ By ("Invoking Reconciler which will return an error" )
937
+ fakeReconcile .AddResult (reconcile.Result {Priority : ptr .To (99 )}, errors .New ("oups, I did it again" ))
938
+ Expect (<- reconciled ).To (Equal (request ))
939
+ Eventually (func () []priorityQueueAddition {
940
+ q .lock .Lock ()
941
+ defer q .lock .Unlock ()
942
+ return q .added
943
+ }).Should (Equal ([]priorityQueueAddition {{
944
+ AddOpts : priorityqueue.AddOpts {
945
+ RateLimited : true ,
946
+ Priority : ptr .To (99 ),
947
+ },
948
+ items : []reconcile.Request {request },
949
+ }}))
950
+ })
951
+
865
952
PIt ("should return if the queue is shutdown" , func () {
866
953
// TODO(community): write this test
867
954
})
0 commit comments