Skip to content

Commit 8a39a2c

Browse files
committed
Add test case for a pod becoming schedulable when a node is updated
Also, avoid unnecessary copying when changing node taints
1 parent 4e8b56e commit 8a39a2c

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

test/integration/scheduler/predicates_test.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,8 +1051,35 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
10511051
Name: "pod-1",
10521052
},
10531053
update: func(cs kubernetes.Interface) error {
1054-
_, err := createNode(cs, "node-1", nil)
1055-
return err
1054+
_, err := createNode(cs, "node-added", nil)
1055+
if err != nil {
1056+
return fmt.Errorf("cannot create node: %v", err)
1057+
}
1058+
return nil
1059+
},
1060+
},
1061+
{
1062+
name: "node gets taint removed",
1063+
init: func(cs kubernetes.Interface) error {
1064+
node, err := createNode(cs, "node-tainted", nil)
1065+
if err != nil {
1066+
return fmt.Errorf("cannot create node: %v", err)
1067+
}
1068+
taint := v1.Taint{Key: "test", Value: "test", Effect: v1.TaintEffectNoSchedule}
1069+
if err := testutils.AddTaintToNode(cs, node.Name, taint); err != nil {
1070+
return fmt.Errorf("cannot add taint to node: %v", err)
1071+
}
1072+
return nil
1073+
},
1074+
pod: &pausePodConfig{
1075+
Name: "pod-1",
1076+
},
1077+
update: func(cs kubernetes.Interface) error {
1078+
taint := v1.Taint{Key: "test", Value: "test", Effect: v1.TaintEffectNoSchedule}
1079+
if err := testutils.RemoveTaintOffNode(cs, "node-tainted", taint); err != nil {
1080+
return fmt.Errorf("cannot remove taint off node: %v", err)
1081+
}
1082+
return nil
10561083
},
10571084
},
10581085
// TODO(#91111): Add more test cases.
@@ -1061,6 +1088,7 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
10611088
t.Run(tt.name, func(t *testing.T) {
10621089
testCtx := initTest(t, "scheduler-informer")
10631090
defer testutils.CleanupTest(t, testCtx)
1091+
10641092
if tt.init != nil {
10651093
if err := tt.init(testCtx.ClientSet); err != nil {
10661094
t.Fatal(err)

test/integration/util/util.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,25 @@ func AddTaintToNode(cs clientset.Interface, nodeName string, taint v1.Taint) err
219219
if err != nil {
220220
return err
221221
}
222-
copy := node.DeepCopy()
223-
copy.Spec.Taints = append(copy.Spec.Taints, taint)
224-
_, err = cs.CoreV1().Nodes().Update(context.TODO(), copy, metav1.UpdateOptions{})
222+
node.Spec.Taints = append(node.Spec.Taints, taint)
223+
_, err = cs.CoreV1().Nodes().Update(context.TODO(), node, metav1.UpdateOptions{})
224+
return err
225+
}
226+
227+
// RemoveTaintOffNode removes a specific taint from a node
228+
func RemoveTaintOffNode(cs clientset.Interface, nodeName string, taint v1.Taint) error {
229+
node, err := cs.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
230+
if err != nil {
231+
return err
232+
}
233+
var taints []v1.Taint
234+
for _, t := range node.Spec.Taints {
235+
if !t.MatchTaint(&taint) {
236+
taints = append(taints, t)
237+
}
238+
}
239+
node.Spec.Taints = taints
240+
_, err = cs.CoreV1().Nodes().Update(context.TODO(), node, metav1.UpdateOptions{})
225241
return err
226242
}
227243

0 commit comments

Comments
 (0)