Skip to content

Commit c9a61af

Browse files
authored
Merge pull request kubernetes#127726 from googs1025/dra/ut_events_assert
chore(dra): improve assert event for unit test for controller
2 parents 83a1310 + 6219445 commit c9a61af

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

staging/src/k8s.io/dynamic-resource-allocation/controller/controller_test.go

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ import (
3030
resourceapi "k8s.io/api/resource/v1alpha3"
3131
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3232
"k8s.io/apimachinery/pkg/runtime"
33+
"k8s.io/apimachinery/pkg/util/wait"
3334
"k8s.io/client-go/informers"
3435
"k8s.io/client-go/kubernetes"
3536
"k8s.io/client-go/kubernetes/fake"
3637
"k8s.io/client-go/tools/cache"
38+
"k8s.io/client-go/tools/record"
3739
"k8s.io/klog/v2/ktesting"
3840
_ "k8s.io/klog/v2/ktesting/init"
3941
)
@@ -127,6 +129,11 @@ func TestController(t *testing.T) {
127129
schedulingCtx, expectedSchedulingCtx *resourceapi.PodSchedulingContext
128130
claim, expectedClaim *resourceapi.ResourceClaim
129131
expectedWorkQueueState Mock[string]
132+
expectedError string
133+
// expectedEvent is a slice of strings representing expected events.
134+
// Each string in the slice should follow the format: "EventType Reason Message".
135+
// - "Warning Failed processing failed"
136+
expectedEvent []string
130137
}{
131138
"invalid-key": {
132139
key: "claim:x/y/z",
@@ -164,6 +171,7 @@ func TestController(t *testing.T) {
164171
claimKey: 1,
165172
},
166173
},
174+
expectedEvent: []string{"Warning Failed deallocate: fake error"},
167175
},
168176

169177
// deletion time stamp set, our finalizer set, not allocated -> remove finalizer
@@ -184,6 +192,7 @@ func TestController(t *testing.T) {
184192
claimKey: 1,
185193
},
186194
},
195+
expectedEvent: []string{"Warning Failed stop allocation: fake error"},
187196
},
188197
// deletion time stamp set, other finalizer set, not allocated -> do nothing
189198
"deleted-finalizer-no-removal": {
@@ -209,6 +218,7 @@ func TestController(t *testing.T) {
209218
claimKey: 1,
210219
},
211220
},
221+
expectedEvent: []string{"Warning Failed deallocate: fake error"},
212222
},
213223
// deletion time stamp set, finalizer not set -> do nothing
214224
"deleted-no-finalizer": {
@@ -401,6 +411,9 @@ func TestController(t *testing.T) {
401411
}
402412
var workQueueState Mock[string]
403413
c := ctrl.(*controller)
414+
// We need to mock the event recorder to test the controller's event.
415+
fakeRecorder := record.NewFakeRecorder(100)
416+
c.eventRecorder = fakeRecorder
404417
workQueueState.SyncOne(test.key, c.sync)
405418
assert.Equal(t, test.expectedWorkQueueState, workQueueState)
406419

@@ -419,10 +432,8 @@ func TestController(t *testing.T) {
419432
expectedPodSchedulings = append(expectedPodSchedulings, *test.expectedSchedulingCtx)
420433
}
421434
assert.Equal(t, expectedPodSchedulings, podSchedulings.Items)
422-
423-
// TODO: add testing of events.
424-
// Right now, client-go/tools/record/event.go:267 fails during unit testing with
425-
// request namespace does not match object namespace, request: "" object: "default",
435+
// Assert that the events are correct.
436+
assertEqualEvents(t, test.expectedEvent, fakeRecorder.Events)
426437
})
427438
}
428439
}
@@ -582,3 +593,25 @@ func fakeK8s(objs []runtime.Object) (kubernetes.Interface, informers.SharedInfor
582593
informerFactory := informers.NewSharedInformerFactory(client, 0)
583594
return client, informerFactory
584595
}
596+
597+
func assertEqualEvents(t *testing.T, expected []string, actual <-chan string) {
598+
t.Logf("Assert for events: %v", expected)
599+
c := time.After(wait.ForeverTestTimeout)
600+
for _, e := range expected {
601+
select {
602+
case a := <-actual:
603+
assert.Equal(t, a, e)
604+
case <-c:
605+
t.Errorf("Expected event %q, got nothing", e)
606+
// continue iterating to print all expected events
607+
}
608+
}
609+
for {
610+
select {
611+
case a := <-actual:
612+
t.Errorf("Unexpected event: %q", a)
613+
default:
614+
return // No more events, as expected.
615+
}
616+
}
617+
}

0 commit comments

Comments
 (0)