@@ -8,11 +8,13 @@ import (
88 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
99 "k8s.io/apimachinery/pkg/runtime"
1010 "k8s.io/apimachinery/pkg/types"
11+ "k8s.io/apimachinery/pkg/util/cache"
1112 "k8s.io/apimachinery/pkg/util/sets"
1213 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
1314 "k8s.io/client-go/util/workqueue"
1415 elbv2api "sigs.k8s.io/aws-load-balancer-controller/apis/elbv2/v1beta1"
1516 "sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
17+ "sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
1618 testclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
1719 "sigs.k8s.io/controller-runtime/pkg/log"
1820 "strconv"
@@ -31,15 +33,14 @@ func TestDeferredReconcilerConstructor(t *testing.T) {
3133
3234 deferredReconciler := d .(* deferredTargetGroupBindingReconcilerImpl )
3335 assert .Equal (t , dq , deferredReconciler .delayQueue )
34- assert .Equal (t , syncPeriod , deferredReconciler .syncPeriod )
3536 assert .Equal (t , k8sClient , deferredReconciler .k8sClient )
3637 assert .Equal (t , logger , deferredReconciler .logger )
3738}
3839
3940func TestDeferredReconcilerEnqueue (t * testing.T ) {
40- syncPeriod := 5 * time .Minute
4141 testCases := []struct {
4242 name string
43+ tgbInCache []* elbv2api.TargetGroupBinding
4344 tgbToEnqueue []* elbv2api.TargetGroupBinding
4445 expectedQueueEntries sets.Set [types.NamespacedName ]
4546 }{
@@ -59,8 +60,8 @@ func TestDeferredReconcilerEnqueue(t *testing.T) {
5960 }),
6061 },
6162 {
62- name : "sync period too short, do not enqueue" ,
63- tgbToEnqueue : []* elbv2api.TargetGroupBinding {
63+ name : "item in cache, no enqueue" ,
64+ tgbInCache : []* elbv2api.TargetGroupBinding {
6465 {
6566 ObjectMeta : metav1.ObjectMeta {
6667 Name : "tgb1" ,
@@ -71,25 +72,18 @@ func TestDeferredReconcilerEnqueue(t *testing.T) {
7172 },
7273 },
7374 },
74- expectedQueueEntries : make (sets.Set [types.NamespacedName ]),
75- },
76- {
77- name : "sync period too long, do enqueue" ,
7875 tgbToEnqueue : []* elbv2api.TargetGroupBinding {
7976 {
8077 ObjectMeta : metav1.ObjectMeta {
8178 Name : "tgb1" ,
8279 Namespace : "ns" ,
8380 Annotations : map [string ]string {
84- annotations .AnnotationCheckPointTimestamp : strconv .FormatInt (time .Now ().Add ( - 2 * syncPeriod ). Unix (), 10 ),
81+ annotations .AnnotationCheckPointTimestamp : strconv .FormatInt (time .Now ().Unix (), 10 ),
8582 },
8683 },
8784 },
8885 },
89- expectedQueueEntries : sets .New (types.NamespacedName {
90- Name : "tgb1" ,
91- Namespace : "ns" ,
92- }),
86+ expectedQueueEntries : make (sets.Set [types.NamespacedName ]),
9387 },
9488 {
9589 name : "multiple tgb" ,
@@ -196,15 +190,20 @@ func TestDeferredReconcilerEnqueue(t *testing.T) {
196190 Build ()
197191
198192 impl := deferredTargetGroupBindingReconcilerImpl {
199- delayQueue : dq ,
200- syncPeriod : syncPeriod ,
201- k8sClient : k8sClient ,
202- logger : logr .New (& log.NullLogSink {}),
193+ delayQueue : dq ,
194+ k8sClient : k8sClient ,
195+ logger : logr .New (& log.NullLogSink {}),
196+ processedTGBCache : cache .NewExpiring (),
197+ processedTGBCacheTTL : 1 * time .Minute ,
203198
204199 delayedReconcileTime : 0 * time .Millisecond ,
205200 maxJitter : 0 * time .Millisecond ,
206201 }
207202
203+ for _ , tgb := range tc .tgbInCache {
204+ impl .processedTGBCache .Set (k8s .NamespacedName (tgb ), true , time .Minute * 1 )
205+ }
206+
208207 for _ , tgb := range tc .tgbToEnqueue {
209208 impl .Enqueue (tgb )
210209 }
@@ -261,10 +260,12 @@ func TestDeferredReconcilerRun(t *testing.T) {
261260
262261 impl := deferredTargetGroupBindingReconcilerImpl {
263262 delayQueue : dq ,
264- syncPeriod : 5 * time .Minute ,
265263 k8sClient : k8sClient ,
266264 logger : logr .New (& log.NullLogSink {}),
267265
266+ processedTGBCache : cache .NewExpiring (),
267+ processedTGBCacheTTL : 1 * time .Minute ,
268+
268269 delayedReconcileTime : 0 * time .Millisecond ,
269270 maxJitter : 0 * time .Millisecond ,
270271 }
@@ -292,24 +293,6 @@ func TestHandleDeferredItem(t *testing.T) {
292293 Namespace : "ns" ,
293294 },
294295 },
295- {
296- name : "not eligible" ,
297- nsn : types.NamespacedName {
298- Name : "name" ,
299- Namespace : "ns" ,
300- },
301- storedTGB : & elbv2api.TargetGroupBinding {
302- ObjectMeta : metav1.ObjectMeta {
303- Name : "name" ,
304- Namespace : "ns" ,
305- Annotations : map [string ]string {
306- annotations .AnnotationCheckPoint : "foo" ,
307- annotations .AnnotationCheckPointTimestamp : strconv .FormatInt (time .Now ().Unix (), 10 ),
308- },
309- },
310- },
311- expectedCheckPoint : aws .String ("foo" ),
312- },
313296 {
314297 name : "eligible" ,
315298 nsn : types.NamespacedName {
@@ -355,10 +338,12 @@ func TestHandleDeferredItem(t *testing.T) {
355338
356339 impl := deferredTargetGroupBindingReconcilerImpl {
357340 delayQueue : dq ,
358- syncPeriod : syncPeriod ,
359341 k8sClient : k8sClient ,
360342 logger : logr .New (& log.NullLogSink {}),
361343
344+ processedTGBCache : cache .NewExpiring (),
345+ processedTGBCacheTTL : 1 * time .Minute ,
346+
362347 delayedReconcileTime : 0 * time .Millisecond ,
363348 maxJitter : 0 * time .Millisecond ,
364349 }
0 commit comments