167 lines
4.0 KiB
Go
167 lines
4.0 KiB
Go
package inspur
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.mchus.pro/mchus/logpile/internal/models"
|
|
)
|
|
|
|
func TestParseNetworkAdapterInfo_ResolvesModelFromPCIIDsForRawHexModel(t *testing.T) {
|
|
text := `RESTful Network Adapter info:
|
|
{
|
|
"sys_adapters": [
|
|
{
|
|
"id": 1,
|
|
"name": "NIC1",
|
|
"Location": "#CPU0_PCIE4",
|
|
"present": 1,
|
|
"slot": 4,
|
|
"vendor_id": 32902,
|
|
"device_id": 5409,
|
|
"vendor": "",
|
|
"model": "0x1521",
|
|
"fw_ver": "",
|
|
"status": "OK",
|
|
"sn": "",
|
|
"pn": "",
|
|
"port_num": 4,
|
|
"port_type": "Base-T",
|
|
"ports": []
|
|
}
|
|
]
|
|
}
|
|
RESTful fan`
|
|
|
|
hw := &models.HardwareConfig{}
|
|
parseNetworkAdapterInfo(text, hw)
|
|
|
|
if len(hw.NetworkAdapters) != 1 {
|
|
t.Fatalf("expected 1 network adapter, got %d", len(hw.NetworkAdapters))
|
|
}
|
|
got := hw.NetworkAdapters[0]
|
|
if got.Model == "" {
|
|
t.Fatalf("expected NIC model resolved from pci.ids, got empty")
|
|
}
|
|
if !strings.Contains(strings.ToUpper(got.Model), "I350") {
|
|
t.Fatalf("expected I350 in model, got %q", got.Model)
|
|
}
|
|
if got.Vendor == "" {
|
|
t.Fatalf("expected NIC vendor resolved from pci.ids")
|
|
}
|
|
}
|
|
|
|
func TestParseComponentLogSensors_ExtractsFanBackplaneAndPSUSummary(t *testing.T) {
|
|
text := `RESTful PSU info:
|
|
{
|
|
"power_supplies": [
|
|
{ "id": 0, "present": 1, "status": "OK", "ps_in_power": 123, "ps_out_power": 110, "psu_max_temperature": 41 }
|
|
],
|
|
"present_power_reading": 999
|
|
}
|
|
RESTful Network Adapter info:
|
|
{ "sys_adapters": [] }
|
|
RESTful fan info:
|
|
{
|
|
"fans": [
|
|
{ "id": 1, "fan_name": "FAN0_F_Speed", "present": "OK", "status": "OK", "status_str": "OK", "speed_rpm": 9200, "speed_percent": 35, "max_speed_rpm": 20000, "fan_model": "6056" }
|
|
],
|
|
"fans_power": 33
|
|
}
|
|
RESTful diskbackplane info:
|
|
[
|
|
{ "port_count": 8, "driver_count": 4, "front": 1, "backplane_index": 0, "present": 1, "cpld_version": "3.1", "temperature": 18 }
|
|
]
|
|
BMC`
|
|
|
|
sensors := ParseComponentLogSensors([]byte(text))
|
|
if len(sensors) == 0 {
|
|
t.Fatalf("expected sensors from component.log, got none")
|
|
}
|
|
|
|
has := func(name string) bool {
|
|
for _, s := range sensors {
|
|
if s.Name == name {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
if !has("FAN0_F_Speed") {
|
|
t.Fatalf("expected FAN0_F_Speed sensor in parsed output")
|
|
}
|
|
if !has("Backplane0_Temp") {
|
|
t.Fatalf("expected Backplane0_Temp sensor in parsed output")
|
|
}
|
|
if !has("PSU_Present_Power_Reading") {
|
|
t.Fatalf("expected PSU_Present_Power_Reading sensor in parsed output")
|
|
}
|
|
}
|
|
|
|
func TestParseComponentLogEvents_FanCriticalStatus(t *testing.T) {
|
|
text := `RESTful fan info:
|
|
{
|
|
"fans": [
|
|
{ "id": 7, "fan_name": "FAN3_R_Speed", "present": "OK", "status": "Critical", "status_str": "Critical", "speed_rpm": 0, "speed_percent": 0, "max_speed_rpm": 20000, "fan_model": "6056" }
|
|
],
|
|
"fans_power": 0
|
|
}
|
|
RESTful diskbackplane info:
|
|
[]
|
|
BMC`
|
|
|
|
events := ParseComponentLogEvents([]byte(text))
|
|
if len(events) != 1 {
|
|
t.Fatalf("expected 1 fan event, got %d", len(events))
|
|
}
|
|
if events[0].EventType != "Fan Status" {
|
|
t.Fatalf("expected Fan Status event type, got %q", events[0].EventType)
|
|
}
|
|
if events[0].Severity != models.SeverityCritical {
|
|
t.Fatalf("expected critical severity, got %q", events[0].Severity)
|
|
}
|
|
}
|
|
|
|
func TestParseHDDInfo_MergesIntoExistingStorage(t *testing.T) {
|
|
text := `RESTful HDD info:
|
|
[
|
|
{
|
|
"id": 1,
|
|
"present": 1,
|
|
"enable": 1,
|
|
"SN": "SER123",
|
|
"model": "Sample SSD",
|
|
"capacity": 1024,
|
|
"manufacture": "ACME",
|
|
"firmware": "1.0.0",
|
|
"locationstring": "OB01",
|
|
"capablespeed": 6
|
|
}
|
|
]
|
|
RESTful PSU`
|
|
|
|
hw := &models.HardwareConfig{
|
|
Storage: []models.Storage{
|
|
{
|
|
Slot: "OB01",
|
|
Type: "SSD",
|
|
},
|
|
},
|
|
}
|
|
|
|
parseHDDInfo(text, hw)
|
|
if len(hw.Storage) != 1 {
|
|
t.Fatalf("expected 1 storage item, got %d", len(hw.Storage))
|
|
}
|
|
if hw.Storage[0].SerialNumber != "SER123" {
|
|
t.Fatalf("expected serial from HDD section, got %q", hw.Storage[0].SerialNumber)
|
|
}
|
|
if hw.Storage[0].Model != "Sample SSD" {
|
|
t.Fatalf("expected model from HDD section, got %q", hw.Storage[0].Model)
|
|
}
|
|
if hw.Storage[0].Firmware != "1.0.0" {
|
|
t.Fatalf("expected firmware from HDD section, got %q", hw.Storage[0].Firmware)
|
|
}
|
|
}
|