124 lines
3.7 KiB
Go
124 lines
3.7 KiB
Go
package collector
|
|
|
|
import (
|
|
"bee/audit/internal/schema"
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseSFPDOM(t *testing.T) {
|
|
raw := `
|
|
Module temperature : 41.23 C
|
|
Module voltage : 3.30 V
|
|
Laser bias current : 6.12 mA
|
|
Laser output power : 0.4712 mW / -3.27 dBm
|
|
Receiver signal average optical power : 0.4123 mW / -3.85 dBm
|
|
`
|
|
got := parseSFPDOM(raw)
|
|
|
|
if v, ok := got["sfp_temperature_c"].(float64); !ok || v != 41.23 {
|
|
t.Fatalf("sfp_temperature_c mismatch: %#v", got["sfp_temperature_c"])
|
|
}
|
|
if v, ok := got["sfp_voltage_v"].(float64); !ok || v != 3.30 {
|
|
t.Fatalf("sfp_voltage_v mismatch: %#v", got["sfp_voltage_v"])
|
|
}
|
|
if v, ok := got["sfp_bias_ma"].(float64); !ok || v != 6.12 {
|
|
t.Fatalf("sfp_bias_ma mismatch: %#v", got["sfp_bias_ma"])
|
|
}
|
|
if v, ok := got["sfp_tx_power_dbm"].(float64); !ok || v != -3.27 {
|
|
t.Fatalf("sfp_tx_power_dbm mismatch: %#v", got["sfp_tx_power_dbm"])
|
|
}
|
|
if v, ok := got["sfp_rx_power_dbm"].(float64); !ok || v != -3.85 {
|
|
t.Fatalf("sfp_rx_power_dbm mismatch: %#v", got["sfp_rx_power_dbm"])
|
|
}
|
|
}
|
|
|
|
func TestParseLSPCIDetailSerial(t *testing.T) {
|
|
raw := `
|
|
05:00.0 Ethernet controller: Mellanox Technologies MT28908 Family [ConnectX-6]
|
|
Serial number: NIC-SN-12345
|
|
`
|
|
if got := parseLSPCIDetailSerial(raw); got != "NIC-SN-12345" {
|
|
t.Fatalf("serial=%q want %q", got, "NIC-SN-12345")
|
|
}
|
|
}
|
|
|
|
func TestParsePCIVPDSerial(t *testing.T) {
|
|
raw := []byte{0x82, 0x05, 0x00, 'M', 'L', 'X', '5', 0x90, 0x08, 0x00, 'S', 'N', 0x08, 'M', 'T', '1', '2', '3', '4', '5', '6'}
|
|
if got := parsePCIVPDSerial(raw); got != "MT123456" {
|
|
t.Fatalf("serial=%q want %q", got, "MT123456")
|
|
}
|
|
}
|
|
|
|
func TestEnrichPCIeWithNICTelemetryAddsSerialFallback(t *testing.T) {
|
|
origDetail := queryPCILSPCIDetail
|
|
origVPD := readPCIVPDFile
|
|
origIfaces := netIfacesByBDF
|
|
origReadMAC := readNetAddressFile
|
|
origEth := ethtoolInfoQuery
|
|
origModule := ethtoolModuleQuery
|
|
t.Cleanup(func() {
|
|
queryPCILSPCIDetail = origDetail
|
|
readPCIVPDFile = origVPD
|
|
netIfacesByBDF = origIfaces
|
|
readNetAddressFile = origReadMAC
|
|
ethtoolInfoQuery = origEth
|
|
ethtoolModuleQuery = origModule
|
|
})
|
|
|
|
queryPCILSPCIDetail = func(bdf string) (string, error) {
|
|
if bdf != "0000:18:00.0" {
|
|
t.Fatalf("unexpected bdf: %s", bdf)
|
|
}
|
|
return "Serial number: NIC-SN-98765\n", nil
|
|
}
|
|
readPCIVPDFile = func(string) ([]byte, error) {
|
|
return nil, fmt.Errorf("no vpd needed")
|
|
}
|
|
netIfacesByBDF = func(string) []string { return []string{"eth0"} }
|
|
readNetAddressFile = func(iface string) (string, error) {
|
|
if iface != "eth0" {
|
|
t.Fatalf("unexpected iface: %s", iface)
|
|
}
|
|
return "aa:bb:cc:dd:ee:ff", nil
|
|
}
|
|
ethtoolInfoQuery = func(string) (string, error) { return "", fmt.Errorf("skip firmware") }
|
|
ethtoolModuleQuery = func(string) (string, error) { return "", fmt.Errorf("skip optics") }
|
|
|
|
class := "EthernetController"
|
|
bdf := "0000:18:00.0"
|
|
devs := []schema.HardwarePCIeDevice{{
|
|
DeviceClass: &class,
|
|
BDF: &bdf,
|
|
}}
|
|
|
|
out := enrichPCIeWithNICTelemetry(devs)
|
|
if out[0].SerialNumber == nil || *out[0].SerialNumber != "NIC-SN-98765" {
|
|
t.Fatalf("serial=%v want NIC-SN-98765", out[0].SerialNumber)
|
|
}
|
|
if len(out[0].MacAddresses) != 1 || out[0].MacAddresses[0] != "aa:bb:cc:dd:ee:ff" {
|
|
t.Fatalf("mac_addresses=%v", out[0].MacAddresses)
|
|
}
|
|
}
|
|
|
|
func TestDBMValue(t *testing.T) {
|
|
tests := []struct {
|
|
in string
|
|
want float64
|
|
ok bool
|
|
}{
|
|
{"0.4123 mW / -3.85 dBm", -3.85, true},
|
|
{"-1.23 dBm", -1.23, true},
|
|
{"not supported", 0, false},
|
|
}
|
|
for _, tt := range tests {
|
|
got, ok := dbmValue(tt.in)
|
|
if ok != tt.ok {
|
|
t.Fatalf("dbmValue(%q) ok=%v want %v", tt.in, ok, tt.ok)
|
|
}
|
|
if ok && got != tt.want {
|
|
t.Fatalf("dbmValue(%q)=%v want %v", tt.in, got, tt.want)
|
|
}
|
|
}
|
|
}
|