@@ -22,12 +22,12 @@ import (
22
22
"github.com/kubernetes-sigs/controller-runtime/pkg/cache/informertest"
23
23
"github.com/kubernetes-sigs/controller-runtime/pkg/event"
24
24
"github.com/kubernetes-sigs/controller-runtime/pkg/handler"
25
+ "github.com/kubernetes-sigs/controller-runtime/pkg/predicate"
25
26
"github.com/kubernetes-sigs/controller-runtime/pkg/runtime/inject"
26
27
"github.com/kubernetes-sigs/controller-runtime/pkg/source"
27
28
. "github.com/onsi/ginkgo"
28
29
. "github.com/onsi/gomega"
29
30
30
- "github.com/kubernetes-sigs/controller-runtime/pkg/predicate"
31
31
corev1 "k8s.io/api/core/v1"
32
32
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
33
33
"k8s.io/client-go/util/workqueue"
@@ -276,6 +276,15 @@ var _ = Describe("Source", func() {
276
276
Object : p ,
277
277
Meta : p ,
278
278
}
279
+ // Event that should be filtered out by predicates
280
+ invalidEvt := event.GenericEvent {}
281
+
282
+ // Predicate to filter out empty event
283
+ prct := predicate.Funcs {
284
+ GenericFunc : func (e event.GenericEvent ) bool {
285
+ return e .Object != nil && e .Meta != nil
286
+ },
287
+ }
279
288
280
289
q := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "test" )
281
290
instance := & source.Channel {Source : ch }
@@ -295,14 +304,17 @@ var _ = Describe("Source", func() {
295
304
},
296
305
GenericFunc : func (q2 workqueue.RateLimitingInterface , evt event.GenericEvent ) {
297
306
defer GinkgoRecover ()
307
+ // The empty event should have been filtered out by the predicates,
308
+ // and will not be passed to the handler.
298
309
Expect (q2 ).To (Equal (q ))
299
310
Expect (evt .Meta ).To (Equal (p ))
300
311
Expect (evt .Object ).To (Equal (p ))
301
312
close (c )
302
313
},
303
- }, q )
314
+ }, q , prct )
304
315
Expect (err ).NotTo (HaveOccurred ())
305
316
317
+ ch <- invalidEvt
306
318
ch <- evt
307
319
<- c
308
320
close (done )
0 commit comments