Skip to content

Commit

Permalink
pkg/search/controllers_test: fix flaky test cases
Browse files Browse the repository at this point in the history
In this commit, we fix flaky test cases mainly by increasing
the timeout from 250 milliseconds to 500 milliseconds.

Signed-off-by: Mohamed Awnallah <[email protected]>
  • Loading branch information
mohamedawnallah committed Nov 20, 2024
1 parent c950edd commit 1345ad6
Showing 1 changed file with 109 additions and 41 deletions.
150 changes: 109 additions & 41 deletions pkg/search/controllers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
fakedynamic "k8s.io/client-go/dynamic/fake"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
"k8s.io/client-go/restmapper"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"

Expand All @@ -43,6 +44,41 @@ import (
"github.com/karmada-io/karmada/pkg/util"
)

var apiGroupResources = []*restmapper.APIGroupResources{
{
Group: metav1.APIGroup{
Name: "apps",
Versions: []metav1.GroupVersionForDiscovery{
{GroupVersion: "apps/v1", Version: "v1"},
},
PreferredVersion: metav1.GroupVersionForDiscovery{
GroupVersion: "apps/v1", Version: "v1",
},
},
VersionedResources: map[string][]metav1.APIResource{
"v1": {
{Name: "deployments", SingularName: "deployment", Namespaced: true, Kind: "Deployment"},
},
},
},
{
Group: metav1.APIGroup{
Name: "",
Versions: []metav1.GroupVersionForDiscovery{
{GroupVersion: "v1", Version: "v1"},
},
PreferredVersion: metav1.GroupVersionForDiscovery{
GroupVersion: "v1", Version: "v1",
},
},
VersionedResources: map[string][]metav1.APIResource{
"v1": {
{Name: "pods", SingularName: "pod", Namespaced: true, Kind: "Pod"},
},
},
},
}

func TestNewKarmadaSearchController(t *testing.T) {
tests := []struct {
name string
Expand Down Expand Up @@ -115,7 +151,7 @@ func TestAddClusterEventHandler(t *testing.T) {
if err := upsertCluster(clientConnector, labels, apiEndpoint, clusterName, resourceVersion); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand Down Expand Up @@ -157,7 +193,7 @@ func TestUpdateClusterEventHandler(t *testing.T) {
name: "AddAllEventHandlers_TriggerUpdateClusterEvent_UpdatedClusterAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
restMapper: meta.NewDefaultRESTMapper(nil),
restMapper: restmapper.NewDiscoveryRESTMapper(apiGroupResources),
stopCh: make(chan struct{}),
prep: func(clientConnector *fakekarmadaclient.Clientset, restConfig *rest.Config, restMapper meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error) {
factory := informerfactory.NewSharedInformerFactory(clientConnector, 0)
Expand All @@ -175,7 +211,7 @@ func TestUpdateClusterEventHandler(t *testing.T) {
if err := upsertCluster(clientConnector, oldLabels, apiEndpoint, clusterName, resourceVersion); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -185,7 +221,7 @@ func TestUpdateClusterEventHandler(t *testing.T) {
if err := upsertCluster(clientConnector, newLabels, apiEndpoint, clusterName, updatedResourceVerison); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand Down Expand Up @@ -229,7 +265,7 @@ func TestDeleteClusterEventHandler(t *testing.T) {
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
controlPlaneClient: fake.NewFakeClient(),
restMapper: meta.NewDefaultRESTMapper(nil),
restMapper: restmapper.NewDiscoveryRESTMapper(apiGroupResources),
stopCh: make(chan struct{}),
prep: func(clientConnector *fakekarmadaclient.Clientset, restConfig *rest.Config, restMapper meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error) {
factory := informerfactory.NewSharedInformerFactory(clientConnector, 0)
Expand All @@ -249,12 +285,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
}
Expand All @@ -265,12 +295,19 @@ func TestDeleteClusterEventHandler(t *testing.T) {
}, nil
}

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
}

// Wait a bit to allow for addCluster background
// thread to complete its execution.
if err := upsertCluster(clientConnector, labels, apiEndpoint, clusterName, resourceVersion); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -280,7 +317,7 @@ func TestDeleteClusterEventHandler(t *testing.T) {
if err := upsertResourceRegistry(clientConnector, resourceSelectors, registryName, resourceVersion, []string{clusterName}); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -290,10 +327,7 @@ func TestDeleteClusterEventHandler(t *testing.T) {
if err := deleteCluster(clientConnector, clusterName); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
if err := cacheNextWrapper(controller); err != nil {
return err
}
time.Sleep(time.Millisecond * 500)

// Verify no backend store for this deleted cluster.
if backend := backendstore.GetBackend(clusterName); backend != nil {
Expand Down Expand Up @@ -339,7 +373,7 @@ func TestAddResourceRegistryEventHandler(t *testing.T) {
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
controlPlaneClient: fake.NewFakeClient(),
restMapper: meta.NewDefaultRESTMapper(nil),
restMapper: restmapper.NewDiscoveryRESTMapper(apiGroupResources),
stopCh: make(chan struct{}),
prep: func(clientConnector *fakekarmadaclient.Clientset, restConfig *rest.Config, restMapper meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error) {
factory := informerfactory.NewSharedInformerFactory(clientConnector, 0)
Expand Down Expand Up @@ -374,7 +408,7 @@ func TestAddResourceRegistryEventHandler(t *testing.T) {
if err := upsertCluster(clientConnector, labels, apiEndpoint, clusterName, resourceVersion); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -384,7 +418,7 @@ func TestAddResourceRegistryEventHandler(t *testing.T) {
if err := upsertResourceRegistry(clientConnector, resourceSelectors, registryName, resourceVersion, []string{clusterName}); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand Down Expand Up @@ -414,26 +448,28 @@ func TestAddResourceRegistryEventHandler(t *testing.T) {

func TestUpdateResourceRegistryEventHandler(t *testing.T) {
tests := []struct {
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 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(clientConnector *fakekarmadaclient.Clientset, controller *Controller, controlPlaneClient client.Client) error
}{
{
name: "AddAllEventHandlers_TriggerUpdateResourceRegistryEvent_UpdatedResourceRegistryAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
restMapper: meta.NewDefaultRESTMapper(nil),
stopCh: make(chan struct{}),
name: "AddAllEventHandlers_TriggerUpdateResourceRegistryEvent_UpdatedResourceRegistryAddedToWorkQueue",
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
controlPlaneClient: fake.NewFakeClient(),
restMapper: restmapper.NewDiscoveryRESTMapper(apiGroupResources),
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) error {
verify: func(clientConnector *fakekarmadaclient.Clientset, controller *Controller, controlPlaneClient client.Client) error {
var (
registryName, clusterName, resourceVersion = "test-registry", "test-cluster", "1000"
apiEndpoint, labels = "10.0.0.1", map[string]string{}
Expand All @@ -455,12 +491,22 @@ func TestUpdateResourceRegistryEventHandler(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),
ClusterName: clusterName,
}, nil
}

// Wait a bit to allow addCluster background thread
// to complete its execution.
if err := upsertCluster(clientConnector, labels, apiEndpoint, clusterName, resourceVersion); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -470,7 +516,7 @@ func TestUpdateResourceRegistryEventHandler(t *testing.T) {
if err := upsertResourceRegistry(clientConnector, resourceSelectors, registryName, resourceVersion, []string{clusterName}); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -480,7 +526,7 @@ func TestUpdateResourceRegistryEventHandler(t *testing.T) {
if err := upsertResourceRegistry(clientConnector, resourceSelectorsUpdated, registryName, resourceVersion, []string{clusterName}); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -501,7 +547,7 @@ func TestUpdateResourceRegistryEventHandler(t *testing.T) {
informer.Start(test.stopCh)
defer close(test.stopCh)

if err := test.verify(test.client, controller); err != nil {
if err := test.verify(test.client, controller, test.controlPlaneClient); err != nil {
t.Errorf("failed to verify controller, got: %v", err)
}
})
Expand All @@ -524,7 +570,7 @@ func TestDeleteResourceRegistryEventHandler(t *testing.T) {
restConfig: &rest.Config{},
client: fakekarmadaclient.NewSimpleClientset(),
controlPlaneClient: fake.NewFakeClient(),
restMapper: meta.NewDefaultRESTMapper(nil),
restMapper: restmapper.NewDiscoveryRESTMapper(apiGroupResources),
stopCh: make(chan struct{}),
prep: func(clientConnector *fakekarmadaclient.Clientset, restConfig *rest.Config, restMapper meta.RESTMapper) (*Controller, informerfactory.SharedInformerFactory, error) {
factory := informerfactory.NewSharedInformerFactory(clientConnector, 0)
Expand Down Expand Up @@ -559,7 +605,7 @@ func TestDeleteResourceRegistryEventHandler(t *testing.T) {
if err := upsertCluster(clientConnector, labels, apiEndpoint, clusterName, resourceVersion); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -569,7 +615,7 @@ func TestDeleteResourceRegistryEventHandler(t *testing.T) {
if err := upsertResourceRegistry(clientConnector, resourceSelectors, registryName, resourceVersion, []string{clusterName}); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand All @@ -579,7 +625,7 @@ func TestDeleteResourceRegistryEventHandler(t *testing.T) {
if err := deleteResourceRegistry(clientConnector, registryName); err != nil {
return err
}
time.Sleep(time.Millisecond * 250)
time.Sleep(time.Millisecond * 500)
if err := cacheNextWrapper(controller); err != nil {
return err
}
Expand Down Expand Up @@ -637,6 +683,17 @@ func upsertCluster(client *fakekarmadaclient.Clientset, labels map[string]string
Status: metav1.ConditionTrue,
},
},
APIEnablements: []clusterv1alpha1.APIEnablement{
{
GroupVersion: "apps/v1",
Resources: []clusterv1alpha1.APIResource{
{
Name: "Deployments",
Kind: "Deployment",
},
},
},
},
},
}

Expand Down Expand Up @@ -678,6 +735,17 @@ func upsertClusterControllerRuntime(controlPlaneClient client.Client, labels map
Status: metav1.ConditionTrue,
},
},
APIEnablements: []clusterv1alpha1.APIEnablement{
{
GroupVersion: "apps/v1",
Resources: []clusterv1alpha1.APIResource{
{
Name: "Deployments",
Kind: "Deployment",
},
},
},
},
},
}

Expand Down

0 comments on commit 1345ad6

Please sign in to comment.