Skip to content

Commit

Permalink
repair the cluster_status_controller_test
Browse files Browse the repository at this point in the history
Signed-off-by: Tanggui Bian <softwarebtg@163.com>
  • Loading branch information
zishen committed Aug 17, 2023
1 parent 999c7ae commit 6f7bcd2
Showing 1 changed file with 128 additions and 0 deletions.
128 changes: 128 additions & 0 deletions pkg/controllers/status/cluster_status_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,19 @@ func TestClusterStatusController_Reconcile(t *testing.T) {
expectedResult: controllerruntime.Result{},
expectedError: false,
},
{
name: "Cluster found with finalizer",
clusterName: "test-cluster",
cluster: &clusterv1alpha1.Cluster{
ObjectMeta: metav1.ObjectMeta{
Finalizers: []string{
util.ClusterControllerFinalizer,
},
},
},
expectedResult: controllerruntime.Result{},
expectedError: false,
},
{
name: "Cluster found without finalizer",
clusterName: "test-cluster",
Expand All @@ -72,6 +85,7 @@ func TestClusterStatusController_Reconcile(t *testing.T) {
if tt.cluster != nil {
// Add a cluster to the fake client.
tt.cluster.ObjectMeta.Name = tt.clusterName
c.Client = fake.NewClientBuilder().WithScheme(gclient.NewSchema()).WithStatusSubresource(tt.cluster).Build()

if err := c.Client.Create(context.Background(), tt.cluster); err != nil {
t.Fatalf("Failed to create cluster: %v", err)
Expand Down Expand Up @@ -185,13 +199,59 @@ func TestClusterStatusController_syncClusterStatus(t *testing.T) {
server := mockServer(http.StatusNotFound, true)
defer server.Close()
serverAddress = server.URL
cluster := &clusterv1alpha1.Cluster{
ObjectMeta: metav1.ObjectMeta{Name: "test"},
Spec: clusterv1alpha1.ClusterSpec{
APIEndpoint: server.URL,
SecretRef: &clusterv1alpha1.LocalSecretReference{Namespace: "ns1", Name: "secret1"},
InsecureSkipTLSVerification: true,
ProxyURL: "http://1.1.1.2",
},
}
c := &ClusterStatusController{
Client: fake.NewClientBuilder().WithScheme(gclient.NewSchema()).WithStatusSubresource(cluster).Build(),
GenericInformerManager: genericmanager.GetInstance(),
TypedInformerManager: typedmanager.GetInstance(),
ClusterSuccessThreshold: metav1.Duration{
Duration: time.Duration(1000),
},
ClusterFailureThreshold: metav1.Duration{
Duration: time.Duration(1000),
},
clusterConditionCache: clusterConditionStore{},
PredicateFunc: helper.NewClusterPredicateOnAgent("test"),
RateLimiterOptions: ratelimiterflag.Options{
RateLimiterBaseDelay: time.Duration(1000),
RateLimiterMaxDelay: time.Duration(1000),
RateLimiterQPS: 10,
RateLimiterBucketSize: 10,
},
ClusterClientSetFunc: clusterClientSetFunc,
ClusterDynamicClientSetFunc: util.NewClusterDynamicClientSetForAgent,
}

if err := c.Client.Create(context.Background(), cluster); err != nil {
t.Fatalf("Failed to create cluster: %v", err)
}

res, err := c.syncClusterStatus(cluster)
expect := controllerruntime.Result{}
assert.Equal(t, expect, res)
assert.Empty(t, err)
})

t.Run("online and healthy is true", func(t *testing.T) {
server := mockServer(http.StatusOK, false)
defer server.Close()
serverAddress = server.URL
cluster := &clusterv1alpha1.Cluster{
ObjectMeta: metav1.ObjectMeta{Name: "test"},
Spec: clusterv1alpha1.ClusterSpec{
APIEndpoint: server.URL,
SecretRef: &clusterv1alpha1.LocalSecretReference{Namespace: "ns1", Name: "secret1"},
InsecureSkipTLSVerification: true,
ProxyURL: "http://1.1.1.1",
SyncMode: clusterv1alpha1.Pull,
},
}
c := &ClusterStatusController{
Expand All @@ -215,6 +275,7 @@ func TestClusterStatusController_syncClusterStatus(t *testing.T) {
ClusterClientSetFunc: clusterClientSetFunc,
ClusterDynamicClientSetFunc: util.NewClusterDynamicClientSetForAgent,
}

if err := c.Client.Create(context.Background(), cluster); err != nil {
t.Fatalf("Failed to create cluster: %v", err)
}
Expand Down Expand Up @@ -747,6 +808,73 @@ func TestGetAllocatableModelings(t *testing.T) {
}

func TestClusterStatusController_updateStatusIfNeeded(t *testing.T) {
t.Run("cluster is in client", func(t *testing.T) {
cluster := &clusterv1alpha1.Cluster{
ObjectMeta: metav1.ObjectMeta{
Name: "cluster1",
Namespace: "karmada",
},
Status: clusterv1alpha1.ClusterStatus{
KubernetesVersion: "v1",
},
Spec: clusterv1alpha1.ClusterSpec{
ResourceModels: []clusterv1alpha1.ResourceModel{
{
Grade: 0,
Ranges: []clusterv1alpha1.ResourceModelRange{
{
Name: clusterv1alpha1.ResourceCPU,
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
Max: *resource.NewQuantity(1, resource.DecimalSI),
},
{
Name: clusterv1alpha1.ResourceMemory,
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
Max: *resource.NewQuantity(1024, resource.DecimalSI),
},
},
},
{
Grade: 1,
Ranges: []clusterv1alpha1.ResourceModelRange{
{
Name: clusterv1alpha1.ResourceCPU,
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
Max: *resource.NewQuantity(2, resource.DecimalSI),
},
{
Name: clusterv1alpha1.ResourceMemory,
Min: *resource.NewMilliQuantity(1024, resource.DecimalSI),
Max: *resource.NewQuantity(1024*2, resource.DecimalSI),
},
},
},
},
},
}

currentClusterStatus := clusterv1alpha1.ClusterStatus{
KubernetesVersion: "v2",
}

c := &ClusterStatusController{
Client: fake.NewClientBuilder().WithScheme(gclient.NewSchema()).WithObjects(
cluster,
).WithStatusSubresource(cluster).Build(),
GenericInformerManager: genericmanager.GetInstance(),
TypedInformerManager: typedmanager.GetInstance(),
ClusterClientOption: &util.ClientOption{
QPS: 5,
Burst: 10,
},
ClusterClientSetFunc: util.NewClusterClientSet,
}

actual, err := c.updateStatusIfNeeded(cluster, currentClusterStatus)
assert.Equal(t, controllerruntime.Result{}, actual)
assert.Empty(t, err, "updateStatusIfNeeded returns error")
})

t.Run("cluster isn't in client", func(t *testing.T) {
cluster := &clusterv1alpha1.Cluster{
ObjectMeta: metav1.ObjectMeta{
Expand Down

0 comments on commit 6f7bcd2

Please sign in to comment.