From 2f5178f88f6197ca9e31b394728f517c87979322 Mon Sep 17 00:00:00 2001 From: AllenZMC Date: Mon, 1 Aug 2022 23:42:01 +0800 Subject: [PATCH] add ut for binding/common Signed-off-by: AllenZMC --- pkg/controllers/binding/common_test.go | 182 +++++++++++++++++++++++++ 1 file changed, 182 insertions(+) diff --git a/pkg/controllers/binding/common_test.go b/pkg/controllers/binding/common_test.go index 77c76840f..4158e53f0 100644 --- a/pkg/controllers/binding/common_test.go +++ b/pkg/controllers/binding/common_test.go @@ -4,7 +4,12 @@ import ( "reflect" "testing" + v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2" + "github.com/karmada-io/karmada/pkg/util/names" ) func Test_mergeTargetClusters(t *testing.T) { @@ -122,3 +127,180 @@ func Test_transScheduleResultToMap(t *testing.T) { }) } } + +func Test_getReplicaInfos(t *testing.T) { + tests := []struct { + name string + targetClusters []workv1alpha2.TargetCluster + wantBool bool + wantRes map[string]int64 + }{ + { + name: "a cluster with replicas", + targetClusters: []workv1alpha2.TargetCluster{ + { + Name: "foo", + Replicas: 1, + }, + }, + wantBool: true, + wantRes: map[string]int64{ + "foo": 1, + }, + }, + { + name: "none of the clusters have replicas", + targetClusters: []workv1alpha2.TargetCluster{ + { + Name: "foo", + }, + }, + wantBool: false, + wantRes: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, got1 := getReplicaInfos(tt.targetClusters) + if got != tt.wantBool { + t.Errorf("getReplicaInfos() got = %v, want %v", got, tt.wantBool) + } + if !reflect.DeepEqual(got1, tt.wantRes) { + t.Errorf("getReplicaInfos() got1 = %v, want %v", got1, tt.wantRes) + } + }) + } +} + +func Test_mergeLabel(t *testing.T) { + namespace := "fake-ns" + bindingName := "fake-bindingName" + + tests := []struct { + name string + workload *unstructured.Unstructured + workNamespace string + binding metav1.Object + scope v1.ResourceScope + want map[string]string + }{ + { + name: "NamespaceScoped", + workload: &unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": map[string]interface{}{ + "name": "demo-deployment", + "namespace": namespace, + }, + }, + }, + workNamespace: namespace, + binding: &workv1alpha2.ClusterResourceBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: bindingName, + Namespace: namespace, + }, + }, + scope: v1.NamespaceScoped, + want: map[string]string{ + workv1alpha2.ResourceBindingReferenceKey: names.GenerateBindingReferenceKey(namespace, bindingName), + }, + }, + { + name: "ClusterScoped", + workload: &unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": "v1", + "kind": "Namespace", + "metadata": map[string]interface{}{ + "name": "demo-ns", + }, + }, + }, + binding: &workv1alpha2.ClusterResourceBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: bindingName, + }, + }, + scope: v1.ClusterScoped, + want: map[string]string{ + workv1alpha2.ClusterResourceBindingReferenceKey: names.GenerateBindingReferenceKey("", bindingName), + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := mergeLabel(tt.workload, tt.workNamespace, tt.binding, tt.scope); !reflect.DeepEqual(got, tt.want) { + t.Errorf("mergeLabel() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_mergeAnnotations(t *testing.T) { + namespace := "fake-ns" + bindingName := "fake-bindingName" + + tests := []struct { + name string + workload *unstructured.Unstructured + binding metav1.Object + scope v1.ResourceScope + want map[string]string + }{ + { + name: "NamespaceScoped", + workload: &unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": map[string]interface{}{ + "name": "demo-deployment", + "namespace": namespace, + }, + }, + }, + binding: &workv1alpha2.ClusterResourceBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: bindingName, + Namespace: namespace, + }, + }, + scope: v1.NamespaceScoped, + want: map[string]string{ + workv1alpha2.ResourceBindingNamespaceAnnotationKey: namespace, + workv1alpha2.ResourceBindingNameAnnotationKey: bindingName, + }, + }, + { + name: "ClusterScoped", + workload: &unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": "v1", + "kind": "Namespace", + "metadata": map[string]interface{}{ + "name": "demo-ns", + }, + }, + }, + binding: &workv1alpha2.ClusterResourceBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: bindingName, + }, + }, + scope: v1.ClusterScoped, + want: map[string]string{ + workv1alpha2.ClusterResourceBindingAnnotationKey: bindingName, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := mergeAnnotations(tt.workload, tt.binding, tt.scope); !reflect.DeepEqual(got, tt.want) { + t.Errorf("mergeAnnotations() = %v, want %v", got, tt.want) + } + }) + } +}