diff --git a/pkg/framework/plugins/removeduplicates/validation_test.go b/pkg/framework/plugins/removeduplicates/validation_test.go new file mode 100644 index 000000000..2fb4a9cdd --- /dev/null +++ b/pkg/framework/plugins/removeduplicates/validation_test.go @@ -0,0 +1,48 @@ +package removeduplicates + +import ( + "testing" + + "sigs.k8s.io/descheduler/pkg/api" +) + +func TestValidateRemovePodsViolatingNodeTaintsArgs(t *testing.T) { + testCases := []struct { + description string + args *RemoveDuplicatesArgs + expectError bool + }{ + { + description: "valid namespace args, no errors", + args: &RemoveDuplicatesArgs{ + ExcludeOwnerKinds: []string{"Job"}, + Namespaces: &api.Namespaces{ + Include: []string{"default"}, + }, + }, + expectError: false, + }, + { + description: "invalid namespaces args, expects error", + args: &RemoveDuplicatesArgs{ + ExcludeOwnerKinds: []string{"Job"}, + Namespaces: &api.Namespaces{ + Include: []string{"default"}, + Exclude: []string{"kube-system"}, + }, + }, + expectError: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.description, func(t *testing.T) { + err := ValidateRemoveDuplicatesArgs(tc.args) + + hasError := err != nil + if tc.expectError != hasError { + t.Error("unexpected arg validation behavior") + } + }) + } +} diff --git a/pkg/framework/plugins/removefailedpods/validation_test.go b/pkg/framework/plugins/removefailedpods/validation_test.go new file mode 100644 index 000000000..9c79825b5 --- /dev/null +++ b/pkg/framework/plugins/removefailedpods/validation_test.go @@ -0,0 +1,72 @@ +package removefailedpods + +import ( + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/descheduler/pkg/api" +) + +func TestValidateRemoveFailedPodsArgs(t *testing.T) { + var oneHourPodLifetimeSeconds uint = 3600 + testCases := []struct { + description string + args *RemoveFailedPodsArgs + expectError bool + }{ + { + description: "valid namespace args, no errors", + args: &RemoveFailedPodsArgs{ + Namespaces: &api.Namespaces{ + Include: []string{"default"}, + }, + ExcludeOwnerKinds: []string{"Job"}, + Reasons: []string{"ReasonDoesNotMatch"}, + MinPodLifetimeSeconds: &oneHourPodLifetimeSeconds, + }, + expectError: false, + }, + { + description: "invalid namespaces args, expects error", + args: &RemoveFailedPodsArgs{ + Namespaces: &api.Namespaces{ + Include: []string{"default"}, + Exclude: []string{"kube-system"}, + }, + }, + expectError: true, + }, + { + description: "valid label selector args, no errors", + args: &RemoveFailedPodsArgs{ + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"role.kubernetes.io/node": ""}, + }, + }, + expectError: false, + }, + { + description: "invalid label selector args, expects errors", + args: &RemoveFailedPodsArgs{ + LabelSelector: &metav1.LabelSelector{ + MatchExpressions: []metav1.LabelSelectorRequirement{ + { + Operator: metav1.LabelSelectorOpIn, + }, + }, + }, + }, + expectError: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.description, func(t *testing.T) { + err := ValidateRemoveFailedPodsArgs(tc.args) + hasError := err != nil + if tc.expectError != hasError { + t.Error("unexpected arg validation behavior") + } + }) + } +} diff --git a/pkg/framework/plugins/removepodsviolatinginterpodantiaffinity/validation_test.go b/pkg/framework/plugins/removepodsviolatinginterpodantiaffinity/validation_test.go new file mode 100644 index 000000000..108cc1c9e --- /dev/null +++ b/pkg/framework/plugins/removepodsviolatinginterpodantiaffinity/validation_test.go @@ -0,0 +1,68 @@ +package removepodsviolatinginterpodantiaffinity + +import ( + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/descheduler/pkg/api" +) + +func TestValidateRemovePodsViolatingInterPodAntiAffinityArgs(t *testing.T) { + testCases := []struct { + description string + args *RemovePodsViolatingInterPodAntiAffinityArgs + expectError bool + }{ + { + description: "valid namespace args, no errors", + args: &RemovePodsViolatingInterPodAntiAffinityArgs{ + Namespaces: &api.Namespaces{ + Include: []string{"default"}, + }, + }, + expectError: false, + }, + { + description: "invalid namespaces args, expects error", + args: &RemovePodsViolatingInterPodAntiAffinityArgs{ + Namespaces: &api.Namespaces{ + Include: []string{"default"}, + Exclude: []string{"kube-system"}, + }, + }, + expectError: true, + }, + { + description: "valid label selector args, no errors", + args: &RemovePodsViolatingInterPodAntiAffinityArgs{ + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"role.kubernetes.io/node": ""}, + }, + }, + expectError: false, + }, + { + description: "invalid label selector args, expects errors", + args: &RemovePodsViolatingInterPodAntiAffinityArgs{ + LabelSelector: &metav1.LabelSelector{ + MatchExpressions: []metav1.LabelSelectorRequirement{ + { + Operator: metav1.LabelSelectorOpIn, + }, + }, + }, + }, + expectError: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.description, func(t *testing.T) { + err := ValidateRemovePodsViolatingInterPodAntiAffinityArgs(tc.args) + hasError := err != nil + if tc.expectError != hasError { + t.Error("unexpected arg validation behavior") + } + }) + } +}