@@ -2286,3 +2286,32 @@ func assignDefaultStartTime(pods []*v1.Pod) {
2286
2286
}
2287
2287
}
2288
2288
}
2289
+
2290
+ func TestFairEvaluationForNodes (t * testing.T ) {
2291
+ defer algorithmpredicates .SetPredicatesOrderingDuringTest (order )()
2292
+ predicates := map [string ]algorithmpredicates.FitPredicate {"true" : truePredicate }
2293
+ numAllNodes := 500
2294
+ nodeNames := make ([]string , 0 , numAllNodes )
2295
+ for i := 0 ; i < numAllNodes ; i ++ {
2296
+ nodeNames = append (nodeNames , strconv .Itoa (i ))
2297
+ }
2298
+ nodes := makeNodeList (nodeNames )
2299
+ g := makeScheduler (predicates , nodes )
2300
+ // To make numAllNodes % nodesToFind != 0
2301
+ g .percentageOfNodesToScore = 30
2302
+ nodesToFind := int (g .numFeasibleNodesToFind (int32 (numAllNodes )))
2303
+
2304
+ // Iterating over all nodes more than twice
2305
+ for i := 0 ; i < 2 * (numAllNodes / nodesToFind + 1 ); i ++ {
2306
+ nodesThatFit , _ , _ , err := g .findNodesThatFit (context .Background (), framework .NewCycleState (), & v1.Pod {})
2307
+ if err != nil {
2308
+ t .Errorf ("unexpected error: %v" , err )
2309
+ }
2310
+ if len (nodesThatFit ) != nodesToFind {
2311
+ t .Errorf ("got %d nodes filtered, want %d" , len (nodesThatFit ), nodesToFind )
2312
+ }
2313
+ if g .nextStartNodeIndex != (i + 1 )* nodesToFind % numAllNodes {
2314
+ t .Errorf ("got %d lastProcessedNodeIndex, want %d" , g .nextStartNodeIndex , (i + 1 )* nodesToFind % numAllNodes )
2315
+ }
2316
+ }
2317
+ }
0 commit comments