Align Reanimator export with updated integration guide
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package exporter
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -161,14 +163,14 @@ func TestInferStorageStatus(t *testing.T) {
|
||||
stor: models.Storage{
|
||||
Present: true,
|
||||
},
|
||||
want: "OK",
|
||||
want: "Unknown",
|
||||
},
|
||||
{
|
||||
name: "not present",
|
||||
stor: models.Storage{
|
||||
Present: false,
|
||||
},
|
||||
want: "Empty",
|
||||
want: "Unknown",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -216,8 +218,8 @@ func TestConvertCPUs(t *testing.T) {
|
||||
t.Errorf("expected AMD manufacturer for second CPU, got %q", result[1].Manufacturer)
|
||||
}
|
||||
|
||||
if result[0].Status != "OK" {
|
||||
t.Errorf("expected OK status, got %q", result[0].Status)
|
||||
if result[0].Status != "Unknown" {
|
||||
t.Errorf("expected Unknown status, got %q", result[0].Status)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,8 +278,8 @@ func TestConvertStorage(t *testing.T) {
|
||||
t.Fatalf("expected 1 storage device (skipped one without serial), got %d", len(result))
|
||||
}
|
||||
|
||||
if result[0].Status != "OK" {
|
||||
t.Errorf("expected OK status, got %q", result[0].Status)
|
||||
if result[0].Status != "Unknown" {
|
||||
t.Errorf("expected Unknown status, got %q", result[0].Status)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -339,6 +341,9 @@ func TestConvertPCIeDevices(t *testing.T) {
|
||||
for _, dev := range result {
|
||||
if dev.SerialNumber == "GPU-001" {
|
||||
foundGPU = true
|
||||
if dev.DeviceClass != "DisplayController" {
|
||||
t.Errorf("expected GPU device_class DisplayController, got %q", dev.DeviceClass)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -375,3 +380,101 @@ func TestConvertPowerSupplies(t *testing.T) {
|
||||
t.Errorf("expected OK status, got %q", result[0].Status)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConvertBoardNormalizesNULL(t *testing.T) {
|
||||
board := convertBoard(models.BoardInfo{
|
||||
Manufacturer: " NULL ",
|
||||
ProductName: "null",
|
||||
SerialNumber: "TEST123",
|
||||
})
|
||||
|
||||
if board.Manufacturer != "" {
|
||||
t.Fatalf("expected empty manufacturer, got %q", board.Manufacturer)
|
||||
}
|
||||
if board.ProductName != "" {
|
||||
t.Fatalf("expected empty product_name, got %q", board.ProductName)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSourceTypeOmittedWhenInvalidOrEmpty(t *testing.T) {
|
||||
result, err := ConvertToReanimator(&models.AnalysisResult{
|
||||
Filename: "redfish://10.0.0.1",
|
||||
SourceType: "archive",
|
||||
TargetHost: "10.0.0.1",
|
||||
Hardware: &models.HardwareConfig{
|
||||
BoardInfo: models.BoardInfo{SerialNumber: "TEST123"},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
payload, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
t.Fatalf("marshal failed: %v", err)
|
||||
}
|
||||
if strings.Contains(string(payload), `"source_type"`) {
|
||||
t.Fatalf("expected source_type to be omitted for invalid value, got %s", string(payload))
|
||||
}
|
||||
}
|
||||
|
||||
func TestTargetHostOmittedWhenUnavailable(t *testing.T) {
|
||||
result, err := ConvertToReanimator(&models.AnalysisResult{
|
||||
Filename: "test.json",
|
||||
SourceType: "api",
|
||||
Hardware: &models.HardwareConfig{
|
||||
BoardInfo: models.BoardInfo{SerialNumber: "TEST123"},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
payload, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
t.Fatalf("marshal failed: %v", err)
|
||||
}
|
||||
if strings.Contains(string(payload), `"target_host"`) {
|
||||
t.Fatalf("expected target_host to be omitted when unavailable, got %s", string(payload))
|
||||
}
|
||||
}
|
||||
|
||||
func TestInferTargetHost(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
targetHost string
|
||||
filename string
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "explicit target host wins",
|
||||
targetHost: "10.0.0.10",
|
||||
filename: "redfish://10.0.0.20",
|
||||
want: "10.0.0.10",
|
||||
},
|
||||
{
|
||||
name: "hostname from URL",
|
||||
filename: "redfish://10.10.10.103",
|
||||
want: "10.10.10.103",
|
||||
},
|
||||
{
|
||||
name: "ip extracted from archive name",
|
||||
filename: "nvidia_bug_report_192.168.12.34.tar.gz",
|
||||
want: "192.168.12.34",
|
||||
},
|
||||
{
|
||||
name: "no host available",
|
||||
filename: "test.json",
|
||||
want: "",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := inferTargetHost(tt.targetHost, tt.filename)
|
||||
if got != tt.want {
|
||||
t.Fatalf("inferTargetHost() = %q, want %q", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user