Skip to content

Commit 17d374d

Browse files
committed
fix for UT
1 parent a694d91 commit 17d374d

File tree

3 files changed

+157
-3
lines changed

3 files changed

+157
-3
lines changed

Diff for: pkg/resourcemonitor/podresourcesscanner.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func hasExclusiveCPUs(pod *corev1.Pod) bool {
108108
}
109109

110110
//No CPUs requested in all the containers in the pod
111-
return totalCPU != 0
111+
return false
112112
}
113113

114114
// hasIntegralCPUs returns true if a container in pod is requesting integral CPUs else returns false
@@ -152,7 +152,7 @@ func (resMon *PodResourcesScanner) Scan() (ScanResponse, error) {
152152
for _, podResource := range respPodResources {
153153
klog.InfoS("scanning pod", "podName", podResource.GetName())
154154
hasDevice := hasDevice(podResource)
155-
isWatchable, _, err := resMon.isWatchable(podResource.GetNamespace(), podResource.GetName(), hasDevice)
155+
isWatchable, isIntegralGuaranteed, err := resMon.isWatchable(podResource.GetNamespace(), podResource.GetName(), hasDevice)
156156
if err != nil {
157157
return ScanResponse{}, fmt.Errorf("checking if pod in a namespace is watchable, namespace:%v, pod name %v: %w", podResource.GetNamespace(), podResource.GetName(), err)
158158
}
@@ -171,7 +171,7 @@ func (resMon *PodResourcesScanner) Scan() (ScanResponse, error) {
171171
}
172172

173173
cpuIDs := container.GetCpuIds()
174-
if len(cpuIDs) > 0 {
174+
if len(cpuIDs) > 0 && isIntegralGuaranteed {
175175
var resCPUs []string
176176
for _, cpuID := range container.GetCpuIds() {
177177
resCPUs = append(resCPUs, strconv.FormatInt(cpuID, 10))

Diff for: pkg/resourcemonitor/podresourcesscanner_test.go

+151
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ func TestPodScanner(t *testing.T) {
165165
},
166166
},
167167
},
168+
Status: corev1.PodStatus{
169+
QOSClass: corev1.PodQOSGuaranteed,
170+
},
168171
}
169172

170173
fakeCli := fakeclient.NewSimpleClientset(pod)
@@ -280,6 +283,9 @@ func TestPodScanner(t *testing.T) {
280283
},
281284
},
282285
},
286+
Status: corev1.PodStatus{
287+
QOSClass: corev1.PodQOSGuaranteed,
288+
},
283289
}
284290

285291
fakeCli = fakeclient.NewSimpleClientset(pod)
@@ -368,6 +374,9 @@ func TestPodScanner(t *testing.T) {
368374
},
369375
},
370376
},
377+
Status: corev1.PodStatus{
378+
QOSClass: corev1.PodQOSGuaranteed,
379+
},
371380
}
372381
fakeCli = fakeclient.NewSimpleClientset(pod)
373382
resScan.(*PodResourcesScanner).k8sClient = fakeCli
@@ -458,6 +467,9 @@ func TestPodScanner(t *testing.T) {
458467
},
459468
},
460469
},
470+
Status: corev1.PodStatus{
471+
QOSClass: corev1.PodQOSGuaranteed,
472+
},
461473
}
462474
fakeCli = fakeclient.NewSimpleClientset(pod)
463475
resScan.(*PodResourcesScanner).k8sClient = fakeCli
@@ -536,6 +548,9 @@ func TestPodScanner(t *testing.T) {
536548
},
537549
},
538550
},
551+
Status: corev1.PodStatus{
552+
QOSClass: corev1.PodQOSGuaranteed,
553+
},
539554
}
540555
fakeCli = fakeclient.NewSimpleClientset(pod)
541556
resScan.(*PodResourcesScanner).k8sClient = fakeCli
@@ -628,6 +643,9 @@ func TestPodScanner(t *testing.T) {
628643
},
629644
},
630645
},
646+
Status: corev1.PodStatus{
647+
QOSClass: corev1.PodQOSGuaranteed,
648+
},
631649
}
632650
fakeCli = fakeclient.NewSimpleClientset(pod)
633651
resScan.(*PodResourcesScanner).k8sClient = fakeCli
@@ -825,6 +843,9 @@ func TestPodScanner(t *testing.T) {
825843
},
826844
},
827845
},
846+
Status: corev1.PodStatus{
847+
QOSClass: corev1.PodQOSGuaranteed,
848+
},
828849
}
829850
fakeCli = fakeclient.NewSimpleClientset(pod)
830851
resScan.(*PodResourcesScanner).k8sClient = fakeCli
@@ -1029,6 +1050,9 @@ func TestPodScanner(t *testing.T) {
10291050
},
10301051
},
10311052
},
1053+
Status: corev1.PodStatus{
1054+
QOSClass: corev1.PodQOSGuaranteed,
1055+
},
10321056
}
10331057
fakeCli = fakeclient.NewSimpleClientset(pod)
10341058
resScan.(*PodResourcesScanner).k8sClient = fakeCli
@@ -1113,6 +1137,9 @@ func TestPodScanner(t *testing.T) {
11131137
},
11141138
},
11151139
},
1140+
Status: corev1.PodStatus{
1141+
QOSClass: corev1.PodQOSGuaranteed,
1142+
},
11161143
}
11171144
fakeCli = fakeclient.NewSimpleClientset(pod)
11181145
resScan.(*PodResourcesScanner).k8sClient = fakeCli
@@ -1145,5 +1172,129 @@ func TestPodScanner(t *testing.T) {
11451172
So(reflect.DeepEqual(res.PodResources, expected), ShouldBeTrue)
11461173
})
11471174

1175+
Convey("When I successfully get valid response for guaranteed pods with not cpu pin containers", func() {
1176+
resp := &v1.ListPodResourcesResponse{
1177+
PodResources: []*v1.PodResources{
1178+
{
1179+
Name: "test-pod-0",
1180+
Namespace: "pod-res-test",
1181+
Containers: []*v1.ContainerResources{
1182+
{
1183+
Name: "test-cnt-0",
1184+
CpuIds: []int64{0, 1},
1185+
Devices: []*v1.ContainerDevices{
1186+
{
1187+
ResourceName: "fake.io/resource",
1188+
DeviceIds: []string{"devA"},
1189+
},
1190+
},
1191+
},
1192+
{
1193+
Name: "test-cnt-1",
1194+
Devices: []*v1.ContainerDevices{
1195+
{
1196+
ResourceName: "fake.io/resource",
1197+
DeviceIds: []string{"devA"},
1198+
},
1199+
},
1200+
},
1201+
},
1202+
},
1203+
},
1204+
}
1205+
mockPodResClient.On("List", mock.AnythingOfType("*context.timerCtx"), mock.AnythingOfType("*v1.ListPodResourcesRequest")).Return(resp, nil)
1206+
pod := &corev1.Pod{
1207+
TypeMeta: metav1.TypeMeta{
1208+
Kind: "Pod",
1209+
APIVersion: "v1",
1210+
},
1211+
ObjectMeta: metav1.ObjectMeta{
1212+
Name: "test-pod-0",
1213+
Namespace: "pod-res-test",
1214+
},
1215+
Spec: corev1.PodSpec{
1216+
Containers: []corev1.Container{
1217+
{
1218+
Name: "test-cnt-0",
1219+
Resources: corev1.ResourceRequirements{
1220+
Requests: corev1.ResourceList{
1221+
1222+
corev1.ResourceName("fake.io/resource"): *resource.NewQuantity(1, resource.DecimalSI),
1223+
corev1.ResourceMemory: *resource.NewQuantity(100, resource.DecimalSI),
1224+
corev1.ResourceCPU: resource.MustParse("2"),
1225+
},
1226+
Limits: corev1.ResourceList{
1227+
corev1.ResourceName("fake.io/resource"): *resource.NewQuantity(1, resource.DecimalSI),
1228+
corev1.ResourceMemory: *resource.NewQuantity(100, resource.DecimalSI),
1229+
corev1.ResourceCPU: resource.MustParse("2"),
1230+
},
1231+
},
1232+
},
1233+
{
1234+
Name: "test-cnt-1",
1235+
Resources: corev1.ResourceRequirements{
1236+
Requests: corev1.ResourceList{
1237+
1238+
corev1.ResourceName("fake.io/resource"): *resource.NewQuantity(1, resource.DecimalSI),
1239+
corev1.ResourceMemory: *resource.NewQuantity(100, resource.DecimalSI),
1240+
corev1.ResourceCPU: resource.MustParse("1500m"),
1241+
},
1242+
Limits: corev1.ResourceList{
1243+
corev1.ResourceName("fake.io/resource"): *resource.NewQuantity(1, resource.DecimalSI),
1244+
corev1.ResourceMemory: *resource.NewQuantity(100, resource.DecimalSI),
1245+
corev1.ResourceCPU: resource.MustParse("1500m"),
1246+
},
1247+
},
1248+
},
1249+
},
1250+
},
1251+
Status: corev1.PodStatus{
1252+
QOSClass: corev1.PodQOSGuaranteed,
1253+
},
1254+
}
1255+
fakeCli = fakeclient.NewSimpleClientset(pod)
1256+
resScan.(*PodResourcesScanner).k8sClient = fakeCli
1257+
res, err := resScan.Scan()
1258+
1259+
Convey("Error is nil", func() {
1260+
So(err, ShouldBeNil)
1261+
})
1262+
Convey("Return PodResources should have values", func() {
1263+
So(len(res.PodResources), ShouldBeGreaterThan, 0)
1264+
})
1265+
1266+
expected := []PodResources{
1267+
{
1268+
Name: "test-pod-0",
1269+
Namespace: "pod-res-test",
1270+
Containers: []ContainerResources{
1271+
{
1272+
Name: "test-cnt-0",
1273+
Resources: []ResourceInfo{
1274+
{
1275+
Name: corev1.ResourceCPU,
1276+
Data: []string{"0", "1"},
1277+
},
1278+
{
1279+
Name: "fake.io/resource",
1280+
Data: []string{"devA"},
1281+
},
1282+
},
1283+
},
1284+
{
1285+
Name: "test-cnt-1",
1286+
Resources: []ResourceInfo{
1287+
{
1288+
Name: "fake.io/resource",
1289+
Data: []string{"devA"},
1290+
},
1291+
},
1292+
},
1293+
},
1294+
},
1295+
}
1296+
So(reflect.DeepEqual(res.PodResources, expected), ShouldBeTrue)
1297+
})
1298+
11481299
})
11491300
}

Diff for: test/e2e/utils/pod/pod.go

+3
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ func GuaranteedSleeper(opts ...func(pod *corev1.Pod)) *corev1.Pod {
6161
},
6262
},
6363
},
64+
Status: corev1.PodStatus{
65+
QOSClass: corev1.PodQOSGuaranteed,
66+
},
6467
}
6568
for _, o := range opts {
6669
o(p)

0 commit comments

Comments
 (0)