Add pluggable live collectors and simplify API connect form
This commit is contained in:
128
internal/collector/redfish_test.go
Normal file
128
internal/collector/redfish_test.go
Normal file
@@ -0,0 +1,128 @@
|
||||
package collector
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRedfishConnectorCollect(t *testing.T) {
|
||||
mux := http.NewServeMux()
|
||||
register := func(path string, payload interface{}) {
|
||||
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
_ = json.NewEncoder(w).Encode(payload)
|
||||
})
|
||||
}
|
||||
|
||||
register("/redfish/v1", map[string]interface{}{"Name": "ServiceRoot"})
|
||||
register("/redfish/v1/Systems/1", map[string]interface{}{
|
||||
"Manufacturer": "Supermicro",
|
||||
"Model": "SYS-TEST",
|
||||
"SerialNumber": "SYS123",
|
||||
"BiosVersion": "2.1a",
|
||||
})
|
||||
register("/redfish/v1/Systems/1/Bios", map[string]interface{}{"Version": "2.1a"})
|
||||
register("/redfish/v1/Systems/1/SecureBoot", map[string]interface{}{"SecureBootCurrentBoot": "Enabled"})
|
||||
register("/redfish/v1/Systems/1/Processors", map[string]interface{}{
|
||||
"Members": []map[string]string{
|
||||
{"@odata.id": "/redfish/v1/Systems/1/Processors/CPU1"},
|
||||
},
|
||||
})
|
||||
register("/redfish/v1/Systems/1/Processors/CPU1", map[string]interface{}{
|
||||
"Name": "CPU1",
|
||||
"Model": "Xeon Gold",
|
||||
"TotalCores": 32,
|
||||
"TotalThreads": 64,
|
||||
"MaxSpeedMHz": 3600,
|
||||
})
|
||||
register("/redfish/v1/Systems/1/Memory", map[string]interface{}{
|
||||
"Members": []map[string]string{
|
||||
{"@odata.id": "/redfish/v1/Systems/1/Memory/DIMM1"},
|
||||
},
|
||||
})
|
||||
register("/redfish/v1/Systems/1/Memory/DIMM1", map[string]interface{}{
|
||||
"Name": "DIMM A1",
|
||||
"CapacityMiB": 32768,
|
||||
"MemoryDeviceType": "DDR5",
|
||||
"OperatingSpeedMhz": 4800,
|
||||
"Status": map[string]interface{}{
|
||||
"Health": "OK",
|
||||
},
|
||||
})
|
||||
register("/redfish/v1/Systems/1/Storage", map[string]interface{}{
|
||||
"Members": []map[string]string{
|
||||
{"@odata.id": "/redfish/v1/Systems/1/Storage/1"},
|
||||
},
|
||||
})
|
||||
register("/redfish/v1/Systems/1/Storage/1", map[string]interface{}{
|
||||
"Drives": []map[string]string{
|
||||
{"@odata.id": "/redfish/v1/Systems/1/Storage/1/Drives/1"},
|
||||
},
|
||||
})
|
||||
register("/redfish/v1/Systems/1/Storage/1/Drives/1", map[string]interface{}{
|
||||
"Name": "Drive1",
|
||||
"Model": "NVMe Test",
|
||||
"MediaType": "SSD",
|
||||
"Protocol": "NVMe",
|
||||
"CapacityGB": 960,
|
||||
"SerialNumber": "SN123",
|
||||
})
|
||||
register("/redfish/v1/Chassis/1/NetworkAdapters", map[string]interface{}{
|
||||
"Members": []map[string]string{
|
||||
{"@odata.id": "/redfish/v1/Chassis/1/NetworkAdapters/1"},
|
||||
},
|
||||
})
|
||||
register("/redfish/v1/Chassis/1/NetworkAdapters/1", map[string]interface{}{
|
||||
"Name": "Mellanox",
|
||||
"Model": "ConnectX-6",
|
||||
"SerialNumber": "NIC123",
|
||||
})
|
||||
register("/redfish/v1/Managers/1", map[string]interface{}{
|
||||
"FirmwareVersion": "1.25",
|
||||
})
|
||||
register("/redfish/v1/Managers/1/NetworkProtocol", map[string]interface{}{
|
||||
"Id": "NetworkProtocol",
|
||||
})
|
||||
|
||||
ts := httptest.NewServer(mux)
|
||||
defer ts.Close()
|
||||
|
||||
c := NewRedfishConnector()
|
||||
result, err := c.Collect(context.Background(), Request{
|
||||
Host: ts.URL,
|
||||
Port: 443,
|
||||
Protocol: "redfish",
|
||||
Username: "admin",
|
||||
AuthType: "password",
|
||||
Password: "secret",
|
||||
TLSMode: "strict",
|
||||
}, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("collect failed: %v", err)
|
||||
}
|
||||
|
||||
if result.Hardware == nil {
|
||||
t.Fatalf("expected hardware config")
|
||||
}
|
||||
if result.Hardware.BoardInfo.ProductName != "SYS-TEST" {
|
||||
t.Fatalf("unexpected board model: %q", result.Hardware.BoardInfo.ProductName)
|
||||
}
|
||||
if len(result.Hardware.CPUs) != 1 {
|
||||
t.Fatalf("expected one CPU, got %d", len(result.Hardware.CPUs))
|
||||
}
|
||||
if len(result.Hardware.Memory) != 1 {
|
||||
t.Fatalf("expected one DIMM, got %d", len(result.Hardware.Memory))
|
||||
}
|
||||
if len(result.Hardware.Storage) != 1 {
|
||||
t.Fatalf("expected one drive, got %d", len(result.Hardware.Storage))
|
||||
}
|
||||
if len(result.Hardware.NetworkAdapters) != 1 {
|
||||
t.Fatalf("expected one nic, got %d", len(result.Hardware.NetworkAdapters))
|
||||
}
|
||||
if len(result.Hardware.Firmware) == 0 {
|
||||
t.Fatalf("expected firmware entries")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user