k9s/internal/render/container_int_test.go

160 lines
3.4 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package render
import (
"testing"
"github.com/stretchr/testify/assert"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
mv1beta1 "k8s.io/metrics/pkg/apis/metrics/v1beta1"
)
func Test_gatherContainerMX(t *testing.T) {
uu := map[string]struct {
container v1.Container
mx *mv1beta1.ContainerMetrics
c, r metric
}{
"empty": {},
"amd-request": {
container: v1.Container{
Name: "fred",
Image: "img",
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("10m"),
v1.ResourceMemory: resource.MustParse("20Mi"),
"nvidia.com/gpu": resource.MustParse("1"),
},
},
},
mx: &mv1beta1.ContainerMetrics{
Name: "fred",
Usage: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("10m"),
v1.ResourceMemory: resource.MustParse("20Mi"),
},
},
c: metric{
cpu: 10,
mem: 20971520,
},
r: metric{
cpu: 10,
gpu: 1,
mem: 20971520,
},
},
"amd-both": {
container: v1.Container{
Name: "fred",
Image: "img",
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("10m"),
v1.ResourceMemory: resource.MustParse("20Mi"),
"nvidia.com/gpu": resource.MustParse("1"),
},
Limits: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("50m"),
v1.ResourceMemory: resource.MustParse("100Mi"),
"nvidia.com/gpu": resource.MustParse("2"),
},
},
},
mx: &mv1beta1.ContainerMetrics{
Name: "fred",
Usage: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("10m"),
v1.ResourceMemory: resource.MustParse("20Mi"),
},
},
c: metric{
cpu: 10,
mem: 20971520,
},
r: metric{
cpu: 10,
gpu: 1,
mem: 20971520,
lcpu: 50,
lgpu: 2,
lmem: 104857600,
},
},
"amd-limits": {
container: v1.Container{
Name: "fred",
Image: "img",
Resources: v1.ResourceRequirements{
Limits: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("50m"),
v1.ResourceMemory: resource.MustParse("100Mi"),
"nvidia.com/gpu": resource.MustParse("2"),
},
},
},
mx: &mv1beta1.ContainerMetrics{
Name: "fred",
Usage: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("10m"),
v1.ResourceMemory: resource.MustParse("20Mi"),
},
},
c: metric{
cpu: 10,
mem: 20971520,
},
r: metric{
cpu: 50,
gpu: 2,
mem: 104857600,
lcpu: 50,
lgpu: 2,
lmem: 104857600,
},
},
"amd-no-mx": {
container: v1.Container{
Name: "fred",
Image: "img",
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("10m"),
v1.ResourceMemory: resource.MustParse("20Mi"),
"nvidia.com/gpu": resource.MustParse("1"),
},
Limits: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("50m"),
v1.ResourceMemory: resource.MustParse("100Mi"),
"nvidia.com/gpu": resource.MustParse("2"),
},
},
},
r: metric{
cpu: 10,
gpu: 1,
mem: 20971520,
lcpu: 50,
lgpu: 2,
lmem: 104857600,
},
},
}
for k, u := range uu {
t.Run(k, func(t *testing.T) {
c, r := gatherContainerMX(&u.container, u.mx)
assert.Equal(t, u.c, c)
assert.Equal(t, u.r, r)
})
}
}