package inspur import "testing" const diagnoseJSONFixture = `{ "Pcie Device Info": [ { "LocString": "#GPU0", "PcieSlot": 100, "PresentStatus": 1, "VendorId": 4318, "DeviceId": 10497, "BusNumber": 23, "DeviceNumber": 0, "FunctionNumber": 0, "CurrentLinkSpeed": 5, "MaxLinkSpeed": 5, "NegotiatedLinkWidth": 16, "MaxLinkWidth": 16 }, { "LocString": "#GPU6", "PcieSlot": 106, "PresentStatus": 1, "VendorId": 4318, "DeviceId": 10497, "BusNumber": 220, "DeviceNumber": 0, "FunctionNumber": 0, "CurrentLinkSpeed": 2, "MaxLinkSpeed": 5, "NegotiatedLinkWidth": 8, "MaxLinkWidth": 16 } ] }` func TestParseOtrdDiagnosePCIe(t *testing.T) { devices := ParseOtrdDiagnosePCIe([]byte(diagnoseJSONFixture)) if len(devices) != 2 { t.Fatalf("expected 2 devices, got %d", len(devices)) } gpu0 := devices[0] if gpu0.Slot != "#GPU0" || gpu0.Present == nil || !*gpu0.Present { t.Fatalf("expected GPU0 present, got %+v", gpu0) } if gpu0.Status == "Link Degraded" { t.Fatalf("GPU0 should not be flagged as degraded: %+v", gpu0) } if gpu0.LinkSpeed != "GEN5" || gpu0.MaxLinkSpeed != "GEN5" || gpu0.LinkWidth != 16 { t.Fatalf("unexpected GPU0 link info: %+v", gpu0) } gpu6 := devices[1] if gpu6.Status != "Link Degraded" { t.Fatalf("expected GPU6 to be flagged as degraded, got %+v", gpu6) } } func TestBuildPCIeLinkDegradationEvents(t *testing.T) { devices := ParseOtrdDiagnosePCIe([]byte(diagnoseJSONFixture)) events := BuildPCIeLinkDegradationEvents(devices) if len(events) != 1 { t.Fatalf("expected 1 degradation event, got %d", len(events)) } if events[0].Severity != "warning" { t.Fatalf("expected warning severity, got %q", events[0].Severity) } }