Pulse/internal/ai/patrol_resource_state_test.go

69 lines
2.8 KiB
Go

package ai
import (
"strings"
"testing"
"github.com/rcourtman/pulse-go-rewrite/internal/models"
)
func TestGetResourceCurrentState(t *testing.T) {
ps := NewPatrolService(nil, nil)
state := models.StateSnapshot{
Storage: []models.Storage{{ID: "storage-1", Name: "local", Usage: 42, Status: "active"}},
Nodes: []models.Node{{ID: "node-1", Name: "node-1", CPU: 0.2, Memory: models.Memory{Usage: 33}, Status: "online"}},
VMs: []models.VM{{ID: "vm-1", Name: "vm-1", CPU: 0.1, Memory: models.Memory{Usage: 44}, Status: "running"}},
Containers: []models.Container{{ID: "ct-1", Name: "ct-1", CPU: 0.3, Memory: models.Memory{Usage: 55}, Status: "running"}},
DockerHosts: []models.DockerHost{{
ID: "docker-1",
Hostname: "dockhost",
Status: "online",
Containers: []models.DockerContainer{{ID: "dc-1", Name: "web", CPUPercent: 12.3, MemoryPercent: 45.6, State: "running"}},
}},
}
cases := []struct {
alert AlertInfo
assert string
}{
{alert: AlertInfo{ResourceType: "Storage", ResourceID: "storage-1", ResourceName: "local"}, assert: "Storage 'local'"},
{alert: AlertInfo{ResourceType: "node", ResourceID: "node-1", ResourceName: "node-1"}, assert: "Node 'node-1'"},
{alert: AlertInfo{ResourceType: "vm", ResourceID: "vm-1", ResourceName: "vm-1"}, assert: "VM 'vm-1'"},
{alert: AlertInfo{ResourceType: "container", ResourceID: "ct-1", ResourceName: "ct-1"}, assert: "Container 'ct-1'"},
{alert: AlertInfo{ResourceType: "docker", ResourceID: "dc-1", ResourceName: "web"}, assert: "Docker container 'web'"},
{alert: AlertInfo{ResourceType: "unknown", ResourceID: "x"}, assert: "Resource state unknown"},
}
for _, tc := range cases {
stateText := ps.getResourceCurrentState(tc.alert, state)
if !strings.Contains(stateText, tc.assert) {
t.Fatalf("expected %q in state text, got %q", tc.assert, stateText)
}
}
}
func TestGetCurrentMetricValue_DockerAndStorage(t *testing.T) {
ps := NewPatrolService(nil, nil)
state := models.StateSnapshot{
Storage: []models.Storage{{ID: "storage-1", Name: "local", Usage: 77}},
DockerHosts: []models.DockerHost{{
Containers: []models.DockerContainer{{ID: "dc-1", Name: "web", CPUPercent: 12.3, MemoryPercent: 45.6}},
}},
}
storageAlert := AlertInfo{ResourceType: "Storage", ResourceID: "storage-1"}
if got := ps.getCurrentMetricValue(storageAlert, state); got != 77 {
t.Fatalf("expected storage usage 77, got %.1f", got)
}
dockerCPU := AlertInfo{ResourceType: "docker", ResourceID: "dc-1", Type: "cpu"}
if got := ps.getCurrentMetricValue(dockerCPU, state); got != 12.3 {
t.Fatalf("expected docker cpu 12.3, got %.1f", got)
}
dockerMem := AlertInfo{ResourceType: "docker", ResourceID: "dc-1", Type: "memory"}
if got := ps.getCurrentMetricValue(dockerMem, state); got != 45.6 {
t.Fatalf("expected docker memory 45.6, got %.1f", got)
}
}