65 lines
1.8 KiB
Go
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")
|
|
}
|
|
}
|