@@ -745,7 +745,36 @@ var _ = Describe("controller", func() {
745745 }}))
746746 })
747747
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 ) {
749778 dq := & DelegatingQueue {TypedRateLimitingInterface : ctrl .NewQueue ("controller1" , nil )}
750779 ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
751780 return dq
@@ -775,7 +804,7 @@ var _ = Describe("controller", func() {
775804 Eventually (func () int { return dq .NumRequeues (request ) }).Should (Equal (0 ))
776805 })
777806
778- It ("should retain the priority with RequeAfter " , func (ctx SpecContext ) {
807+ It ("should retain the priority with RequeueAfter " , func (ctx SpecContext ) {
779808 q := & fakePriorityQueue {PriorityQueue : priorityqueue.New [reconcile.Request ]("controller1" )}
780809 ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
781810 return q
@@ -804,6 +833,35 @@ var _ = Describe("controller", func() {
804833 }}))
805834 })
806835
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+
807865 It ("should perform error behavior if error is not nil, regardless of RequeueAfter" , func (ctx SpecContext ) {
808866 dq := & DelegatingQueue {TypedRateLimitingInterface : ctrl .NewQueue ("controller1" , nil )}
809867 ctrl .NewQueue = func (string , workqueue.TypedRateLimiter [reconcile.Request ]) workqueue.TypedRateLimitingInterface [reconcile.Request ] {
@@ -862,6 +920,35 @@ var _ = Describe("controller", func() {
862920 }}))
863921 })
864922
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+
865952 PIt ("should return if the queue is shutdown" , func () {
866953 // TODO(community): write this test
867954 })
0 commit comments