Skip to content

Commit e358be3

Browse files
committed
Allow the interceptor to be discovered from the fake ClientBuilder
1 parent bf25854 commit e358be3

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

pkg/client/fake/client.go

+16-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import (
2828
"strings"
2929
"sync"
3030

31+
"sigs.k8s.io/controller-runtime/pkg/client/interceptor"
32+
3133
apierrors "k8s.io/apimachinery/pkg/api/errors"
3234
"k8s.io/apimachinery/pkg/api/meta"
3335
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -107,6 +109,7 @@ type ClientBuilder struct {
107109
initRuntimeObjects []runtime.Object
108110
withStatusSubresource []client.Object
109111
objectTracker testing.ObjectTracker
112+
interceptorFns *interceptor.Fns
110113

111114
// indexes maps each GroupVersionKind (GVK) to the indexes registered for that GVK.
112115
// The inner map maps from index name to IndexerFunc.
@@ -198,6 +201,12 @@ func (f *ClientBuilder) WithStatusSubresource(o ...client.Object) *ClientBuilder
198201
return f
199202
}
200203

204+
// WithInterceptorFns configures the client methods to be intercepted using the provided interceptor.Fns.
205+
func (f *ClientBuilder) WithInterceptorFns(interceptorFns interceptor.Fns) *ClientBuilder {
206+
f.interceptorFns = &interceptorFns
207+
return f
208+
}
209+
201210
// Build builds and returns a new fake client.
202211
func (f *ClientBuilder) Build() client.WithWatch {
203212
if f.scheme == nil {
@@ -240,13 +249,19 @@ func (f *ClientBuilder) Build() client.WithWatch {
240249
}
241250
}
242251

243-
return &fakeClient{
252+
var result client.WithWatch = &fakeClient{
244253
tracker: tracker,
245254
scheme: f.scheme,
246255
restMapper: f.restMapper,
247256
indexes: f.indexes,
248257
withStatusSubresource: withStatusSubResource,
249258
}
259+
260+
if f.interceptorFns != nil {
261+
result = interceptor.NewClient(result, *f.interceptorFns)
262+
}
263+
264+
return result
250265
}
251266

252267
const trackerAddResourceVersion = "999"

pkg/client/fake/client_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323
"strconv"
2424
"time"
2525

26+
"sigs.k8s.io/controller-runtime/pkg/client/interceptor"
27+
2628
"github.com/google/go-cmp/cmp"
2729
. "github.com/onsi/ginkgo/v2"
2830
. "github.com/onsi/gomega"
@@ -1449,4 +1451,17 @@ var _ = Describe("Fake client builder", func() {
14491451
func(client.Object) []string { return []string{"foo"} })
14501452
}).To(Panic())
14511453
})
1454+
1455+
It("should wrap the fake client with an interceptor when WithInterceptorFns is called", func() {
1456+
var called bool
1457+
cli := NewClientBuilder().WithInterceptorFns(interceptor.Fns{
1458+
Get: func(ctx context.Context, client client.WithWatch, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error {
1459+
called = true
1460+
return nil
1461+
},
1462+
}).Build()
1463+
err := cli.Get(context.Background(), client.ObjectKey{}, &corev1.Pod{})
1464+
Expect(err).NotTo(HaveOccurred())
1465+
Expect(called).To(BeTrue())
1466+
})
14521467
})

0 commit comments

Comments
 (0)