@@ -332,14 +332,59 @@ var _ = Describe("controller", func() {
332
332
defer GinkgoRecover ()
333
333
Expect (ctrl .Start (stop )).NotTo (HaveOccurred ())
334
334
}()
335
+ dq := & DelegatingQueue {RateLimitingInterface : ctrl .Queue }
336
+ ctrl .Queue = dq
335
337
ctrl .Queue .Add (request )
338
+ Expect (dq .countAdd ).To (Equal (1 ))
339
+ Expect (dq .countAddAfter ).To (Equal (0 ))
340
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
336
341
337
342
By ("Invoking Reconciler which will ask for requeue" )
338
343
Expect (<- reconciled ).To (Equal (request ))
344
+ Expect (dq .countAdd ).To (Equal (1 ))
345
+ Expect (dq .countAddAfter ).To (Equal (0 ))
346
+ Expect (dq .countAddRateLimited ).To (Equal (1 ))
339
347
340
348
By ("Invoking Reconciler a second time without asking for requeue" )
341
349
fakeReconcile .Result .Requeue = false
342
350
Expect (<- reconciled ).To (Equal (request ))
351
+ Expect (dq .countAdd ).To (Equal (1 ))
352
+ Expect (dq .countAddAfter ).To (Equal (0 ))
353
+ Expect (dq .countAddRateLimited ).To (Equal (1 ))
354
+
355
+ By ("Removing the item from the queue" )
356
+ Eventually (ctrl .Queue .Len ).Should (Equal (0 ))
357
+ Eventually (func () int { return ctrl .Queue .NumRequeues (request ) }).Should (Equal (0 ))
358
+ })
359
+
360
+ It ("should requeue a Request after a duration if the Result sets Requeue:true and " +
361
+ "RequeueAfter is set" , func () {
362
+ after := time .Millisecond * 100
363
+ fakeReconcile .Result .Requeue = true
364
+ fakeReconcile .Result .RequeueAfter = & after
365
+ go func () {
366
+ defer GinkgoRecover ()
367
+ Expect (ctrl .Start (stop )).NotTo (HaveOccurred ())
368
+ }()
369
+ dq := & DelegatingQueue {RateLimitingInterface : ctrl .Queue }
370
+ ctrl .Queue = dq
371
+ ctrl .Queue .Add (request )
372
+ Expect (dq .countAdd ).To (Equal (1 ))
373
+ Expect (dq .countAddAfter ).To (Equal (0 ))
374
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
375
+
376
+ By ("Invoking Reconciler which will ask for requeue" )
377
+ Expect (<- reconciled ).To (Equal (request ))
378
+ Expect (dq .countAdd ).To (Equal (1 ))
379
+ Expect (dq .countAddAfter ).To (Equal (1 ))
380
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
381
+
382
+ By ("Invoking Reconciler a second time without asking for requeue" )
383
+ fakeReconcile .Result .Requeue = false
384
+ Expect (<- reconciled ).To (Equal (request ))
385
+ Expect (dq .countAdd ).To (Equal (1 ))
386
+ Expect (dq .countAddAfter ).To (Equal (1 ))
387
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
343
388
344
389
By ("Removing the item from the queue" )
345
390
Eventually (ctrl .Queue .Len ).Should (Equal (0 ))
@@ -363,3 +408,26 @@ var _ = Describe("controller", func() {
363
408
})
364
409
})
365
410
})
411
+
412
+ type DelegatingQueue struct {
413
+ workqueue.RateLimitingInterface
414
+
415
+ countAddRateLimited int
416
+ countAdd int
417
+ countAddAfter int
418
+ }
419
+
420
+ func (q * DelegatingQueue ) AddRateLimited (item interface {}) {
421
+ q .countAddRateLimited += 1
422
+ q .RateLimitingInterface .AddRateLimited (item )
423
+ }
424
+
425
+ func (q * DelegatingQueue ) AddAfter (item interface {}, d time.Duration ) {
426
+ q .countAddAfter += 1
427
+ q .RateLimitingInterface .AddAfter (item , d )
428
+ }
429
+
430
+ func (q * DelegatingQueue ) Add (item interface {}) {
431
+ q .countAdd += 1
432
+ q .RateLimitingInterface .Add (item )
433
+ }
0 commit comments