package alerts import ( "testing" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" ) func podWithLimits(cpuLimit, memLimit string) corev1.Pod { return corev1.Pod{ Spec: corev1.PodSpec{ Containers: []corev1.Container{ { Resources: corev1.ResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse(cpuLimit), corev1.ResourceMemory: resource.MustParse(memLimit), }, }, }, }, }, } } func TestPodResourcePercents(t *testing.T) { pod := podWithLimits("500m", "256Mi") cpuPct, memPct, ok := podResourcePercents(pod, 450, 256*1024*1024) if !ok { t.Fatal("ok = false, want true") } if cpuPct != 90 { t.Errorf("cpuPct = %d, want 90", cpuPct) } if memPct != 100 { t.Errorf("memPct = %d, want 100", memPct) } } func TestPodResourcePercents_NoLimitsDefined(t *testing.T) { pod := corev1.Pod{ Spec: corev1.PodSpec{ Containers: []corev1.Container{{}}, }, } _, _, ok := podResourcePercents(pod, 100, 100) if ok { t.Error("ok = true, want false when container has no resource limits") } } func TestPodResourcePercents_MultiContainerSumsLimits(t *testing.T) { pod := corev1.Pod{ Spec: corev1.PodSpec{ Containers: []corev1.Container{ { Resources: corev1.ResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("250m"), corev1.ResourceMemory: resource.MustParse("128Mi"), }, }, }, { Resources: corev1.ResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("250m"), corev1.ResourceMemory: resource.MustParse("128Mi"), }, }, }, }, }, } // Limite totale : 500m CPU, 256Mi mémoire. cpuPct, memPct, ok := podResourcePercents(pod, 250, 128*1024*1024) if !ok { t.Fatal("ok = false, want true") } if cpuPct != 50 { t.Errorf("cpuPct = %d, want 50", cpuPct) } if memPct != 50 { t.Errorf("memPct = %d, want 50", memPct) } }