@@ -889,6 +889,61 @@ func TestPickOneNodeForPreemption(t *testing.T) {
889
889
}
890
890
}
891
891
892
+ func TestPodEligibleToPreemptOthers (t * testing.T ) {
893
+ tests := []struct {
894
+ name string
895
+ pod * v1.Pod
896
+ pods []* v1.Pod
897
+ nodes []string
898
+ nominatedNodeStatus * framework.Status
899
+ expected bool
900
+ }{
901
+ {
902
+ name : "Pod with nominated node" ,
903
+ pod : st .MakePod ().Name ("p_with_nominated_node" ).UID ("p" ).Priority (highPriority ).NominatedNodeName ("node1" ).Obj (),
904
+ pods : []* v1.Pod {st .MakePod ().Name ("p1" ).UID ("p1" ).Priority (lowPriority ).Node ("node1" ).Terminating ().Obj ()},
905
+ nodes : []string {"node1" },
906
+ nominatedNodeStatus : framework .NewStatus (framework .UnschedulableAndUnresolvable , tainttoleration .ErrReasonNotMatch ),
907
+ expected : true ,
908
+ },
909
+ {
910
+ name : "Pod with nominated node, but without nominated node status" ,
911
+ pod : st .MakePod ().Name ("p_without_status" ).UID ("p" ).Priority (highPriority ).NominatedNodeName ("node1" ).Obj (),
912
+ pods : []* v1.Pod {st .MakePod ().Name ("p1" ).UID ("p1" ).Priority (lowPriority ).Node ("node1" ).Terminating ().Obj ()},
913
+ nodes : []string {"node1" },
914
+ nominatedNodeStatus : nil ,
915
+ expected : false ,
916
+ },
917
+ {
918
+ name : "Pod without nominated node" ,
919
+ pod : st .MakePod ().Name ("p_without_nominated_node" ).UID ("p" ).Priority (highPriority ).Obj (),
920
+ pods : []* v1.Pod {},
921
+ nodes : []string {},
922
+ nominatedNodeStatus : nil ,
923
+ expected : true ,
924
+ },
925
+ {
926
+ name : "Pod with 'PreemptNever' preemption policy" ,
927
+ pod : st .MakePod ().Name ("p_with_preempt_never_policy" ).UID ("p" ).Priority (highPriority ).PreemptionPolicy (v1 .PreemptNever ).Obj (),
928
+ pods : []* v1.Pod {},
929
+ nodes : []string {},
930
+ nominatedNodeStatus : nil ,
931
+ expected : false ,
932
+ },
933
+ }
934
+
935
+ for _ , test := range tests {
936
+ var nodes []* v1.Node
937
+ for _ , n := range test .nodes {
938
+ nodes = append (nodes , st .MakeNode ().Name (n ).Obj ())
939
+ }
940
+ snapshot := internalcache .NewSnapshot (test .pods , nodes )
941
+ if got := podEligibleToPreemptOthers (test .pod , snapshot .NodeInfos (), test .nominatedNodeStatus ); got != test .expected {
942
+ t .Errorf ("expected %t, got %t for pod: %s" , test .expected , got , test .pod .Name )
943
+ }
944
+ }
945
+ }
946
+
892
947
func TestNodesWherePreemptionMightHelp (t * testing.T ) {
893
948
// Prepare 4 nodes names.
894
949
nodeNames := []string {"node1" , "node2" , "node3" , "node4" }
0 commit comments