package collector import "testing" func TestParsePSUSDR(t *testing.T) { raw := ` PS1 Input Power | 215 Watts | ok PS1 Output Power | 198 Watts | ok PS1 Input Voltage | 229 Volts | ok PS1 Temp | 39 C | ok PS1 Health | 97 % | ok PS2 Input Power | 0 Watts | cr ` got := parsePSUSDR(raw) if len(got) != 2 { t.Fatalf("len(got)=%d want 2", len(got)) } if got[1].status != statusOK { t.Fatalf("ps1 status=%q", got[1].status) } if got[1].inputPowerW == nil || *got[1].inputPowerW != 215 { t.Fatalf("ps1 input power=%v", got[1].inputPowerW) } if got[1].outputPowerW == nil || *got[1].outputPowerW != 198 { t.Fatalf("ps1 output power=%v", got[1].outputPowerW) } if got[1].inputVoltage == nil || *got[1].inputVoltage != 229 { t.Fatalf("ps1 input voltage=%v", got[1].inputVoltage) } if got[1].temperatureC == nil || *got[1].temperatureC != 39 { t.Fatalf("ps1 temperature=%v", got[1].temperatureC) } if got[1].healthPct == nil || *got[1].healthPct != 97 { t.Fatalf("ps1 health=%v", got[1].healthPct) } if got[2].status != statusCritical { t.Fatalf("ps2 status=%q", got[2].status) } } func TestParsePSUSlotVendorVariants(t *testing.T) { t.Parallel() tests := []struct { name string want int }{ {name: "PWS1 Status", want: 1}, {name: "Power Supply Bay 8", want: 8}, {name: "PS 6 Input Power", want: 6}, } for _, tt := range tests { got, ok := parsePSUSlot(tt.name) if !ok || got != tt.want { t.Fatalf("parsePSUSlot(%q)=(%d,%v) want (%d,true)", tt.name, got, ok, tt.want) } } } func TestSynthesizePSUsFromSDR(t *testing.T) { t.Parallel() health := 97.0 outputPower := 915.0 got := synthesizePSUsFromSDR(map[int]psuSDR{ 1: { slot: 1, status: statusOK, outputPowerW: &outputPower, healthPct: &health, }, }) if len(got) != 1 { t.Fatalf("len(got)=%d want 1", len(got)) } if got[0].Slot == nil || *got[0].Slot != "0" { t.Fatalf("slot=%v want 0", got[0].Slot) } if got[0].OutputPowerW == nil || *got[0].OutputPowerW != 915 { t.Fatalf("output power=%v", got[0].OutputPowerW) } if got[0].LifeRemainingPct == nil || *got[0].LifeRemainingPct != 97 { t.Fatalf("life remaining=%v", got[0].LifeRemainingPct) } if got[0].LifeUsedPct == nil || *got[0].LifeUsedPct != 3 { t.Fatalf("life used=%v", got[0].LifeUsedPct) } }