karmada/pkg/util/overridemanager/overridemanager_test.go

180 lines
4.9 KiB
Go

package overridemanager
import (
"reflect"
"testing"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
utilhelper "github.com/karmada-io/karmada/pkg/util/helper"
"github.com/karmada-io/karmada/test/helper"
)
func TestGetMatchingOverridePolicies(t *testing.T) {
cluster1 := helper.NewCluster("cluster1")
cluster2 := helper.NewCluster("cluster2")
deployment := helper.NewDeployment(metav1.NamespaceDefault, "test")
deploymentObj, _ := utilhelper.ToUnstructured(deployment)
overriders1 := policyv1alpha1.Overriders{
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/metadata/annotations",
Operator: "add",
Value: apiextensionsv1.JSON{Raw: []byte("foo: bar")},
},
},
}
overriders2 := policyv1alpha1.Overriders{
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/metadata/annotations",
Operator: "add",
Value: apiextensionsv1.JSON{Raw: []byte("aaa: bbb")},
},
},
}
overriders3 := policyv1alpha1.Overriders{
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/metadata/annotations",
Operator: "add",
Value: apiextensionsv1.JSON{Raw: []byte("hello: world")},
},
},
}
overridePolicy1 := &policyv1alpha1.OverridePolicy{
ObjectMeta: metav1.ObjectMeta{
Namespace: metav1.NamespaceDefault,
Name: "overridePolicy1",
},
Spec: policyv1alpha1.OverrideSpec{
ResourceSelectors: []policyv1alpha1.ResourceSelector{
{
APIVersion: deployment.APIVersion,
Kind: deployment.Kind,
Name: deployment.Name,
},
},
OverrideRules: []policyv1alpha1.RuleWithCluster{
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{cluster1.Name, cluster2.Name},
},
Overriders: overriders1,
},
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{cluster2.Name},
},
Overriders: overriders2,
},
},
},
}
overridePolicy2 := &policyv1alpha1.OverridePolicy{
ObjectMeta: metav1.ObjectMeta{
Namespace: metav1.NamespaceDefault,
Name: "overridePolicy2",
},
Spec: policyv1alpha1.OverrideSpec{
OverrideRules: []policyv1alpha1.RuleWithCluster{
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{cluster1.Name, cluster2.Name},
},
Overriders: overriders3,
},
},
},
}
oldOverridePolicy := &policyv1alpha1.ClusterOverridePolicy{
ObjectMeta: metav1.ObjectMeta{
Namespace: metav1.NamespaceDefault,
Name: "oldOverridePolicy",
},
Spec: policyv1alpha1.OverrideSpec{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{cluster1.Name},
},
Overriders: overriders3,
},
}
m := &overrideManagerImpl{}
tests := []struct {
name string
policies []GeneralOverridePolicy
resource *unstructured.Unstructured
cluster *clusterv1alpha1.Cluster
wantedOverriders []policyOverriders
}{
{
name: "OverrideRules test 1",
policies: []GeneralOverridePolicy{overridePolicy1, overridePolicy2},
resource: deploymentObj,
cluster: cluster1,
wantedOverriders: []policyOverriders{
{
name: overridePolicy1.Name,
namespace: overridePolicy1.Namespace,
overriders: overriders1,
},
{
name: overridePolicy2.Name,
namespace: overridePolicy2.Namespace,
overriders: overriders3,
},
},
},
{
name: "OverrideRules test 2",
policies: []GeneralOverridePolicy{overridePolicy1, overridePolicy2},
resource: deploymentObj,
cluster: cluster2,
wantedOverriders: []policyOverriders{
{
name: overridePolicy1.Name,
namespace: overridePolicy1.Namespace,
overriders: overriders1,
},
{
name: overridePolicy1.Name,
namespace: overridePolicy1.Namespace,
overriders: overriders2,
},
{
name: overridePolicy2.Name,
namespace: overridePolicy2.Namespace,
overriders: overriders3,
},
},
},
{
name: "TargetCluster and Overriders test",
policies: []GeneralOverridePolicy{oldOverridePolicy},
resource: deploymentObj,
cluster: cluster1,
wantedOverriders: []policyOverriders{
{
name: oldOverridePolicy.Name,
namespace: oldOverridePolicy.Namespace,
overriders: overriders3,
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := m.getOverridersFromOverridePolicies(tt.policies, tt.resource, tt.cluster); !reflect.DeepEqual(got, tt.wantedOverriders) {
t.Errorf("getOverridersFromOverridePolicies() = %v, want %v", got, tt.wantedOverriders)
}
})
}
}