...

Package fake

import "sigs.k8s.io/controller-runtime/pkg/client/fake"
Overview
Index

Overview ▾

Package fake provides a fake client for testing.

A fake client is backed by its simple object store indexed by GroupVersionResource. You can create a fake client with optional objects.

client := NewClientBuilder().WithScheme(scheme).WithObj(initObjs...).Build()

You can invoke the methods defined in the Client interface.

When in doubt, it's almost always better not to use this package and instead use envtest.Environment with a real client and API server.

WARNING: ⚠️ Current Limitations / Known Issues with the fake Client ⚠️

  • This client does not have a way to inject specific errors to test handled vs. unhandled errors.
  • There is some support for sub resources which can cause issues with tests if you're trying to update e.g. metadata and status in the same reconcile.
  • No OpenAPI validation is performed when creating or updating objects.
  • ObjectMeta's `Generation` and `ResourceVersion` don't behave properly, Patch or Update operations that rely on these fields will fail, or give false positives.

func NewFakeClient

func NewFakeClient(initObjs ...runtime.Object) client.WithWatch

NewFakeClient creates a new fake client for testing. You can choose to initialize it with a slice of runtime.Object.

type ClientBuilder

ClientBuilder builds a fake client.

type ClientBuilder struct {
    // contains filtered or unexported fields
}

func NewClientBuilder

func NewClientBuilder() *ClientBuilder

NewClientBuilder returns a new builder to create a fake client.

func (*ClientBuilder) Build

func (f *ClientBuilder) Build() client.WithWatch

Build builds and returns a new fake client.

func (*ClientBuilder) WithIndex

func (f *ClientBuilder) WithIndex(obj runtime.Object, field string, extractValue client.IndexerFunc) *ClientBuilder

WithIndex can be optionally used to register an index with name `field` and indexer `extractValue` for API objects of the same GroupVersionKind (GVK) as `obj` in the fake client. It can be invoked multiple times, both with objects of the same GVK or different ones. Invoking WithIndex twice with the same `field` and GVK (via `obj`) arguments will panic. WithIndex retrieves the GVK of `obj` using the scheme registered via WithScheme if WithScheme was previously invoked, the default scheme otherwise.

func (*ClientBuilder) WithInterceptorFuncs

func (f *ClientBuilder) WithInterceptorFuncs(interceptorFuncs interceptor.Funcs) *ClientBuilder

WithInterceptorFuncs configures the client methods to be intercepted using the provided interceptor.Funcs.

func (*ClientBuilder) WithLists

func (f *ClientBuilder) WithLists(initLists ...client.ObjectList) *ClientBuilder

WithLists can be optionally used to initialize this fake client with client.ObjectList(s).

func (*ClientBuilder) WithObjectTracker

func (f *ClientBuilder) WithObjectTracker(ot testing.ObjectTracker) *ClientBuilder

WithObjectTracker can be optionally used to initialize this fake client with testing.ObjectTracker.

func (*ClientBuilder) WithObjects

func (f *ClientBuilder) WithObjects(initObjs ...client.Object) *ClientBuilder

WithObjects can be optionally used to initialize this fake client with client.Object(s).

func (*ClientBuilder) WithRESTMapper

func (f *ClientBuilder) WithRESTMapper(restMapper meta.RESTMapper) *ClientBuilder

WithRESTMapper sets this builder's restMapper. The restMapper is directly set as mapper in the Client. This can be used for example with a meta.DefaultRESTMapper to provide a static rest mapping. If not set, defaults to an empty meta.DefaultRESTMapper.

func (*ClientBuilder) WithRuntimeObjects

func (f *ClientBuilder) WithRuntimeObjects(initRuntimeObjs ...runtime.Object) *ClientBuilder

WithRuntimeObjects can be optionally used to initialize this fake client with runtime.Object(s).

func (*ClientBuilder) WithScheme

func (f *ClientBuilder) WithScheme(scheme *runtime.Scheme) *ClientBuilder

WithScheme sets this builder's internal scheme. If not set, defaults to client-go's global scheme.Scheme.

func (*ClientBuilder) WithStatusSubresource

func (f *ClientBuilder) WithStatusSubresource(o ...client.Object) *ClientBuilder

WithStatusSubresource configures the passed object with a status subresource, which means calls to Update and Patch will not alter its status.