package validation import ( "testing" corev1 "k8s.io/api/core/v1" policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1" "github.com/karmada-io/karmada/pkg/util" ) func TestValidateOverrideSpec(t *testing.T) { var tests = []struct { name string overrideSpec policyv1alpha1.OverrideSpec expectError bool }{ { name: "overrideRules is set, overriders and targetCluster aren't set", overrideSpec: policyv1alpha1.OverrideSpec{ OverrideRules: []policyv1alpha1.RuleWithCluster{ { TargetCluster: &policyv1alpha1.ClusterAffinity{ ClusterNames: []string{"cluster-name"}, }, }, }, }, expectError: false, }, { name: "overriders and targetCluster are set, overrideRules isn't set", overrideSpec: policyv1alpha1.OverrideSpec{ TargetCluster: &policyv1alpha1.ClusterAffinity{ ClusterNames: []string{"cluster-name"}, }, Overriders: policyv1alpha1.Overriders{ Plaintext: []policyv1alpha1.PlaintextOverrider{ { Path: "spec/image", }, }, }, }, expectError: false, }, { name: "overrideRules and targetCluster can't co-exist", overrideSpec: policyv1alpha1.OverrideSpec{ OverrideRules: []policyv1alpha1.RuleWithCluster{ { TargetCluster: &policyv1alpha1.ClusterAffinity{ ClusterNames: []string{"cluster-name"}, }, }, }, TargetCluster: &policyv1alpha1.ClusterAffinity{ ClusterNames: []string{"cluster-name"}, }, }, expectError: true, }, { name: "overrideRules and overriders can't co-exist", overrideSpec: policyv1alpha1.OverrideSpec{ OverrideRules: []policyv1alpha1.RuleWithCluster{ { TargetCluster: &policyv1alpha1.ClusterAffinity{ ClusterNames: []string{"cluster-name"}, }, }, }, Overriders: policyv1alpha1.Overriders{ Plaintext: []policyv1alpha1.PlaintextOverrider{ { Path: "spec/image", }, }, }, }, expectError: true, }, { name: "overrideRules, targetCluster and overriders can't co-exist", overrideSpec: policyv1alpha1.OverrideSpec{ OverrideRules: []policyv1alpha1.RuleWithCluster{ { TargetCluster: &policyv1alpha1.ClusterAffinity{ ClusterNames: []string{"cluster-name"}, }, }, }, TargetCluster: &policyv1alpha1.ClusterAffinity{ ClusterNames: []string{"cluster-name"}, }, Overriders: policyv1alpha1.Overriders{ Plaintext: []policyv1alpha1.PlaintextOverrider{ { Path: "spec/image", }, }, }, }, expectError: true, }, } for _, test := range tests { tc := test err := ValidateOverrideSpec(&tc.overrideSpec) if err != nil && tc.expectError != true { t.Fatalf("expect no error but got: %v", err) } if err == nil && tc.expectError == true { t.Fatalf("expect an error but got none") } } } func TestValidatePolicyFieldSelector(t *testing.T) { fakeProvider := []string{"fooCloud"} fakeRegion := []string{"fooRegion"} fakeZone := []string{"fooZone"} tests := []struct { name string filedSelector *policyv1alpha1.FieldSelector expectError bool }{ { name: "supported key", filedSelector: &policyv1alpha1.FieldSelector{ MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: util.ProviderField, Operator: corev1.NodeSelectorOpIn, Values: fakeProvider, }, { Key: util.RegionField, Operator: corev1.NodeSelectorOpNotIn, Values: fakeRegion, }, { Key: util.ZoneField, Operator: corev1.NodeSelectorOpNotIn, Values: fakeZone, }, }, }, expectError: false, }, { name: "unsupported key", filedSelector: &policyv1alpha1.FieldSelector{ MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: "foo", Operator: corev1.NodeSelectorOpIn, Values: fakeProvider, }, { Key: util.RegionField, Operator: corev1.NodeSelectorOpNotIn, Values: fakeRegion, }, }, }, expectError: true, }, { name: "supported operator", filedSelector: &policyv1alpha1.FieldSelector{ MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: util.ProviderField, Operator: corev1.NodeSelectorOpIn, Values: fakeProvider, }, { Key: util.RegionField, Operator: corev1.NodeSelectorOpNotIn, Values: fakeRegion, }, }, }, expectError: false, }, { name: "unsupported operator", filedSelector: &policyv1alpha1.FieldSelector{ MatchExpressions: []corev1.NodeSelectorRequirement{ { Key: util.ProviderField, Operator: corev1.NodeSelectorOpExists, Values: fakeProvider, }, { Key: util.RegionField, Operator: corev1.NodeSelectorOpNotIn, Values: fakeRegion, }, }, }, expectError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { err := ValidatePolicyFieldSelector(tt.filedSelector) if err != nil && tt.expectError != true { t.Fatalf("expect no error but got: %v", err) } if err == nil && tt.expectError == true { t.Fatalf("expect an error but got none") } }) } }