The techdump — the only place the IPMI FRU / Elabel identity (Product Name = server model, serials, part numbers) is recorded — only ran under LiveCD. Run it on every audit so `bee audit` on an installed host captures it too. Also add `ipmitool mc info` and `ipmitool lan print` to the techdump, and pin `ipmitool fru print 0` to FRU device 0 to match the Export Tools "FRU / Elabel" editor exactly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package platform
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestTechDumpCapturesIPMIIdentity(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
want := map[string][]string{
|
|
"ipmitool-fru.txt": {"fru", "print", "0"},
|
|
"ipmitool-mc-info.txt": {"mc", "info"},
|
|
"ipmitool-lan-print.txt": {"lan", "print"},
|
|
}
|
|
for _, cmd := range techDumpFixedCommands {
|
|
if args, ok := want[cmd.File]; ok {
|
|
if cmd.Name != "ipmitool" || !reflect.DeepEqual(cmd.Args, args) {
|
|
t.Fatalf("%s: got %s %v, want ipmitool %v", cmd.File, cmd.Name, cmd.Args, args)
|
|
}
|
|
delete(want, cmd.File)
|
|
}
|
|
}
|
|
if len(want) != 0 {
|
|
t.Fatalf("techdump missing IPMI identity captures: %v", want)
|
|
}
|
|
}
|
|
|
|
func TestLSBLKDumpDevices(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "lsblk.json")
|
|
if err := os.WriteFile(path, []byte(`{"blockdevices":[{"name":"sda","type":"disk","tran":"usb"},{"name":"sda1","type":"part"},{"name":"nvme0n1","type":"disk","tran":"nvme"},{"name":"sdb","type":"disk","tran":"sata"}]}`), 0644); err != nil {
|
|
t.Fatalf("write lsblk fixture: %v", err)
|
|
}
|
|
|
|
got := lsblkDumpDevices(path)
|
|
want := []string{"nvme0n1", "sdb"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("lsblkDumpDevices=%v want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestNVMEDumpDevices(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "nvme-list.json")
|
|
if err := os.WriteFile(path, []byte(`{"Devices":[{"DevicePath":"/dev/nvme1n1"},{"DevicePath":"/dev/nvme0n1"},{"DevicePath":"/dev/nvme1n1"}]}`), 0644); err != nil {
|
|
t.Fatalf("write nvme fixture: %v", err)
|
|
}
|
|
|
|
got := nvmeDumpDevices(path)
|
|
want := []string{"/dev/nvme0n1", "/dev/nvme1n1"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("nvmeDumpDevices=%v want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestSanitizeDumpName(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if got := sanitizeDumpName("/dev/nvme0n1"); got != "nvme0n1" {
|
|
t.Fatalf("sanitizeDumpName=%q want nvme0n1", got)
|
|
}
|
|
}
|