fix(pcie): verify GPU links under real bandwidth load
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package platform
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestPCIeLinkSummaryAcceptsIdleGen1WhenLinkReachesMaximumUnderLoad(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "summary.txt")
|
||||
if err := os.WriteFile(path, []byte("overall_status=OK\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
findings := []nvidiaPCIeBandwidthFinding{{
|
||||
Index: 0, BDF: "0000:05:00.0", BeforeSpeed: "Gen1", AfterSpeed: "Gen5",
|
||||
MaxSpeed: "Gen5", Width: 16, MaxWidth: 16, Supported: true, Sampled: true,
|
||||
}}
|
||||
|
||||
if err := appendNvidiaPCIeLinkSummary(path, findings); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
raw, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
got := string(raw)
|
||||
if !strings.Contains(got, "overall_status=OK\n") || !strings.Contains(got, "pcie_link_under_load_status=OK\n") {
|
||||
t.Fatalf("summary did not accept a link that rose from idle Gen1 to maximum under load:\n%s", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPCIeLinkSummaryFailsLinkStillBelowMaximumAfterLoad(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "summary.txt")
|
||||
if err := os.WriteFile(path, []byte("overall_status=UNSUPPORTED\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
findings := []nvidiaPCIeBandwidthFinding{{
|
||||
Index: 0, BDF: "0000:05:00.0", BeforeSpeed: "Gen1", AfterSpeed: "Gen1",
|
||||
MaxSpeed: "Gen5", Width: 16, MaxWidth: 16, Supported: true, Sampled: true, Degraded: true,
|
||||
}}
|
||||
|
||||
if err := appendNvidiaPCIeLinkSummary(path, findings); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
raw, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
got := string(raw)
|
||||
if !strings.Contains(got, "overall_status=FAILED\n") || !strings.Contains(got, "pcie_link_under_load_status=FAILED\n") {
|
||||
t.Fatalf("summary did not fail a link that stayed degraded under load:\n%s", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPCIeLinkSummaryIsUnsupportedWhenLoadNeverRan(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "summary.txt")
|
||||
if err := os.WriteFile(path, []byte("overall_status=FAILED\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
findings := []nvidiaPCIeBandwidthFinding{{
|
||||
Index: 0, BDF: "0000:05:00.0", BeforeSpeed: "Gen1", MaxSpeed: "Gen5",
|
||||
MaxWidth: 16, Supported: true,
|
||||
}}
|
||||
|
||||
if err := appendNvidiaPCIeLinkSummary(path, findings); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
raw, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
got := string(raw)
|
||||
if !strings.Contains(got, "pcie_link_under_load_status=UNSUPPORTED\n") {
|
||||
t.Fatalf("summary claimed a link verdict although the load callback never ran:\n%s", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user