package inspurlegacy import ( "testing" "git.mchus.pro/mchus/logpile/internal/parser" ) func f(path string, content string) parser.ExtractedFile { return parser.ExtractedFile{Path: path, Content: []byte(content)} } func TestDetect_LegacyOnekeylog(t *testing.T) { p := &Parser{} files := []parser.ExtractedFile{ f("onekeylog/Inspur_AssetInfoInventory.log", sampleAssetInventory), f("onekeylog/Inspur_NF5466M5_221353113_IDL", "2026-05-23T08:16:41|PSU|Critical|Asssert|080053F2|x"), f("onekeylog/FRU.bin", ""), f("onekeylog/blackbox.log", ""), f("onekeylog/sel.log", ""), } if got := p.Detect(files); got < 80 { t.Fatalf("confidence = %d, want high", got) } } func TestDetect_DisqualifiedByModernMarkers(t *testing.T) { p := &Parser{} files := []parser.ExtractedFile{ f("onekeylog/Inspur_AssetInfoInventory.log", ""), f("onekeylog/devicefrusdr.log", ""), } if got := p.Detect(files); got != 0 { t.Fatalf("confidence = %d, want 0 (modern Kaytus dump)", got) } } func TestDetect_UnrelatedArchive(t *testing.T) { p := &Parser{} files := []parser.ExtractedFile{f("dump/redfish/Systems.json", "{}")} if got := p.Detect(files); got != 0 { t.Fatalf("confidence = %d, want 0", got) } } func TestParse_EndToEnd(t *testing.T) { p := &Parser{} files := []parser.ExtractedFile{ f("onekeylog/FRU.bin", string(buildFRU())), f("onekeylog/Inspur_AssetInfoInventory.log", sampleAssetInventory), f("onekeylog/Inspur_NF5466M5_221353113_IDL", "2026-05-23T08:16:41|PSU|Critical|Asssert|080053F2|PSU0 unit input off.."), f("onekeylog/sel.log", " e34 | 05/23/2026 | 08:16:41 | Power Supply PSU0_Status | Power Supply AC lost | Asserted"), f("onekeylog/warning.log", "<27> 2026-07-09T02:29:25.700000+03:00 localhost dhcp6c[957]: client6_send: transmit failed"), } res, err := p.Parse(files) if err != nil { t.Fatal(err) } if res.Hardware.BoardInfo.SerialNumber != "221353113" { t.Errorf("board serial = %q", res.Hardware.BoardInfo.SerialNumber) } if len(res.FRU) != 1 { t.Errorf("fru = %d", len(res.FRU)) } if len(res.Hardware.CPUs) != 2 || len(res.Hardware.PowerSupply) != 1 { t.Errorf("hw cpus=%d psu=%d", len(res.Hardware.CPUs), len(res.Hardware.PowerSupply)) } if len(res.Events) < 3 { t.Errorf("events = %d", len(res.Events)) } // Sensors are legitimately empty for this archive class; the reason is recorded. var haveSensorNote bool for _, ce := range res.CollectionErrors { if ce.Section == "sensors" { haveSensorNote = true } } if !haveSensorNote { t.Error("missing sensors collection-error note") } }