Files
aiops/backend/pkg/agentcli/tools/kubernetes_diagnose_test.go
T
2026-07-09 14:16:56 +08:00

65 lines
1.8 KiB
Go

package tools
import (
"testing"
k8sclient "ezops/pkg/kubernetesclient"
)
func TestPodDiagnosisStatusDetectsWaitingReason(t *testing.T) {
pod := k8sclient.PodItem{
Status: k8sclient.PodStatus{
Phase: "Pending",
ContainerStatuses: []k8sclient.ContainerStatus{{
Name: "app",
State: k8sclient.ContainerStatusState{Waiting: &k8sclient.ContainerStateWaiting{
Reason: "ImagePullBackOff", Message: "Back-off pulling image",
}},
}},
},
}
status, reason, restarts, messages := podDiagnosisStatus(pod)
if status != "ImagePullBackOff" || reason != "ImagePullBackOff" {
t.Fatalf("unexpected status=%s reason=%s", status, reason)
}
if restarts != 0 {
t.Fatalf("unexpected restarts=%d", restarts)
}
if len(messages) != 1 {
t.Fatalf("expected waiting message, got %v", messages)
}
if !isAbnormalPod(status, reason, restarts) {
t.Fatal("ImagePullBackOff should be abnormal")
}
}
func TestPodDiagnosisStatusDetectsOOMKilled(t *testing.T) {
pod := k8sclient.PodItem{
Status: k8sclient.PodStatus{
Phase: "Running",
ContainerStatuses: []k8sclient.ContainerStatus{{
Name: "app", Ready: true, RestartCount: 3,
LastState: k8sclient.ContainerStatusState{Terminated: &k8sclient.ContainerStateTerminated{
Reason: "OOMKilled", ExitCode: 137,
}},
}},
},
}
status, reason, restarts, _ := podDiagnosisStatus(pod)
if status != "Running" || reason != "OOMKilled" || restarts != 3 {
t.Fatalf("unexpected status=%s reason=%s restarts=%d", status, reason, restarts)
}
if !isAbnormalPod(status, reason, restarts) {
t.Fatal("OOMKilled should be abnormal")
}
}
func TestIsAbnormalPodByRestartThreshold(t *testing.T) {
if !isAbnormalPod("Running", "Running", 10) {
t.Fatal("high restart pod should be abnormal")
}
if isAbnormalPod("Running", "Running", 2) {
t.Fatal("healthy running pod should not be abnormal")
}
}