Skip to content

Commit

Permalink
Merge pull request #1781 from timebertt/inject-and-or
Browse files Browse the repository at this point in the history
馃悰 Inject func in `predicate.{And,Or}`
  • Loading branch information
k8s-ci-robot committed Feb 1, 2022
2 parents 7ba3e55 + 3ed992c commit b1d9a16
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
19 changes: 19 additions & 0 deletions pkg/predicate/predicate.go
Expand Up @@ -24,6 +24,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/event"
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"
)

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

func (a and) InjectFunc(f inject.Func) error {
for _, p := range a.predicates {
if err := f(p); err != nil {
return err
}
}
return nil
}

func (a and) Create(e event.CreateEvent) bool {
for _, p := range a.predicates {
if !p.Create(e) {
Expand Down Expand Up @@ -284,6 +294,15 @@ type or struct {
predicates []Predicate
}

func (o or) InjectFunc(f inject.Func) error {
for _, p := range o.predicates {
if err := f(p); err != nil {
return err
}
}
return nil
}

func (o or) Create(e event.CreateEvent) bool {
for _, p := range o.predicates {
if p.Create(e) {
Expand Down
30 changes: 30 additions & 0 deletions pkg/predicate/predicate_test.go
Expand Up @@ -21,6 +21,7 @@ import (
. "github.com/onsi/gomega"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/runtime/inject"

"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/event"
Expand Down Expand Up @@ -827,6 +828,13 @@ var _ = Describe("Predicate", func() {
}
passFuncs := funcs(true)
failFuncs := funcs(false)

var injectFunc inject.Func
injectFunc = func(i interface{}) error {
_, err := inject.InjectorInto(injectFunc, i)
return err
}

Describe("When checking an And predicate", func() {
It("should return false when one of its predicates returns false", func() {
a := predicate.And(passFuncs, failFuncs)
Expand All @@ -842,6 +850,12 @@ var _ = Describe("Predicate", func() {
Expect(a.Delete(event.DeleteEvent{})).To(BeTrue())
Expect(a.Generic(event.GenericEvent{})).To(BeTrue())
})
It("should inject into its predicates", func() {
prct := &injectablePredicate{}
a := predicate.And(prct)
Expect(injectFunc(a)).To(Succeed())
Expect(prct.injected).To(BeTrue())
})
})
Describe("When checking an Or predicate", func() {
It("should return true when one of its predicates returns true", func() {
Expand All @@ -858,6 +872,12 @@ var _ = Describe("Predicate", func() {
Expect(o.Delete(event.DeleteEvent{})).To(BeFalse())
Expect(o.Generic(event.GenericEvent{})).To(BeFalse())
})
It("should inject into its predicates", func() {
prct := &injectablePredicate{}
a := predicate.Or(prct)
Expect(injectFunc(a)).To(Succeed())
Expect(prct.injected).To(BeTrue())
})
})
})

Expand Down Expand Up @@ -942,3 +962,13 @@ var _ = Describe("Predicate", func() {
})
})
})

type injectablePredicate struct {
injected bool
predicate.Funcs
}

func (i *injectablePredicate) InjectFunc(f inject.Func) error {
i.injected = true
return nil
}

0 comments on commit b1d9a16

Please sign in to comment.