mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-30 04:20:20 +00:00
69 lines
2.8 KiB
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)
|
|
}
|
|
}
|