Skip to content

Commit

Permalink
fix flake test of TestUpdateClusterEventHandler
Browse files Browse the repository at this point in the history
Signed-off-by: changzhen <[email protected]>
  • Loading branch information
XiShanYongYe-Chang committed Nov 21, 2024
1 parent 87cfdfc commit 4a94c11
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 108 deletions.
5 changes: 1 addition & 4 deletions pkg/search/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -350,9 +350,6 @@ func (c *Controller) getRegistryBackendHandler(cluster string, matchedRegistries
return handler, nil
}

var controlPlaneClientBuilder = func(restConfig *rest.Config) client.Client {
return gclient.NewForConfigOrDie(restConfig)
}
var clusterDynamicClientBuilder = func(cluster string, controlPlaneClient client.Client) (*util.DynamicClusterClient, error) {
return util.NewClusterDynamicClientSet(cluster, controlPlaneClient)
}
Expand Down Expand Up @@ -394,7 +391,7 @@ func (c *Controller) doCacheCluster(cluster string) error {
// STEP2: added/updated cluster, builds an informer manager for a specific cluster.
if !c.InformerManager.IsManagerExist(cluster) {
klog.Info("Try to build informer manager for cluster ", cluster)
controlPlaneClient := controlPlaneClientBuilder(c.restConfig)
controlPlaneClient := gclient.NewForConfigOrDie(c.restConfig)

clusterDynamicClient, err := clusterDynamicClientBuilder(cluster, controlPlaneClient)
if err != nil {
Expand Down
147 changes: 43 additions & 104 deletions pkg/search/controllers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,11 @@ import (
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"

clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
searchv1alpha1 "github.com/karmada-io/karmada/pkg/apis/search/v1alpha1"
versioned "github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
"github.com/karmada-io/karmada/pkg/generated/clientset/versioned"
fakekarmadaclient "github.com/karmada-io/karmada/pkg/generated/clientset/versioned/fake"
informerfactory "github.com/karmada-io/karmada/pkg/generated/informers/externalversions"
"github.com/karmada-io/karmada/pkg/search/backendstore"
Expand Down Expand Up @@ -215,28 +214,26 @@ func TestUpdateClusterEventHandler(t *testing.T) {

func TestDeleteClusterEventHandler(t *testing.T) {
tests := []struct {
name string
restConfig *rest.Config
client *fakekarmadaclient.Clientset
controlPlaneClient client.WithWatch
restMapper meta.RESTMapper
stopCh chan struct{}
prep func(*fakekarmadaclient.Clientset, *rest.Config, meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error)
verify func(*fakekarmadaclient.Clientset, *Controller, client.Client) error
name string
restConfig *rest.Config
client *fakekarmadaclient.Clientset
restMapper meta.RESTMapper
stopCh chan struct{}
prep func(*fakekarmadaclient.Clientset, *rest.Config, meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error)
verify func(*fakekarmadaclient.Clientset, *Controller) error
}{
{
name: "AddAllEventHandlers_TriggerDeleteClusterEvent_DeletedClusterAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
controlPlaneClient: fake.NewFakeClient(),
restMapper: meta.NewDefaultRESTMapper(nil),
stopCh: make(chan struct{}),
name: "AddAllEventHandlers_TriggerDeleteClusterEvent_DeletedClusterAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
restMapper: meta.NewDefaultRESTMapper(nil),
stopCh: make(chan struct{}),
prep: func(clientConnector *fakekarmadaclient.Clientset, restConfig *rest.Config, restMapper meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error) {
factory := informerfactory.NewSharedInformerFactory(clientConnector, 0)
controller, err := createController(restConfig, factory, restMapper)
return controller, factory, err
},
verify: func(clientConnector *fakekarmadaclient.Clientset, controller *Controller, controlPlaneClient client.Client) error {
verify: func(clientConnector *fakekarmadaclient.Clientset, controller *Controller) error {
var (
registryName, clusterName = "test-registry", "test-cluster"
resourceVersion, apiEndpoint = "1000", "10.0.0.1"
Expand All @@ -249,15 +246,6 @@ func TestDeleteClusterEventHandler(t *testing.T) {
}
)

if err := clusterv1alpha1.Install(scheme.Scheme); err != nil {
return fmt.Errorf("failed to install scheme: %w", err)
}
if err := upsertClusterControllerRuntime(controlPlaneClient, labels, clusterName, apiEndpoint); err != nil {
return err
}
controlPlaneClientBuilder = func(*rest.Config) client.Client {
return controlPlaneClient
}
clusterDynamicClientBuilder = func(string, client.Client) (*util.DynamicClusterClient, error) {
return &util.DynamicClusterClient{
DynamicClientSet: fakedynamic.NewSimpleDynamicClient(scheme.Scheme),
Expand Down Expand Up @@ -316,7 +304,7 @@ func TestDeleteClusterEventHandler(t *testing.T) {
informer.Start(test.stopCh)
defer close(test.stopCh)

if err := test.verify(test.client, controller, test.controlPlaneClient); err != nil {
if err := test.verify(test.client, controller); err != nil {
t.Errorf("failed to verify controller, got: %v", err)
}
})
Expand All @@ -325,28 +313,26 @@ func TestDeleteClusterEventHandler(t *testing.T) {

func TestAddResourceRegistryEventHandler(t *testing.T) {
tests := []struct {
name string
restConfig *rest.Config
client *fakekarmadaclient.Clientset
controlPlaneClient client.WithWatch
restMapper meta.RESTMapper
stopCh chan struct{}
prep func(*fakekarmadaclient.Clientset, *rest.Config, meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error)
verify func(*fakekarmadaclient.Clientset, *Controller, client.Client) error
name string
restConfig *rest.Config
client *fakekarmadaclient.Clientset
restMapper meta.RESTMapper
stopCh chan struct{}
prep func(*fakekarmadaclient.Clientset, *rest.Config, meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error)
verify func(*fakekarmadaclient.Clientset, *Controller) error
}{
{
name: "AddAllEventHandlers_TriggerAddResourceRegistryEvent_ResourceRegistryAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
controlPlaneClient: fake.NewFakeClient(),
restMapper: meta.NewDefaultRESTMapper(nil),
stopCh: make(chan struct{}),
name: "AddAllEventHandlers_TriggerAddResourceRegistryEvent_ResourceRegistryAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
restMapper: meta.NewDefaultRESTMapper(nil),
stopCh: make(chan struct{}),
prep: func(clientConnector *fakekarmadaclient.Clientset, restConfig *rest.Config, restMapper meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error) {
factory := informerfactory.NewSharedInformerFactory(clientConnector, 0)
controller, err := createController(restConfig, factory, restMapper)
return controller, factory, err
},
verify: func(clientConnector *fakekarmadaclient.Clientset, controller *Controller, controlPlaneClient client.Client) error {
verify: func(clientConnector *fakekarmadaclient.Clientset, controller *Controller) error {
var (
registryName, clusterName = "test-registry", "test-cluster"
resourceVersion, apiEndpoint = "1000", "10.0.0.1"
Expand All @@ -359,9 +345,6 @@ func TestAddResourceRegistryEventHandler(t *testing.T) {
}
)

controlPlaneClientBuilder = func(*rest.Config) client.Client {
return controlPlaneClient
}
clusterDynamicClientBuilder = func(string, client.Client) (*util.DynamicClusterClient, error) {
return &util.DynamicClusterClient{
DynamicClientSet: fakedynamic.NewSimpleDynamicClient(scheme.Scheme),
Expand Down Expand Up @@ -405,7 +388,7 @@ func TestAddResourceRegistryEventHandler(t *testing.T) {
informer.Start(test.stopCh)
defer close(test.stopCh)

if err := test.verify(test.client, controller, test.controlPlaneClient); err != nil {
if err := test.verify(test.client, controller); err != nil {
t.Errorf("failed to verify controller, got: %v", err)
}
})
Expand Down Expand Up @@ -510,28 +493,26 @@ func TestUpdateResourceRegistryEventHandler(t *testing.T) {

func TestDeleteResourceRegistryEventHandler(t *testing.T) {
tests := []struct {
name string
restConfig *rest.Config
client *fakekarmadaclient.Clientset
controlPlaneClient client.WithWatch
restMapper meta.RESTMapper
stopCh chan struct{}
prep func(*fakekarmadaclient.Clientset, *rest.Config, meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error)
verify func(*fakekarmadaclient.Clientset, *Controller, client.Client) error
name string
restConfig *rest.Config
client *fakekarmadaclient.Clientset
restMapper meta.RESTMapper
stopCh chan struct{}
prep func(*fakekarmadaclient.Clientset, *rest.Config, meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error)
verify func(*fakekarmadaclient.Clientset, *Controller) error
}{
{
name: "AddAllEventHandlers_TriggerDeleteResourceRegistryEvent_DeletedResourceRegistryAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
controlPlaneClient: fake.NewFakeClient(),
restMapper: meta.NewDefaultRESTMapper(nil),
stopCh: make(chan struct{}),
name: "AddAllEventHandlers_TriggerDeleteResourceRegistryEvent_DeletedResourceRegistryAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
restMapper: meta.NewDefaultRESTMapper(nil),
stopCh: make(chan struct{}),
prep: func(clientConnector *fakekarmadaclient.Clientset, restConfig *rest.Config, restMapper meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error) {
factory := informerfactory.NewSharedInformerFactory(clientConnector, 0)
controller, err := createController(restConfig, factory, restMapper)
return controller, factory, err
},
verify: func(clientConnector *fakekarmadaclient.Clientset, controller *Controller, controlPlaneClient client.Client) error {
verify: func(clientConnector *fakekarmadaclient.Clientset, controller *Controller) error {
var (
registryName, clusterName = "test-registry", "test-cluster"
resourceVersion, apiEndpoint = "1000", "10.0.0.1"
Expand All @@ -544,9 +525,6 @@ func TestDeleteResourceRegistryEventHandler(t *testing.T) {
}
)

controlPlaneClientBuilder = func(*rest.Config) client.Client {
return controlPlaneClient
}
clusterDynamicClientBuilder = func(string, client.Client) (*util.DynamicClusterClient, error) {
return &util.DynamicClusterClient{
DynamicClientSet: fakedynamic.NewSimpleDynamicClient(scheme.Scheme),
Expand Down Expand Up @@ -600,7 +578,7 @@ func TestDeleteResourceRegistryEventHandler(t *testing.T) {
informer.Start(test.stopCh)
defer close(test.stopCh)

if err := test.verify(test.client, controller, test.controlPlaneClient); err != nil {
if err := test.verify(test.client, controller); err != nil {
t.Errorf("failed to verify controller, got: %v", err)
}
})
Expand Down Expand Up @@ -660,45 +638,6 @@ func upsertCluster(client *fakekarmadaclient.Clientset, labels map[string]string
return err
}

// upsertClusterControllerRuntime creates or updates a Cluster resource using the controller-runtime
// client. The function takes labels, API endpoint, and cluster name to define the Cluster.
func upsertClusterControllerRuntime(controlPlaneClient client.Client, labels map[string]string, clusterName, apiEndpoint string) error {
cluster := &clusterv1alpha1.Cluster{
ObjectMeta: metav1.ObjectMeta{
Name: clusterName,
Labels: labels,
},
Spec: clusterv1alpha1.ClusterSpec{
APIEndpoint: apiEndpoint,
},
Status: clusterv1alpha1.ClusterStatus{
Conditions: []metav1.Condition{
{
Type: clusterv1alpha1.ClusterConditionReady,
Status: metav1.ConditionTrue,
},
},
},
}

// Try to create the Cluster.
err := controlPlaneClient.Create(context.TODO(), cluster)
if err == nil {
// Successfully created the Cluster.
return nil
}

// If the Cluster already exists, update it.
if apierrors.IsAlreadyExists(err) {
if updateErr := controlPlaneClient.Update(context.TODO(), cluster); updateErr != nil {
return fmt.Errorf("failed to update cluster: %v", updateErr)
}
return nil
}

return err
}

// upsertResourceRegistry creates or updates a ResourceRegistry resource in the Kubernetes API.
// It uses the provided client, resource selectors, registry name, resource version, and target cluster names.
func upsertResourceRegistry(client *fakekarmadaclient.Clientset, resourceSelectors []searchv1alpha1.ResourceSelector, registryName, resourceVersion string, clusterNames []string) error {
Expand Down

0 comments on commit 4a94c11

Please sign in to comment.