diff --git a/federation/pkg/federation-controller/util/federated_informer.go b/federation/pkg/federation-controller/util/federated_informer.go index 6f192a6b555..0064c4fcebc 100644 --- a/federation/pkg/federation-controller/util/federated_informer.go +++ b/federation/pkg/federation-controller/util/federated_informer.go @@ -96,6 +96,13 @@ type FederatedInformer interface { Stop() } +// FederatedInformer with extra method for setting fake clients. +type FederatedInformerForTestOnly interface { + FederatedInformer + + SetClientFactory(func(*federation_api.Cluster) (federation_release_1_4.Interface, error)) +} + // A function that should be used to create an informer on the target object. Store should use // framework.DeletionHandlingMetaNamespaceKeyFunc as a keying function. type TargetInformerFactory func(*federation_api.Cluster, federation_release_1_4.Interface) (cache.Store, framework.ControllerInterface) @@ -261,6 +268,13 @@ func (f *federatedInformerImpl) Start() { go f.clusterInformer.controller.Run(f.clusterInformer.stopChan) } +func (f *federatedInformerImpl) SetClientFactory(clientFactory func(*federation_api.Cluster) (federation_release_1_4.Interface, error)) { + f.Lock() + defer f.Unlock() + + f.clientFactory = clientFactory +} + // GetClientsetForCluster returns a clientset for the cluster, if present. func (f *federatedInformerImpl) GetClientsetForCluster(clusterName string) (federation_release_1_4.Interface, error) { f.Lock()