Skip to content

Commit 4cd3c6d

Browse files
vishwas121Vishwas Choudhary
authored andcommitted
chore: add tests for event emission in tgb controller
1 parent ad2dc10 commit 4cd3c6d

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed

controllers/elbv2/targetgroupbinding_controller_test.go

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,130 @@ func TestTargetGroupBindingReconciler_Delete_Stuck(t *testing.T) {
132132
assert.Equal(t, "cleanup failed due to AWS error", condition.Message)
133133
}
134134
}
135+
136+
func TestTargetGroupBindingReconciler_Reconcile_FailedReconcile(t *testing.T) {
137+
scheme := runtime.NewScheme()
138+
clientgoscheme.AddToScheme(scheme)
139+
elbv2api.AddToScheme(scheme)
140+
141+
tgb := &elbv2api.TargetGroupBinding{
142+
ObjectMeta: metav1.ObjectMeta{
143+
Name: "test-tgb",
144+
Namespace: "default",
145+
},
146+
Spec: elbv2api.TargetGroupBindingSpec{
147+
TargetGroupARN: "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/test/123",
148+
},
149+
}
150+
151+
k8sClient := testclient.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(tgb).WithRuntimeObjects(tgb).Build()
152+
153+
// Setup Mocks
154+
ctrl := gomock.NewController(t)
155+
defer ctrl.Finish()
156+
157+
mockFinalizerManager := k8s.NewMockFinalizerManager(ctrl)
158+
mockFinalizerManager.EXPECT().AddFinalizers(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
159+
160+
mockResMgr := targetgroupbinding.NewMockResourceManager(ctrl)
161+
mockResMgr.EXPECT().Reconcile(gomock.Any(), gomock.Any()).Return(false, errors.New("target group not found"))
162+
163+
fakeRecorder := record.NewFakeRecorder(10)
164+
165+
reconciler := &targetGroupBindingReconciler{
166+
k8sClient: k8sClient,
167+
eventRecorder: fakeRecorder,
168+
finalizerManager: mockFinalizerManager,
169+
tgbResourceManager: mockResMgr,
170+
deferredTargetGroupBindingReconciler: &mockDeferredReconciler{},
171+
logger: log.Log.WithName("controllers").WithName("TargetGroupBinding"),
172+
metricsCollector: &mockMetricCollector{},
173+
reconcileCounters: metricsutil.NewReconcileCounters(),
174+
}
175+
176+
req := reconcile.Request{
177+
NamespacedName: client.ObjectKey{
178+
Namespace: "default",
179+
Name: "test-tgb",
180+
},
181+
}
182+
183+
// EXECUTE
184+
_, err := reconciler.Reconcile(context.Background(), req)
185+
186+
// VERIFY
187+
assert.Error(t, err)
188+
assert.Contains(t, err.Error(), "target group not found")
189+
190+
// Verify FailedReconcile event was emitted
191+
select {
192+
case event := <-fakeRecorder.Events:
193+
assert.Contains(t, event, "FailedReconcile")
194+
assert.Contains(t, event, "target group not found")
195+
default:
196+
t.Fatal("expected FailedReconcile event but none was emitted")
197+
}
198+
}
199+
200+
func TestTargetGroupBindingReconciler_Reconcile_Success(t *testing.T) {
201+
scheme := runtime.NewScheme()
202+
clientgoscheme.AddToScheme(scheme)
203+
elbv2api.AddToScheme(scheme)
204+
205+
tgb := &elbv2api.TargetGroupBinding{
206+
ObjectMeta: metav1.ObjectMeta{
207+
Name: "test-tgb",
208+
Namespace: "default",
209+
},
210+
Spec: elbv2api.TargetGroupBindingSpec{
211+
TargetGroupARN: "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/test/123",
212+
},
213+
}
214+
215+
k8sClient := testclient.NewClientBuilder().WithScheme(scheme).WithStatusSubresource(tgb).WithRuntimeObjects(tgb).Build()
216+
217+
// Setup Mocks
218+
ctrl := gomock.NewController(t)
219+
defer ctrl.Finish()
220+
221+
mockFinalizerManager := k8s.NewMockFinalizerManager(ctrl)
222+
mockFinalizerManager.EXPECT().AddFinalizers(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil)
223+
224+
mockResMgr := targetgroupbinding.NewMockResourceManager(ctrl)
225+
mockResMgr.EXPECT().Reconcile(gomock.Any(), gomock.Any()).Return(false, nil)
226+
227+
fakeRecorder := record.NewFakeRecorder(10)
228+
229+
reconciler := &targetGroupBindingReconciler{
230+
k8sClient: k8sClient,
231+
eventRecorder: fakeRecorder,
232+
finalizerManager: mockFinalizerManager,
233+
tgbResourceManager: mockResMgr,
234+
deferredTargetGroupBindingReconciler: &mockDeferredReconciler{},
235+
logger: log.Log.WithName("controllers").WithName("TargetGroupBinding"),
236+
metricsCollector: &mockMetricCollector{},
237+
reconcileCounters: metricsutil.NewReconcileCounters(),
238+
}
239+
240+
req := reconcile.Request{
241+
NamespacedName: client.ObjectKey{
242+
Namespace: "default",
243+
Name: "test-tgb",
244+
},
245+
}
246+
247+
// EXECUTE
248+
_, err := reconciler.Reconcile(context.Background(), req)
249+
250+
// VERIFY
251+
assert.NoError(t, err)
252+
253+
// Verify SuccessfullyReconciled event was emitted
254+
select {
255+
case event := <-fakeRecorder.Events:
256+
assert.Contains(t, event, "SuccessfullyReconciled")
257+
assert.Contains(t, event, "Successfully reconciled")
258+
default:
259+
t.Fatal("expected SuccessfullyReconciled event but none was emitted")
260+
}
261+
}

0 commit comments

Comments
 (0)