Skip to content

Commit 4018c2e

Browse files
committed
Use private option for newInformer override
1 parent 71cb77f commit 4018c2e

File tree

3 files changed

+15
-16
lines changed

3 files changed

+15
-16
lines changed

pkg/cache/cache.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ var (
4444
defaultSyncPeriod = 10 * time.Hour
4545
)
4646

47+
// InformerGetOptions defines the behavior of how informers are retrieved.
4748
type InformerGetOptions internal.GetOptions
4849

4950
// InformerGetOption defines an option that alters the behavior of how informers are retrieved.
@@ -201,8 +202,8 @@ type Options struct {
201202
// object, this will fall through to Default* settings.
202203
ByObject map[client.Object]ByObject
203204

204-
// NewInformer allows overriding of NewSharedIndexInformer for testing.
205-
NewInformer func(toolscache.ListerWatcher, runtime.Object, time.Duration, toolscache.Indexers) toolscache.SharedIndexInformer
205+
// newInformer allows overriding of NewSharedIndexInformer for testing.
206+
newInformer *func(toolscache.ListerWatcher, runtime.Object, time.Duration, toolscache.Indexers) toolscache.SharedIndexInformer
206207
}
207208

208209
// ByObject offers more fine-grained control over the cache's ListWatch by object.
@@ -353,7 +354,7 @@ func newCache(restConfig *rest.Config, opts Options) newCacheFunc {
353354
},
354355
Transform: config.Transform,
355356
UnsafeDisableDeepCopy: pointer.BoolDeref(config.UnsafeDisableDeepCopy, false),
356-
NewInformer: opts.NewInformer,
357+
NewInformer: opts.newInformer,
357358
}),
358359
readerFailOnMissingInformer: opts.ReaderFailOnMissingInformer,
359360
}

pkg/cache/cache_test.go

+9-11
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,7 @@ func deletePod(pod client.Object) {
119119

120120
var _ = Describe("Informer Cache", func() {
121121
CacheTest(cache.New, cache.Options{})
122-
NonBlockingGetTest(cache.New, cache.Options{
123-
NewInformer: func(lw kcache.ListerWatcher, o runtime.Object, d time.Duration, i kcache.Indexers) kcache.SharedIndexInformer {
124-
return &controllertest.FakeInformer{Synced: false}
125-
},
126-
})
122+
NonBlockingGetTest(cache.New, cache.Options{})
127123
})
128124

129125
var _ = Describe("Informer Cache with ReaderFailOnMissingInformer", func() {
@@ -144,9 +140,6 @@ var _ = Describe("Multi-Namespace Informer Cache", func() {
144140
testNamespaceTwo: {},
145141
"default": {},
146142
},
147-
NewInformer: func(lw kcache.ListerWatcher, o runtime.Object, d time.Duration, i kcache.Indexers) kcache.SharedIndexInformer {
148-
return &controllertest.FakeInformer{Synced: false}
149-
},
150143
})
151144
})
152145

@@ -156,9 +149,6 @@ var _ = Describe("Informer Cache without global DeepCopy", func() {
156149
})
157150
NonBlockingGetTest(cache.New, cache.Options{
158151
DefaultUnsafeDisableDeepCopy: pointer.Bool(true),
159-
NewInformer: func(lw kcache.ListerWatcher, o runtime.Object, d time.Duration, i kcache.Indexers) kcache.SharedIndexInformer {
160-
return &controllertest.FakeInformer{Synced: false}
161-
},
162152
})
163153
})
164154

@@ -553,6 +543,14 @@ func NonBlockingGetTest(createCacheFunc func(config *rest.Config, opts cache.Opt
553543
Expect(err).NotTo(HaveOccurred())
554544

555545
By("creating the informer cache")
546+
v := reflect.ValueOf(&opts).Elem()
547+
newInformerField := v.FieldByName("newInformer")
548+
newFakeInformer := func(lw kcache.ListerWatcher, o runtime.Object, d time.Duration, i kcache.Indexers) kcache.SharedIndexInformer {
549+
return &controllertest.FakeInformer{Synced: false}
550+
}
551+
reflect.NewAt(newInformerField.Type(), newInformerField.Addr().UnsafePointer()). //nolint:gosec // overriding informer with one that is guaranteed to block.
552+
Elem().
553+
Set(reflect.ValueOf(&newFakeInformer))
556554
informerCache, err = createCacheFunc(cfg, opts)
557555
Expect(err).NotTo(HaveOccurred())
558556
By("running the cache and waiting for it to sync")

pkg/cache/internal/informers.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type InformersOpts struct {
4545
Mapper meta.RESTMapper
4646
ResyncPeriod time.Duration
4747
Namespace string
48-
NewInformer func(cache.ListerWatcher, runtime.Object, time.Duration, cache.Indexers) cache.SharedIndexInformer
48+
NewInformer *func(cache.ListerWatcher, runtime.Object, time.Duration, cache.Indexers) cache.SharedIndexInformer
4949
Selector Selector
5050
Transform cache.TransformFunc
5151
UnsafeDisableDeepCopy bool
@@ -55,7 +55,7 @@ type InformersOpts struct {
5555
func NewInformers(config *rest.Config, options *InformersOpts) *Informers {
5656
newInformer := cache.NewSharedIndexInformer
5757
if options.NewInformer != nil {
58-
newInformer = options.NewInformer
58+
newInformer = *options.NewInformer
5959
}
6060
return &Informers{
6161
config: config,

0 commit comments

Comments
 (0)