CI / test (push) Successful in 9m16s
From the second review. - An output service reads the answer with the values restore put back taken out again (guard.Subject.Restored), as an input service reads the request redacted. - With n above 1, the service reads the first choice once it is whole, not at whichever choice finished first. - Restored values go into an answer asked for as JSON (response_format) escaped for it, as into tool-call arguments. - The embedding failure is logged once a minute through an outage, not once. - A card's own lane count and fastest generation come from the kernel (max_link_width, max_link_speed): the driver's width.max is what card and slot allow together, so an x16 card in an x8 slot read x8 of x8 and was never said. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
55 lines
2.0 KiB
Go
55 lines
2.0 KiB
Go
package discovery
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestACardInTheWrongSlotIsSaidSo(t *testing.T) {
|
|
for _, c := range []struct {
|
|
link PCIeLink
|
|
want string // empty: nothing to say
|
|
}{
|
|
// The PoC's Quadro RTX 6000, idle: current Gen1, but its fastest is 3,
|
|
// as the card's is, on all 16 lanes. Nothing wrong.
|
|
{PCIeLink{Gen: 3, GPUGen: 3, Width: 16, WidthMax: 16}, ""},
|
|
// An x16 card in a slot wired x8.
|
|
{PCIeLink{Gen: 4, GPUGen: 4, Width: 8, WidthMax: 16}, "x8 of its x16 lanes: 15.8 GB/s where it could have 31.5"},
|
|
// A Gen5 card in a Gen4 slot.
|
|
{PCIeLink{Gen: 4, GPUGen: 5, Width: 16, WidthMax: 16}, "PCIe Gen4 of its Gen5: 31.5 GB/s where it could have 63.0"},
|
|
// Both, behind a riser.
|
|
{PCIeLink{Gen: 3, GPUGen: 4, Width: 4, WidthMax: 16}, "x4 of its x16 lanes and PCIe Gen3 of its Gen4"},
|
|
// A driver that says nothing.
|
|
{PCIeLink{}, ""},
|
|
} {
|
|
got := c.link.Problem()
|
|
if (c.want == "") != (got == "") || !strings.Contains(got, c.want) {
|
|
t.Errorf("%+v: %q, want %q", c.link, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTheLinkIsReadFromNvidiaSMI(t *testing.T) {
|
|
links := parsePCIe("0, 3, 16, 16, 3\n1, 4, 8, 16, [N/A]\n")
|
|
if links[0] != (PCIeLink{Gen: 3, GPUGen: 3, Width: 16, WidthMax: 16}) || links[1] != (PCIeLink{Gen: 4, Width: 8, WidthMax: 16}) {
|
|
t.Errorf("%+v", links)
|
|
}
|
|
}
|
|
|
|
func TestTheCardsOwnLanesComeFromTheKernel(t *testing.T) {
|
|
// The driver says x8 of x8 for a x16 card in a slot wired x8; the
|
|
// device's own max_link_width says 16.
|
|
root := t.TempDir()
|
|
dev := filepath.Join(root, "0000:3b:00.0")
|
|
_ = os.MkdirAll(dev, 0o755)
|
|
for f, v := range map[string]string{"max_link_width": "16", "current_link_width": "8", "max_link_speed": "16.0 GT/s PCIe"} {
|
|
_ = os.WriteFile(filepath.Join(dev, f), []byte(v+"\n"), 0o644)
|
|
}
|
|
l := withSysfs(PCIeLink{Gen: 4, Width: 8, WidthMax: 8}, root, "00000000:3B:00.0")
|
|
if l.WidthMax != 16 || l.Width != 8 || l.GPUGen != 4 || !strings.Contains(l.Problem(), "x8 of its x16") {
|
|
t.Errorf("%+v: %q", l, l.Problem())
|
|
}
|
|
}
|