From d61f56105d593b23652b04d9db194a82b18db9d8 Mon Sep 17 00:00:00 2001 From: Vince Prignano Date: Thu, 1 Oct 2020 11:09:55 -0700 Subject: [PATCH] :seedling: Expose handler.MapFunc to allow implementers to test mappers This is a follow-up from a previous change to the handler package that deprecated the old handler.ToRequestFunc in favor of EnqueueRequestsFromMapFunc. While we still want to prefer using EnqueueRequestsFromMapFunc, this change also exposes the type of MapFunc signature expected. Users can use this type to test their own mappers in unit tests. Signed-off-by: Vince Prignano --- pkg/handler/enqueue_mapped.go | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/pkg/handler/enqueue_mapped.go b/pkg/handler/enqueue_mapped.go index c83a796259..3111daee42 100644 --- a/pkg/handler/enqueue_mapped.go +++ b/pkg/handler/enqueue_mapped.go @@ -24,6 +24,10 @@ import ( "sigs.k8s.io/controller-runtime/pkg/runtime/inject" ) +// MapFunc is the signature required for enqueueing requests from a generic function. +// This type is usually used with EnqueueRequestsFromMapFunc when registering an event handler. +type MapFunc func(MapObject) []reconcile.Request + // EnqueueRequestsFromMapFunc enqueues Requests by running a transformation function that outputs a collection // of reconcile.Requests on each Event. The reconcile.Requests may be for an arbitrary set of objects // defined by some user specified transformation of the source Event. (e.g. trigger Reconciler for a set of objects @@ -34,9 +38,9 @@ import ( // // For UpdateEvents which contain both a new and old object, the transformation function is run on both // objects and both sets of Requests are enqueue. -func EnqueueRequestsFromMapFunc(mapFN func(MapObject) []reconcile.Request) EventHandler { +func EnqueueRequestsFromMapFunc(fn MapFunc) EventHandler { return &enqueueRequestsFromMapFunc{ - ToRequests: toRequestsFunc(mapFN), + toRequests: fn, } } @@ -44,7 +48,7 @@ var _ EventHandler = &enqueueRequestsFromMapFunc{} type enqueueRequestsFromMapFunc struct { // Mapper transforms the argument into a slice of keys to be reconciled - ToRequests mapper + toRequests MapFunc } // Create implements EventHandler @@ -69,7 +73,7 @@ func (e *enqueueRequestsFromMapFunc) Generic(evt event.GenericEvent, q workqueue } func (e *enqueueRequestsFromMapFunc) mapAndEnqueue(q workqueue.RateLimitingInterface, object MapObject) { - for _, req := range e.ToRequests.Map(object) { + for _, req := range e.toRequests(object) { q.Add(req) } } @@ -81,26 +85,10 @@ func (e *enqueueRequestsFromMapFunc) InjectFunc(f inject.Func) error { if f == nil { return nil } - return f(e.ToRequests) -} - -// mapper maps an object to a collection of keys to be enqueued -type mapper interface { - // Map maps an object - Map(MapObject) []reconcile.Request + return f(e.toRequests) } // MapObject contains information from an event to be transformed into a Request. type MapObject struct { Object controllerutil.Object } - -var _ mapper = toRequestsFunc(nil) - -// toRequestsFunc implements Mapper using a function. -type toRequestsFunc func(MapObject) []reconcile.Request - -// Map implements Mapper -func (m toRequestsFunc) Map(i MapObject) []reconcile.Request { - return m(i) -}