Skip to content

Commit 421f87a

Browse files
committed
feat: add a requeueing integration test for PodTopologySpread with Node/delete event (QHint: disabled)
1 parent bf8f7a3 commit 421f87a

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

test/integration/scheduler/queue_test.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ func TestCoreResourceEnqueue(t *testing.T) {
724724
enableSchedulingQueueHint: []bool{true},
725725
},
726726
{
727-
name: "Pods with PodTopologySpread should be requeued when a Node with a topology label is deleted",
727+
name: "Pods with PodTopologySpread should be requeued when a Node with a topology label is deleted (QHint: enabled)",
728728
initialNodes: []*v1.Node{
729729
st.MakeNode().Name("fake-node1").Label("node", "fake-node").Obj(),
730730
st.MakeNode().Name("fake-node2").Label("zone", "fake-node").Obj(),
@@ -749,6 +749,32 @@ func TestCoreResourceEnqueue(t *testing.T) {
749749
wantRequeuedPods: sets.New("pod4"),
750750
enableSchedulingQueueHint: []bool{true},
751751
},
752+
{
753+
name: "Pods with PodTopologySpread should be requeued when a Node with a topology label is deleted (QHint: disabled)",
754+
initialNodes: []*v1.Node{
755+
st.MakeNode().Name("fake-node1").Label("node", "fake-node").Obj(),
756+
st.MakeNode().Name("fake-node2").Label("zone", "fake-node").Obj(),
757+
},
758+
initialPods: []*v1.Pod{
759+
st.MakePod().Name("pod1").Label("key1", "val").SpreadConstraint(1, "node", v1.DoNotSchedule, st.MakeLabelSelector().Exists("key1").Obj(), nil, nil, nil, nil).Container("image").Node("fake-node1").Obj(),
760+
st.MakePod().Name("pod2").Label("key1", "val").SpreadConstraint(1, "zone", v1.DoNotSchedule, st.MakeLabelSelector().Exists("key1").Obj(), nil, nil, nil, nil).Container("image").Node("fake-node2").Obj(),
761+
},
762+
pods: []*v1.Pod{
763+
// - Pod3 and Pod4 will be rejected by the PodTopologySpread plugin.
764+
st.MakePod().Name("pod3").Label("key1", "val").SpreadConstraint(1, "node", v1.DoNotSchedule, st.MakeLabelSelector().Exists("key1").Obj(), ptr.To(int32(3)), nil, nil, nil).Container("image").Obj(),
765+
st.MakePod().Name("pod4").Label("key1", "val").SpreadConstraint(1, "zone", v1.DoNotSchedule, st.MakeLabelSelector().Exists("key1").Obj(), ptr.To(int32(3)), nil, nil, nil).Container("image").Obj(),
766+
},
767+
triggerFn: func(testCtx *testutils.TestContext) error {
768+
// Trigger an NodeTaint delete event.
769+
// It should requeue both pod3 and pod4 only because PodTopologySpread subscribes to Node/delete events.
770+
if err := testCtx.ClientSet.CoreV1().Nodes().Delete(testCtx.Ctx, "fake-node2", metav1.DeleteOptions{}); err != nil {
771+
return fmt.Errorf("failed to update node: %w", err)
772+
}
773+
return nil
774+
},
775+
wantRequeuedPods: sets.New("pod3", "pod4"),
776+
enableSchedulingQueueHint: []bool{false},
777+
},
752778
{
753779
name: "Pods with PodTopologySpread should be requeued when a NodeTaint of a Node with a topology label has been updated",
754780
initialNodes: []*v1.Node{

0 commit comments

Comments
 (0)