- board.go: collectBoard(), parseBoard(), parseBIOSFirmware(), parseDMIFields(), cleanDMIValue() - Reads System Information (type 1): serial, manufacturer, product_name, uuid - Reads Base Board Information (type 2): part_number - Reads BIOS Information (type 0): firmware version record - cleanDMIValue strips vendor placeholders (O.E.M., Not Specified, Unknown, etc.) - board_test.go: 6 table/case tests with dmidecode fixtures in testdata/ - collector.go: wired board + BIOS firmware into snapshot Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
120 lines
3.2 KiB
Go
120 lines
3.2 KiB
Go
package collector
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseBoard(t *testing.T) {
|
|
type1 := mustReadFile(t, "testdata/dmidecode_type1.txt")
|
|
type2 := mustReadFile(t, "testdata/dmidecode_type2.txt")
|
|
|
|
board := parseBoard(type1, type2)
|
|
|
|
if board.SerialNumber != "CAR315KA0803B90" {
|
|
t.Errorf("serial_number: got %q, want %q", board.SerialNumber, "CAR315KA0803B90")
|
|
}
|
|
if board.Manufacturer == nil || *board.Manufacturer != "Inspur" {
|
|
t.Errorf("manufacturer: got %v, want Inspur", board.Manufacturer)
|
|
}
|
|
if board.ProductName == nil || *board.ProductName != "NF5468M7" {
|
|
t.Errorf("product_name: got %v, want NF5468M7", board.ProductName)
|
|
}
|
|
if board.PartNumber == nil || *board.PartNumber != "YZCA-02758-105" {
|
|
t.Errorf("part_number: got %v, want YZCA-02758-105", board.PartNumber)
|
|
}
|
|
if board.UUID == nil || *board.UUID != "a1b2c3d4-e5f6-7890-abcd-ef1234567890" {
|
|
t.Errorf("uuid: got %v, want a1b2c3d4-e5f6-7890-abcd-ef1234567890", board.UUID)
|
|
}
|
|
}
|
|
|
|
func TestParseBoard_emptySerial(t *testing.T) {
|
|
type1 := mustReadFile(t, "testdata/dmidecode_type1_empty_serial.txt")
|
|
|
|
board := parseBoard(type1, "")
|
|
|
|
if board.SerialNumber != "" {
|
|
t.Errorf("expected empty serial for placeholder value, got %q", board.SerialNumber)
|
|
}
|
|
if board.Manufacturer != nil {
|
|
t.Errorf("expected nil manufacturer for placeholder, got %q", *board.Manufacturer)
|
|
}
|
|
if board.UUID != nil {
|
|
t.Errorf("expected nil UUID for 'Not Settable', got %q", *board.UUID)
|
|
}
|
|
}
|
|
|
|
func TestParseBIOSFirmware(t *testing.T) {
|
|
type0 := mustReadFile(t, "testdata/dmidecode_type0.txt")
|
|
fw := parseBIOSFirmware(type0)
|
|
|
|
if len(fw) != 1 {
|
|
t.Fatalf("expected 1 firmware record, got %d", len(fw))
|
|
}
|
|
if fw[0].DeviceName != "BIOS" {
|
|
t.Errorf("device_name: got %q, want BIOS", fw[0].DeviceName)
|
|
}
|
|
if fw[0].Version != "06.08.05" {
|
|
t.Errorf("version: got %q, want 06.08.05", fw[0].Version)
|
|
}
|
|
}
|
|
|
|
func TestParseBIOSFirmware_empty(t *testing.T) {
|
|
fw := parseBIOSFirmware("")
|
|
if len(fw) != 0 {
|
|
t.Errorf("expected no firmware records for empty input, got %d", len(fw))
|
|
}
|
|
}
|
|
|
|
func TestCleanDMIValue(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
want string
|
|
}{
|
|
{"CAR315KA0803B90", "CAR315KA0803B90"},
|
|
{"To Be Filled By O.E.M.", ""},
|
|
{"to be filled by o.e.m.", ""},
|
|
{"Not Specified", ""},
|
|
{"Not Settable", ""},
|
|
{"Unknown", ""},
|
|
{"N/A", ""},
|
|
{"None", ""},
|
|
{"NULL", ""},
|
|
{"Default String", ""},
|
|
{" Inspur ", "Inspur"},
|
|
{"", ""},
|
|
{"0", ""},
|
|
}
|
|
for _, tt := range tests {
|
|
got := cleanDMIValue(tt.input)
|
|
if got != tt.want {
|
|
t.Errorf("cleanDMIValue(%q) = %q, want %q", tt.input, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseDMIFields(t *testing.T) {
|
|
type1 := mustReadFile(t, "testdata/dmidecode_type1.txt")
|
|
fields := parseDMIFields(type1, "System Information")
|
|
|
|
if fields["Manufacturer"] != "Inspur" {
|
|
t.Errorf("Manufacturer: got %q", fields["Manufacturer"])
|
|
}
|
|
if fields["Serial Number"] != "CAR315KA0803B90" {
|
|
t.Errorf("Serial Number: got %q", fields["Serial Number"])
|
|
}
|
|
// sub-list items must not be included
|
|
if _, ok := fields["PCI is supported"]; ok {
|
|
t.Error("sub-list item should not appear in fields")
|
|
}
|
|
}
|
|
|
|
func mustReadFile(t *testing.T, path string) string {
|
|
t.Helper()
|
|
b, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatalf("read fixture %s: %v", path, err)
|
|
}
|
|
return string(b)
|
|
}
|