diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index bcc0b9e7ae..876ff69499 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -6582,6 +6582,31 @@ func TestValidatePod(t *testing.T) { }), }, }, + "invalid node selector requirement in node affinity, key is invalid": { + expectedError: "spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key", + spec: core.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "123", + Namespace: "ns", + }, + Spec: validPodSpec(&core.Affinity{ + NodeAffinity: &core.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &core.NodeSelector{ + NodeSelectorTerms: []core.NodeSelectorTerm{ + { + MatchExpressions: []core.NodeSelectorRequirement{ + { + Key: "invalid key ___@#", + Operator: core.NodeSelectorOpExists, + }, + }, + }, + }, + }, + }, + }), + }, + }, "invalid node field selector requirement in node affinity, more values for field selector": { expectedError: "spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchFields[0].values", spec: core.Pod{ diff --git a/pkg/scheduler/algorithm/predicates/predicates_test.go b/pkg/scheduler/algorithm/predicates/predicates_test.go index 885268db68..859a1eab7d 100644 --- a/pkg/scheduler/algorithm/predicates/predicates_test.go +++ b/pkg/scheduler/algorithm/predicates/predicates_test.go @@ -1359,6 +1359,34 @@ func TestPodFitsSelector(t *testing.T) { test: "Pod with an Affinity matches node's labels but the PodSpec.NodeSelector(the old thing that we are deprecating) " + "is not satisfied, won't schedule onto the node", }, + { + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Affinity: &v1.Affinity{ + NodeAffinity: &v1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{ + NodeSelectorTerms: []v1.NodeSelectorTerm{ + { + MatchExpressions: []v1.NodeSelectorRequirement{ + { + Key: "foo", + Operator: v1.NodeSelectorOpNotIn, + Values: []string{"invalid value: ___@#$%^"}, + }, + }, + }, + }, + }, + }, + }, + }, + }, + labels: map[string]string{ + "foo": "bar", + }, + fits: false, + test: "Pod with an invalid value in Affinity term won't be scheduled onto the node", + }, } expectedFailureReasons := []algorithm.PredicateFailureReason{ErrNodeSelectorNotMatch} diff --git a/test/e2e/scheduling/predicates.go b/test/e2e/scheduling/predicates.go index 4b677e602e..db1049897f 100644 --- a/test/e2e/scheduling/predicates.go +++ b/test/e2e/scheduling/predicates.go @@ -21,7 +21,6 @@ import ( "time" "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -367,29 +366,6 @@ var _ = SIGDescribe("SchedulerPredicates [Serial]", func() { verifyResult(cs, 0, 1, ns) }) - It("validates that a pod with an invalid NodeAffinity is rejected", func() { - By("Trying to launch a pod with an invalid Affinity data.") - podName := "without-label" - _, err := cs.CoreV1().Pods(ns).Create(initPausePod(f, pausePodConfig{ - Name: podName, - Affinity: &v1.Affinity{ - NodeAffinity: &v1.NodeAffinity{ - RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{ - NodeSelectorTerms: []v1.NodeSelectorTerm{ - { - MatchExpressions: []v1.NodeSelectorRequirement{}, - }, - }, - }, - }, - }, - })) - - if err == nil || !errors.IsInvalid(err) { - framework.Failf("Expect error of invalid, got : %v", err) - } - }) - /* Testname: scheduler-node-selector-matching Description: Ensure that scheduler respects the NodeSelector field