@@ -332,14 +332,57 @@ 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
+ fakeReconcile .Result .RequeueAfter = time .Millisecond * 100
363
+ go func () {
364
+ defer GinkgoRecover ()
365
+ Expect (ctrl .Start (stop )).NotTo (HaveOccurred ())
366
+ }()
367
+ dq := & DelegatingQueue {RateLimitingInterface : ctrl .Queue }
368
+ ctrl .Queue = dq
369
+ ctrl .Queue .Add (request )
370
+ Expect (dq .countAdd ).To (Equal (1 ))
371
+ Expect (dq .countAddAfter ).To (Equal (0 ))
372
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
373
+
374
+ By ("Invoking Reconciler which will ask for requeue" )
375
+ Expect (<- reconciled ).To (Equal (request ))
376
+ Expect (dq .countAdd ).To (Equal (1 ))
377
+ Expect (dq .countAddAfter ).To (Equal (1 ))
378
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
379
+
380
+ By ("Invoking Reconciler a second time without asking for requeue" )
381
+ fakeReconcile .Result .Requeue = false
382
+ Expect (<- reconciled ).To (Equal (request ))
383
+ Expect (dq .countAdd ).To (Equal (1 ))
384
+ Expect (dq .countAddAfter ).To (Equal (1 ))
385
+ Expect (dq .countAddRateLimited ).To (Equal (0 ))
343
386
344
387
By ("Removing the item from the queue" )
345
388
Eventually (ctrl .Queue .Len ).Should (Equal (0 ))
@@ -363,3 +406,26 @@ var _ = Describe("controller", func() {
363
406
})
364
407
})
365
408
})
409
+
410
+ type DelegatingQueue struct {
411
+ workqueue.RateLimitingInterface
412
+
413
+ countAddRateLimited int
414
+ countAdd int
415
+ countAddAfter int
416
+ }
417
+
418
+ func (q * DelegatingQueue ) AddRateLimited (item interface {}) {
419
+ q .countAddRateLimited += 1
420
+ q .RateLimitingInterface .AddRateLimited (item )
421
+ }
422
+
423
+ func (q * DelegatingQueue ) AddAfter (item interface {}, d time.Duration ) {
424
+ q .countAddAfter += 1
425
+ q .RateLimitingInterface .AddAfter (item , d )
426
+ }
427
+
428
+ func (q * DelegatingQueue ) Add (item interface {}) {
429
+ q .countAdd += 1
430
+ q .RateLimitingInterface .Add (item )
431
+ }
0 commit comments