@@ -360,7 +360,7 @@ var _ = Describe("controller", func() {
360
360
})
361
361
362
362
It ("should requeue a Request after a duration if the Result sets Requeue:true and " +
363
- "RequeueAfter is set" , func () {
363
+ "RequeueAfter is set and forget the item " , func () {
364
364
fakeReconcile .Result .RequeueAfter = time .Millisecond * 100
365
365
go func () {
366
366
defer GinkgoRecover ()
@@ -375,14 +375,14 @@ var _ = Describe("controller", func() {
375
375
376
376
By ("Invoking Reconciler which will ask for requeue" )
377
377
Expect (<- reconciled ).To (Equal (request ))
378
- Expect (dq .countAdd ).To (Equal (1 ))
378
+ Expect (dq .countAdd ).To (Equal (0 ))
379
379
Expect (dq .countAddAfter ).To (Equal (1 ))
380
380
Expect (dq .countAddRateLimited ).To (Equal (0 ))
381
381
382
382
By ("Invoking Reconciler a second time without asking for requeue" )
383
383
fakeReconcile .Result .Requeue = false
384
384
Expect (<- reconciled ).To (Equal (request ))
385
- Expect (dq .countAdd ).To (Equal (1 ))
385
+ Expect (dq .countAdd ).To (Equal (0 ))
386
386
Expect (dq .countAddAfter ).To (Equal (1 ))
387
387
Expect (dq .countAddRateLimited ).To (Equal (0 ))
388
388
@@ -391,6 +391,42 @@ var _ = Describe("controller", func() {
391
391
Eventually (func () int { return ctrl .Queue .NumRequeues (request ) }).Should (Equal (0 ))
392
392
})
393
393
394
+ PIt ("should not requeue a Request after a duration if the Result sets Requeue:true and " +
395
+ "RequeueAfter is set and err is not nil" , func () {
396
+
397
+ fakeReconcile .Result .RequeueAfter = time .Millisecond * 100
398
+ fakeReconcile .Err = fmt .Errorf ("expected error: reconcile" )
399
+ go func () {
400
+ defer GinkgoRecover ()
401
+ Expect (ctrl .Start (stop )).NotTo (HaveOccurred ())
402
+ }()
403
+ dq := & DelegatingQueue {RateLimitingInterface : ctrl .Queue }
404
+ ctrl .Queue = dq
405
+ ctrl .JitterPeriod = time .Millisecond
406
+ ctrl .Queue .Add (request )
407
+ Expect (dq .countAdd ).To (Equal (1 ))
408
+ Expect (dq .countAddAfter ).To (Equal (0 ))
409
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
410
+
411
+ By ("Invoking Reconciler which will ask for requeue with an error" )
412
+ Expect (<- reconciled ).To (Equal (request ))
413
+ Expect (dq .countAdd ).To (Equal (1 ))
414
+ Expect (dq .countAddAfter ).To (Equal (0 ))
415
+ Expect (dq .countAddRateLimited ).To (Equal (1 ))
416
+
417
+ fakeReconcile .Result .RequeueAfter = time .Millisecond * 100
418
+ fakeReconcile .Err = nil
419
+ By ("Invoking Reconciler a second time asking for requeue without errors" )
420
+ Expect (<- reconciled ).To (Equal (request ))
421
+ Expect (dq .countAdd ).To (Equal (0 ))
422
+ Expect (dq .countAddAfter ).To (Equal (1 ))
423
+ Expect (dq .countAddRateLimited ).To (Equal (1 ))
424
+
425
+ By ("Removing the item from the queue" )
426
+ Eventually (ctrl .Queue .Len ).Should (Equal (0 ))
427
+ Eventually (func () int { return ctrl .Queue .NumRequeues (request ) }).Should (Equal (0 ))
428
+ })
429
+
394
430
PIt ("should forget the Request if Reconciler is successful" , func () {
395
431
// TODO(community): write this test
396
432
})
@@ -639,3 +675,8 @@ func (q *DelegatingQueue) Add(item interface{}) {
639
675
q .countAdd ++
640
676
q .RateLimitingInterface .Add (item )
641
677
}
678
+
679
+ func (q * DelegatingQueue ) Forget (item interface {}) {
680
+ q .countAdd --
681
+ q .RateLimitingInterface .Forget (item )
682
+ }
0 commit comments