@@ -41,80 +41,9 @@ const (
41
41
42
42
type nodeToScoreMap map [string ]int64
43
43
44
- func initTest (policy topologyv1alpha2.TopologyManagerPolicy , nodes ... * topologyv1alpha2.NodeResourceTopology ) (map [string ]* v1.Node , ctrlclient.Client ) {
45
- nodeTopologies := make ([]* topologyv1alpha2.NodeResourceTopology , 3 )
44
+ func initTest (nodeTopologies []* topologyv1alpha2.NodeResourceTopology ) (map [string ]* v1.Node , ctrlclient.Client ) {
46
45
nodesMap := make (map [string ]* v1.Node )
47
46
48
- if len (nodes ) == 0 {
49
- // noderesourcetopology objects
50
- nodeTopologies [0 ] = & topologyv1alpha2.NodeResourceTopology {
51
- ObjectMeta : metav1.ObjectMeta {Name : "Node1" },
52
- TopologyPolicies : []string {string (policy )},
53
- Zones : topologyv1alpha2.ZoneList {
54
- topologyv1alpha2.Zone {
55
- Name : "node-0" ,
56
- Type : "Node" ,
57
- Resources : topologyv1alpha2.ResourceInfoList {
58
- MakeTopologyResInfo (cpu , "4" , "4" ),
59
- MakeTopologyResInfo (memory , "500Mi" , "500Mi" ),
60
- },
61
- },
62
- topologyv1alpha2.Zone {
63
- Name : "node-1" ,
64
- Type : "Node" ,
65
- Resources : topologyv1alpha2.ResourceInfoList {
66
- MakeTopologyResInfo (cpu , "4" , "4" ),
67
- MakeTopologyResInfo (memory , "500Mi" , "500Mi" ),
68
- },
69
- },
70
- },
71
- }
72
-
73
- nodeTopologies [1 ] = & topologyv1alpha2.NodeResourceTopology {
74
- ObjectMeta : metav1.ObjectMeta {Name : "Node2" },
75
- TopologyPolicies : []string {string (policy )},
76
- Zones : topologyv1alpha2.ZoneList {
77
- topologyv1alpha2.Zone {
78
- Name : "node-0" ,
79
- Type : "Node" ,
80
- Resources : topologyv1alpha2.ResourceInfoList {
81
- MakeTopologyResInfo (cpu , "2" , "2" ),
82
- MakeTopologyResInfo (memory , "50Mi" , "50Mi" ),
83
- },
84
- }, topologyv1alpha2.Zone {
85
- Name : "node-1" ,
86
- Type : "Node" ,
87
- Resources : topologyv1alpha2.ResourceInfoList {
88
- MakeTopologyResInfo (cpu , "2" , "2" ),
89
- MakeTopologyResInfo (memory , "50Mi" , "50Mi" ),
90
- },
91
- },
92
- },
93
- }
94
- nodeTopologies [2 ] = & topologyv1alpha2.NodeResourceTopology {
95
- ObjectMeta : metav1.ObjectMeta {Name : "Node3" },
96
- TopologyPolicies : []string {string (policy )},
97
- Zones : topologyv1alpha2.ZoneList {
98
- topologyv1alpha2.Zone {
99
- Name : "node-0" ,
100
- Type : "Node" ,
101
- Resources : topologyv1alpha2.ResourceInfoList {
102
- MakeTopologyResInfo (cpu , "6" , "6" ),
103
- MakeTopologyResInfo (memory , "60Mi" , "60Mi" ),
104
- },
105
- }, topologyv1alpha2.Zone {
106
- Name : "node-1" ,
107
- Type : "Node" ,
108
- Resources : topologyv1alpha2.ResourceInfoList {
109
- MakeTopologyResInfo (cpu , "6" , "6" ),
110
- MakeTopologyResInfo (memory , "60Mi" , "60Mi" ),
111
- },
112
- },
113
- },
114
- }
115
- } else {
116
- nodeTopologies = nodes
117
- }
118
47
// init node objects
119
48
for _ , nrt := range nodeTopologies {
120
49
res := makeResourceListFromZones (nrt .Zones )
@@ -204,7 +133,7 @@ func TestNodeResourceScorePlugin(t *testing.T) {
204
133
}
205
134
206
135
for _ , test := range tests {
207
- nodesMap , lister := initTest (topologyv1alpha2 .SingleNUMANodeContainerLevel )
136
+ nodesMap , lister := initTest (defaultNUMANodes ( withPolicy ( topologyv1alpha2 .SingleNUMANodeContainerLevel )) )
208
137
t .Run (test .name , func (t * testing.T ) {
209
138
tm := & TopologyMatch {
210
139
scoreStrategyFunc : test .strategy ,
@@ -254,7 +183,6 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
254
183
name string
255
184
podRequests []v1.ResourceList
256
185
wantedRes nodeToScoreMap
257
- policy topologyv1alpha2.TopologyManagerPolicy
258
186
nodes []* topologyv1alpha2.NodeResourceTopology
259
187
}{
260
188
{
@@ -270,7 +198,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
270
198
"Node2" : 94 ,
271
199
"Node3" : 94 ,
272
200
},
273
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
201
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortContainerLevel )) ,
274
202
},
275
203
{
276
204
name : "container scope, one container case 2" ,
@@ -285,7 +213,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
285
213
"Node2" : 82 ,
286
214
"Node3" : 94 ,
287
215
},
288
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
216
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortContainerLevel )) ,
289
217
},
290
218
{
291
219
name : "container scope, one container case 3" ,
@@ -300,7 +228,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
300
228
"Node2" : 0 ,
301
229
"Node3" : 94 ,
302
230
},
303
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
231
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortContainerLevel )) ,
304
232
},
305
233
{
306
234
name : "container scope, two containers case 1" ,
@@ -319,7 +247,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
319
247
"Node2" : 94 ,
320
248
"Node3" : 94 ,
321
249
},
322
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
250
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortContainerLevel )) ,
323
251
},
324
252
{
325
253
name : "container scope, two containers case 2" ,
@@ -338,7 +266,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
338
266
"Node2" : 82 ,
339
267
"Node3" : 94 ,
340
268
},
341
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
269
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortContainerLevel )) ,
342
270
},
343
271
{
344
272
name : "container scope, two containers case 3" ,
@@ -357,7 +285,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
357
285
"Node2" : 0 ,
358
286
"Node3" : 94 ,
359
287
},
360
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
288
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortContainerLevel )) ,
361
289
},
362
290
{
363
291
name : "container scope, two containers non NUMA resource" ,
@@ -374,7 +302,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
374
302
"Node2" : 100 ,
375
303
"Node3" : 100 ,
376
304
},
377
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
305
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortContainerLevel )) ,
378
306
},
379
307
{
380
308
name : "pod scope, two containers case 1" ,
@@ -393,7 +321,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
393
321
"Node2" : 82 ,
394
322
"Node3" : 82 ,
395
323
},
396
- policy : topologyv1alpha2 .BestEffortPodLevel ,
324
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortPodLevel )) ,
397
325
},
398
326
{
399
327
name : "pod scope, two containers case 2" ,
@@ -412,7 +340,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
412
340
"Node2" : 82 ,
413
341
"Node3" : 82 ,
414
342
},
415
- policy : topologyv1alpha2 .BestEffortPodLevel ,
343
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortPodLevel )) ,
416
344
},
417
345
{
418
346
name : "pod scope, two containers case 3" ,
@@ -431,7 +359,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
431
359
"Node2" : 0 ,
432
360
"Node3" : 82 ,
433
361
},
434
- policy : topologyv1alpha2 .BestEffortPodLevel ,
362
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortPodLevel )) ,
435
363
},
436
364
{
437
365
name : "pod scope, one containers non NUMA resource" ,
@@ -445,7 +373,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
445
373
"Node2" : 100 ,
446
374
"Node3" : 100 ,
447
375
},
448
- policy : topologyv1alpha2 .BestEffortPodLevel ,
376
+ nodes : defaultNUMANodes ( withPolicy ( topologyv1alpha2 .BestEffortPodLevel )) ,
449
377
},
450
378
{
451
379
name : "container scope, one container, 4 NUMA nodes, 1 gpu " ,
@@ -460,8 +388,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
460
388
"Node1" : 94 ,
461
389
"Node2" : 94 ,
462
390
},
463
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
464
- nodes : fourNUMANodes (),
391
+ nodes : fourNUMANodes (),
465
392
},
466
393
{
467
394
name : "container scope, one container, 4 NUMA nodes, 2 gpu " ,
@@ -476,8 +403,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
476
403
"Node1" : 82 ,
477
404
"Node2" : 76 ,
478
405
},
479
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
480
- nodes : fourNUMANodes (),
406
+ nodes : fourNUMANodes (),
481
407
},
482
408
{
483
409
name : "container scope, 2 containers, 4 NUMA nodes, 2 gpu in one container " ,
@@ -496,14 +422,13 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
496
422
"Node1" : 82 ,
497
423
"Node2" : 76 ,
498
424
},
499
- policy : topologyv1alpha2 .BestEffortContainerLevel ,
500
- nodes : fourNUMANodes (),
425
+ nodes : fourNUMANodes (),
501
426
},
502
427
}
503
428
504
429
for _ , tc := range testCases {
505
430
t .Run (tc .name , func (t * testing.T ) {
506
- nodesMap , lister := initTest (tc .policy , tc . nodes ... )
431
+ nodesMap , lister := initTest (tc .nodes )
507
432
508
433
tm := & TopologyMatch {
509
434
scoreStrategyType : apiconfig .LeastNUMANodes ,
@@ -550,6 +475,87 @@ func findMaxScoreNode(nodeToScore nodeToScoreMap) string {
550
475
return electedNode
551
476
}
552
477
478
+ type nrtUpdater func (nrt * topologyv1alpha2.NodeResourceTopology )
479
+
480
+ func withPolicy (policy topologyv1alpha2.TopologyManagerPolicy ) nrtUpdater {
481
+ return func (nrt * topologyv1alpha2.NodeResourceTopology ) {
482
+ nrt .TopologyPolicies = []string {string (policy )}
483
+ }
484
+ }
485
+
486
+ func defaultNUMANodes (upds ... nrtUpdater ) []* topologyv1alpha2.NodeResourceTopology {
487
+ nrts := []* topologyv1alpha2.NodeResourceTopology {
488
+ {
489
+ ObjectMeta : metav1.ObjectMeta {Name : "Node1" },
490
+ Zones : topologyv1alpha2.ZoneList {
491
+ topologyv1alpha2.Zone {
492
+ Name : "node-0" ,
493
+ Type : "Node" ,
494
+ Resources : topologyv1alpha2.ResourceInfoList {
495
+ MakeTopologyResInfo (cpu , "4" , "4" ),
496
+ MakeTopologyResInfo (memory , "500Mi" , "500Mi" ),
497
+ },
498
+ },
499
+ topologyv1alpha2.Zone {
500
+ Name : "node-1" ,
501
+ Type : "Node" ,
502
+ Resources : topologyv1alpha2.ResourceInfoList {
503
+ MakeTopologyResInfo (cpu , "4" , "4" ),
504
+ MakeTopologyResInfo (memory , "500Mi" , "500Mi" ),
505
+ },
506
+ },
507
+ },
508
+ },
509
+ {
510
+ ObjectMeta : metav1.ObjectMeta {Name : "Node2" },
511
+ Zones : topologyv1alpha2.ZoneList {
512
+ topologyv1alpha2.Zone {
513
+ Name : "node-0" ,
514
+ Type : "Node" ,
515
+ Resources : topologyv1alpha2.ResourceInfoList {
516
+ MakeTopologyResInfo (cpu , "2" , "2" ),
517
+ MakeTopologyResInfo (memory , "50Mi" , "50Mi" ),
518
+ },
519
+ }, topologyv1alpha2.Zone {
520
+ Name : "node-1" ,
521
+ Type : "Node" ,
522
+ Resources : topologyv1alpha2.ResourceInfoList {
523
+ MakeTopologyResInfo (cpu , "2" , "2" ),
524
+ MakeTopologyResInfo (memory , "50Mi" , "50Mi" ),
525
+ },
526
+ },
527
+ },
528
+ },
529
+ {
530
+ ObjectMeta : metav1.ObjectMeta {Name : "Node3" },
531
+ Zones : topologyv1alpha2.ZoneList {
532
+ topologyv1alpha2.Zone {
533
+ Name : "node-0" ,
534
+ Type : "Node" ,
535
+ Resources : topologyv1alpha2.ResourceInfoList {
536
+ MakeTopologyResInfo (cpu , "6" , "6" ),
537
+ MakeTopologyResInfo (memory , "60Mi" , "60Mi" ),
538
+ },
539
+ }, topologyv1alpha2.Zone {
540
+ Name : "node-1" ,
541
+ Type : "Node" ,
542
+ Resources : topologyv1alpha2.ResourceInfoList {
543
+ MakeTopologyResInfo (cpu , "6" , "6" ),
544
+ MakeTopologyResInfo (memory , "60Mi" , "60Mi" ),
545
+ },
546
+ },
547
+ },
548
+ },
549
+ }
550
+ for _ , upd := range upds {
551
+ for idx := range nrts {
552
+ // make sure to mutate the original object in the collection
553
+ upd (nrts [idx ])
554
+ }
555
+ }
556
+ return nrts
557
+ }
558
+
553
559
func fourNUMANodes () []* topologyv1alpha2.NodeResourceTopology {
554
560
return []* topologyv1alpha2.NodeResourceTopology {
555
561
{
0 commit comments