Skip to content

Commit d906cb8

Browse files
committed
nrt: score: extract fake NRT creation
Factor out the fake NRT data creation used in test to its own function, to pave the road for upcoming test enhancements and for easier composition. No intended changes in behavior. Signed-off-by: Francesco Romani <[email protected]>
1 parent 9f8a417 commit d906cb8

File tree

1 file changed

+98
-92
lines changed

1 file changed

+98
-92
lines changed

pkg/noderesourcetopology/score_test.go

Lines changed: 98 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -41,80 +41,9 @@ const (
4141

4242
type nodeToScoreMap map[string]int64
4343

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) {
4645
nodesMap := make(map[string]*v1.Node)
4746

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-
}
11847
// init node objects
11948
for _, nrt := range nodeTopologies {
12049
res := makeResourceListFromZones(nrt.Zones)
@@ -204,7 +133,7 @@ func TestNodeResourceScorePlugin(t *testing.T) {
204133
}
205134

206135
for _, test := range tests {
207-
nodesMap, lister := initTest(topologyv1alpha2.SingleNUMANodeContainerLevel)
136+
nodesMap, lister := initTest(defaultNUMANodes(withPolicy(topologyv1alpha2.SingleNUMANodeContainerLevel)))
208137
t.Run(test.name, func(t *testing.T) {
209138
tm := &TopologyMatch{
210139
scoreStrategyFunc: test.strategy,
@@ -254,7 +183,6 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
254183
name string
255184
podRequests []v1.ResourceList
256185
wantedRes nodeToScoreMap
257-
policy topologyv1alpha2.TopologyManagerPolicy
258186
nodes []*topologyv1alpha2.NodeResourceTopology
259187
}{
260188
{
@@ -270,7 +198,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
270198
"Node2": 94,
271199
"Node3": 94,
272200
},
273-
policy: topologyv1alpha2.BestEffortContainerLevel,
201+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortContainerLevel)),
274202
},
275203
{
276204
name: "container scope, one container case 2",
@@ -285,7 +213,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
285213
"Node2": 82,
286214
"Node3": 94,
287215
},
288-
policy: topologyv1alpha2.BestEffortContainerLevel,
216+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortContainerLevel)),
289217
},
290218
{
291219
name: "container scope, one container case 3",
@@ -300,7 +228,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
300228
"Node2": 0,
301229
"Node3": 94,
302230
},
303-
policy: topologyv1alpha2.BestEffortContainerLevel,
231+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortContainerLevel)),
304232
},
305233
{
306234
name: "container scope, two containers case 1",
@@ -319,7 +247,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
319247
"Node2": 94,
320248
"Node3": 94,
321249
},
322-
policy: topologyv1alpha2.BestEffortContainerLevel,
250+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortContainerLevel)),
323251
},
324252
{
325253
name: "container scope, two containers case 2",
@@ -338,7 +266,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
338266
"Node2": 82,
339267
"Node3": 94,
340268
},
341-
policy: topologyv1alpha2.BestEffortContainerLevel,
269+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortContainerLevel)),
342270
},
343271
{
344272
name: "container scope, two containers case 3",
@@ -357,7 +285,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
357285
"Node2": 0,
358286
"Node3": 94,
359287
},
360-
policy: topologyv1alpha2.BestEffortContainerLevel,
288+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortContainerLevel)),
361289
},
362290
{
363291
name: "container scope, two containers non NUMA resource",
@@ -374,7 +302,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
374302
"Node2": 100,
375303
"Node3": 100,
376304
},
377-
policy: topologyv1alpha2.BestEffortContainerLevel,
305+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortContainerLevel)),
378306
},
379307
{
380308
name: "pod scope, two containers case 1",
@@ -393,7 +321,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
393321
"Node2": 82,
394322
"Node3": 82,
395323
},
396-
policy: topologyv1alpha2.BestEffortPodLevel,
324+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortPodLevel)),
397325
},
398326
{
399327
name: "pod scope, two containers case 2",
@@ -412,7 +340,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
412340
"Node2": 82,
413341
"Node3": 82,
414342
},
415-
policy: topologyv1alpha2.BestEffortPodLevel,
343+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortPodLevel)),
416344
},
417345
{
418346
name: "pod scope, two containers case 3",
@@ -431,7 +359,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
431359
"Node2": 0,
432360
"Node3": 82,
433361
},
434-
policy: topologyv1alpha2.BestEffortPodLevel,
362+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortPodLevel)),
435363
},
436364
{
437365
name: "pod scope, one containers non NUMA resource",
@@ -445,7 +373,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
445373
"Node2": 100,
446374
"Node3": 100,
447375
},
448-
policy: topologyv1alpha2.BestEffortPodLevel,
376+
nodes: defaultNUMANodes(withPolicy(topologyv1alpha2.BestEffortPodLevel)),
449377
},
450378
{
451379
name: "container scope, one container, 4 NUMA nodes, 1 gpu ",
@@ -460,8 +388,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
460388
"Node1": 94,
461389
"Node2": 94,
462390
},
463-
policy: topologyv1alpha2.BestEffortContainerLevel,
464-
nodes: fourNUMANodes(),
391+
nodes: fourNUMANodes(),
465392
},
466393
{
467394
name: "container scope, one container, 4 NUMA nodes, 2 gpu ",
@@ -476,8 +403,7 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
476403
"Node1": 82,
477404
"Node2": 76,
478405
},
479-
policy: topologyv1alpha2.BestEffortContainerLevel,
480-
nodes: fourNUMANodes(),
406+
nodes: fourNUMANodes(),
481407
},
482408
{
483409
name: "container scope, 2 containers, 4 NUMA nodes, 2 gpu in one container ",
@@ -496,14 +422,13 @@ func TestNodeResourceScorePluginLeastNUMA(t *testing.T) {
496422
"Node1": 82,
497423
"Node2": 76,
498424
},
499-
policy: topologyv1alpha2.BestEffortContainerLevel,
500-
nodes: fourNUMANodes(),
425+
nodes: fourNUMANodes(),
501426
},
502427
}
503428

504429
for _, tc := range testCases {
505430
t.Run(tc.name, func(t *testing.T) {
506-
nodesMap, lister := initTest(tc.policy, tc.nodes...)
431+
nodesMap, lister := initTest(tc.nodes)
507432

508433
tm := &TopologyMatch{
509434
scoreStrategyType: apiconfig.LeastNUMANodes,
@@ -550,6 +475,87 @@ func findMaxScoreNode(nodeToScore nodeToScoreMap) string {
550475
return electedNode
551476
}
552477

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+
553559
func fourNUMANodes() []*topologyv1alpha2.NodeResourceTopology {
554560
return []*topologyv1alpha2.NodeResourceTopology{
555561
{

0 commit comments

Comments
 (0)