Skip to content

Commit 3ed992c

Browse files
committed
🐛 Inject func in predicate.{And,Or}
1 parent 45b13b9 commit 3ed992c

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

pkg/predicate/predicate.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"sigs.k8s.io/controller-runtime/pkg/client"
2525
"sigs.k8s.io/controller-runtime/pkg/event"
2626
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
27+
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
2728
)
2829

2930
var log = logf.RuntimeLog.WithName("predicate").WithName("eventFilters")
@@ -239,6 +240,15 @@ type and struct {
239240
predicates []Predicate
240241
}
241242

243+
func (a and) InjectFunc(f inject.Func) error {
244+
for _, p := range a.predicates {
245+
if err := f(p); err != nil {
246+
return err
247+
}
248+
}
249+
return nil
250+
}
251+
242252
func (a and) Create(e event.CreateEvent) bool {
243253
for _, p := range a.predicates {
244254
if !p.Create(e) {
@@ -284,6 +294,15 @@ type or struct {
284294
predicates []Predicate
285295
}
286296

297+
func (o or) InjectFunc(f inject.Func) error {
298+
for _, p := range o.predicates {
299+
if err := f(p); err != nil {
300+
return err
301+
}
302+
}
303+
return nil
304+
}
305+
287306
func (o or) Create(e event.CreateEvent) bool {
288307
for _, p := range o.predicates {
289308
if p.Create(e) {

pkg/predicate/predicate_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
. "github.com/onsi/gomega"
2222
corev1 "k8s.io/api/core/v1"
2323
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
2425

2526
"sigs.k8s.io/controller-runtime/pkg/client"
2627
"sigs.k8s.io/controller-runtime/pkg/event"
@@ -827,6 +828,13 @@ var _ = Describe("Predicate", func() {
827828
}
828829
passFuncs := funcs(true)
829830
failFuncs := funcs(false)
831+
832+
var injectFunc inject.Func
833+
injectFunc = func(i interface{}) error {
834+
_, err := inject.InjectorInto(injectFunc, i)
835+
return err
836+
}
837+
830838
Describe("When checking an And predicate", func() {
831839
It("should return false when one of its predicates returns false", func() {
832840
a := predicate.And(passFuncs, failFuncs)
@@ -842,6 +850,12 @@ var _ = Describe("Predicate", func() {
842850
Expect(a.Delete(event.DeleteEvent{})).To(BeTrue())
843851
Expect(a.Generic(event.GenericEvent{})).To(BeTrue())
844852
})
853+
It("should inject into its predicates", func() {
854+
prct := &injectablePredicate{}
855+
a := predicate.And(prct)
856+
Expect(injectFunc(a)).To(Succeed())
857+
Expect(prct.injected).To(BeTrue())
858+
})
845859
})
846860
Describe("When checking an Or predicate", func() {
847861
It("should return true when one of its predicates returns true", func() {
@@ -858,6 +872,12 @@ var _ = Describe("Predicate", func() {
858872
Expect(o.Delete(event.DeleteEvent{})).To(BeFalse())
859873
Expect(o.Generic(event.GenericEvent{})).To(BeFalse())
860874
})
875+
It("should inject into its predicates", func() {
876+
prct := &injectablePredicate{}
877+
a := predicate.Or(prct)
878+
Expect(injectFunc(a)).To(Succeed())
879+
Expect(prct.injected).To(BeTrue())
880+
})
861881
})
862882
})
863883

@@ -942,3 +962,13 @@ var _ = Describe("Predicate", func() {
942962
})
943963
})
944964
})
965+
966+
type injectablePredicate struct {
967+
injected bool
968+
predicate.Funcs
969+
}
970+
971+
func (i *injectablePredicate) InjectFunc(f inject.Func) error {
972+
i.injected = true
973+
return nil
974+
}

0 commit comments

Comments
 (0)