@@ -23,6 +23,7 @@ import (
23
23
24
24
cadvisorapi "github.com/google/cadvisor/info/v1"
25
25
v1 "k8s.io/api/core/v1"
26
+ "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
26
27
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
27
28
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
28
29
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
@@ -72,6 +73,7 @@ func TestGetTopologyHints(t *testing.T) {
72
73
name string
73
74
pod v1.Pod
74
75
container v1.Container
76
+ assignments state.ContainerCPUAssignments
75
77
defaultCPUSet cpuset.CPUSet
76
78
expectedHints []topologymanager.TopologyHint
77
79
}{
@@ -142,6 +144,86 @@ func TestGetTopologyHints(t *testing.T) {
142
144
},
143
145
},
144
146
},
147
+ {
148
+ name : "Request more CPUs than available" ,
149
+ pod : * testPod2 ,
150
+ container : * testContainer2 ,
151
+ defaultCPUSet : cpuset .NewCPUSet (0 , 1 , 2 , 3 ),
152
+ expectedHints : nil ,
153
+ },
154
+ {
155
+ name : "Regenerate Single-Node NUMA Hints if already allocated 1/2" ,
156
+ pod : * testPod1 ,
157
+ container : * testContainer1 ,
158
+ assignments : state.ContainerCPUAssignments {
159
+ "" : cpuset .NewCPUSet (0 , 6 ),
160
+ },
161
+ defaultCPUSet : cpuset .NewCPUSet (),
162
+ expectedHints : []topologymanager.TopologyHint {
163
+ {
164
+ NUMANodeAffinity : firstSocketMask ,
165
+ Preferred : true ,
166
+ },
167
+ {
168
+ NUMANodeAffinity : crossSocketMask ,
169
+ Preferred : false ,
170
+ },
171
+ },
172
+ },
173
+ {
174
+ name : "Regenerate Single-Node NUMA Hints if already allocated 1/2" ,
175
+ pod : * testPod1 ,
176
+ container : * testContainer1 ,
177
+ assignments : state.ContainerCPUAssignments {
178
+ "" : cpuset .NewCPUSet (3 , 9 ),
179
+ },
180
+ defaultCPUSet : cpuset .NewCPUSet (),
181
+ expectedHints : []topologymanager.TopologyHint {
182
+ {
183
+ NUMANodeAffinity : secondSocketMask ,
184
+ Preferred : true ,
185
+ },
186
+ {
187
+ NUMANodeAffinity : crossSocketMask ,
188
+ Preferred : false ,
189
+ },
190
+ },
191
+ },
192
+ {
193
+ name : "Regenerate Cross-NUMA Hints if already allocated" ,
194
+ pod : * testPod4 ,
195
+ container : * testContainer4 ,
196
+ assignments : state.ContainerCPUAssignments {
197
+ "" : cpuset .NewCPUSet (0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ),
198
+ },
199
+ defaultCPUSet : cpuset .NewCPUSet (),
200
+ expectedHints : []topologymanager.TopologyHint {
201
+ {
202
+ NUMANodeAffinity : crossSocketMask ,
203
+ Preferred : true ,
204
+ },
205
+ },
206
+ },
207
+ {
208
+ name : "Requested less than already allocated" ,
209
+ pod : * testPod1 ,
210
+ container : * testContainer1 ,
211
+ assignments : state.ContainerCPUAssignments {
212
+ "" : cpuset .NewCPUSet (0 , 6 , 3 , 9 ),
213
+ },
214
+ defaultCPUSet : cpuset .NewCPUSet (),
215
+ expectedHints : []topologymanager.TopologyHint {},
216
+ },
217
+ {
218
+ name : "Requested more than already allocated" ,
219
+ pod : * testPod4 ,
220
+ container : * testContainer4 ,
221
+ assignments : state.ContainerCPUAssignments {
222
+ "" : cpuset .NewCPUSet (0 , 6 , 3 , 9 ),
223
+ },
224
+ defaultCPUSet : cpuset .NewCPUSet (),
225
+ expectedHints : []topologymanager.TopologyHint {},
226
+ },
145
227
}
146
228
for _ , tc := range tcases {
147
229
topology , _ := topology .Discover (& machineInfo , numaNodeInfo )
@@ -151,9 +233,13 @@ func TestGetTopologyHints(t *testing.T) {
151
233
topology : topology ,
152
234
},
153
235
state : & mockState {
236
+ assignments : tc .assignments ,
154
237
defaultCPUSet : tc .defaultCPUSet ,
155
238
},
156
- topology : topology ,
239
+ topology : topology ,
240
+ activePods : func () []* v1.Pod { return nil },
241
+ podStatusProvider : mockPodStatusProvider {},
242
+ sourcesReady : & sourcesReadyStub {},
157
243
}
158
244
159
245
hints := m .GetTopologyHints (tc .pod , tc .container )[string (v1 .ResourceCPU )]
0 commit comments