package checks import ( "testing" "github.com/DeBrosOfficial/network/pkg/inspector" ) func TestCheckSystem_HealthyNode(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{ "debros-node": "active", "debros-olric": "active", "debros-ipfs": "active", "debros-ipfs-cluster": "active", "wg-quick@wg0": "active", }, FailedUnits: nil, MemTotalMB: 8192, MemUsedMB: 4096, DiskUsePct: 50, DiskUsedGB: "25G", DiskTotalGB: "50G", LoadAvg: "1.0, 0.8, 0.5", CPUCount: 4, OOMKills: 0, SwapTotalMB: 2048, SwapUsedMB: 100, UptimeRaw: "2024-01-01 00:00:00", InodePct: 10, ListeningPorts: []int{5001, 3322, 6001, 4501}, UFWActive: true, ProcessUser: "debros", PanicCount: 0, } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.svc_debros_node", inspector.StatusPass) expectStatus(t, results, "system.svc_debros_olric", inspector.StatusPass) expectStatus(t, results, "system.svc_debros_ipfs", inspector.StatusPass) expectStatus(t, results, "system.svc_debros_ipfs_cluster", inspector.StatusPass) expectStatus(t, results, "system.svc_wg", inspector.StatusPass) expectStatus(t, results, "system.no_failed_units", inspector.StatusPass) expectStatus(t, results, "system.memory", inspector.StatusPass) expectStatus(t, results, "system.disk", inspector.StatusPass) expectStatus(t, results, "system.load", inspector.StatusPass) expectStatus(t, results, "system.oom", inspector.StatusPass) expectStatus(t, results, "system.swap", inspector.StatusPass) expectStatus(t, results, "system.inodes", inspector.StatusPass) expectStatus(t, results, "system.ufw", inspector.StatusPass) expectStatus(t, results, "system.process_user", inspector.StatusPass) expectStatus(t, results, "system.panics", inspector.StatusPass) expectStatus(t, results, "system.port_5001", inspector.StatusPass) expectStatus(t, results, "system.port_3322", inspector.StatusPass) expectStatus(t, results, "system.port_6001", inspector.StatusPass) expectStatus(t, results, "system.port_4501", inspector.StatusPass) } func TestCheckSystem_ServiceInactive(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{ "debros-node": "active", "debros-olric": "inactive", "debros-ipfs": "active", "debros-ipfs-cluster": "failed", }, } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.svc_debros_node", inspector.StatusPass) expectStatus(t, results, "system.svc_debros_olric", inspector.StatusFail) expectStatus(t, results, "system.svc_debros_ipfs_cluster", inspector.StatusFail) } func TestCheckSystem_NameserverServices(t *testing.T) { nd := makeNodeData("5.5.5.5", "nameserver-ns1") nd.System = &inspector.SystemData{ Services: map[string]string{ "debros-node": "active", "debros-olric": "active", "debros-ipfs": "active", "debros-ipfs-cluster": "active", "coredns": "active", "caddy": "active", }, } data := makeCluster(map[string]*inspector.NodeData{"5.5.5.5": nd}) results := CheckSystem(data) expectStatus(t, results, "system.svc_coredns", inspector.StatusPass) expectStatus(t, results, "system.svc_caddy", inspector.StatusPass) } func TestCheckSystem_NameserverServicesNotCheckedOnRegularNode(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{ "debros-node": "active", "debros-olric": "active", "debros-ipfs": "active", "debros-ipfs-cluster": "active", }, } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) if findCheck(results, "system.svc_coredns") != nil { t.Error("should not check coredns on regular node") } } func TestCheckSystem_FailedUnits(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{}, FailedUnits: []string{"some-service.service"}, } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.no_failed_units", inspector.StatusFail) } func TestCheckSystem_Memory(t *testing.T) { tests := []struct { name string used int total int status inspector.Status }{ {"healthy", 4000, 8000, inspector.StatusPass}, // 50% {"elevated", 7000, 8000, inspector.StatusWarn}, // 87.5% {"critical", 7500, 8000, inspector.StatusFail}, // 93.75% } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{}, MemTotalMB: tt.total, MemUsedMB: tt.used, } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.memory", tt.status) }) } } func TestCheckSystem_Disk(t *testing.T) { tests := []struct { name string pct int status inspector.Status }{ {"healthy", 60, inspector.StatusPass}, {"elevated", 85, inspector.StatusWarn}, {"critical", 92, inspector.StatusFail}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{}, DiskUsePct: tt.pct, DiskUsedGB: "25G", DiskTotalGB: "50G", } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.disk", tt.status) }) } } func TestCheckSystem_Load(t *testing.T) { tests := []struct { name string load string cpus int status inspector.Status }{ {"healthy", "1.0, 0.8, 0.5", 4, inspector.StatusPass}, {"elevated", "6.0, 5.0, 4.0", 4, inspector.StatusWarn}, {"overloaded", "10.0, 9.0, 8.0", 4, inspector.StatusFail}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{}, LoadAvg: tt.load, CPUCount: tt.cpus, } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.load", tt.status) }) } } func TestCheckSystem_OOMKills(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{Services: map[string]string{}, OOMKills: 3} data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.oom", inspector.StatusFail) } func TestCheckSystem_Inodes(t *testing.T) { tests := []struct { name string pct int status inspector.Status }{ {"healthy", 50, inspector.StatusPass}, {"elevated", 82, inspector.StatusWarn}, {"critical", 96, inspector.StatusFail}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{Services: map[string]string{}, InodePct: tt.pct} data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.inodes", tt.status) }) } } func TestCheckSystem_ProcessUser(t *testing.T) { tests := []struct { name string user string status inspector.Status }{ {"correct", "debros", inspector.StatusPass}, {"root", "root", inspector.StatusWarn}, {"other", "ubuntu", inspector.StatusWarn}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{Services: map[string]string{}, ProcessUser: tt.user} data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.process_user", tt.status) }) } } func TestCheckSystem_Panics(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{Services: map[string]string{}, PanicCount: 5} data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.panics", inspector.StatusFail) } func TestCheckSystem_ExpectedPorts(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") nd.System = &inspector.SystemData{ Services: map[string]string{}, ListeningPorts: []int{5001, 6001}, // Missing 3322, 4501 } data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) expectStatus(t, results, "system.port_5001", inspector.StatusPass) expectStatus(t, results, "system.port_6001", inspector.StatusPass) expectStatus(t, results, "system.port_3322", inspector.StatusWarn) expectStatus(t, results, "system.port_4501", inspector.StatusWarn) } func TestCheckSystem_NilData(t *testing.T) { nd := makeNodeData("1.1.1.1", "node") data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd}) results := CheckSystem(data) if len(results) != 0 { t.Errorf("expected 0 results for nil System data, got %d", len(results)) } }