diff --git a/internal/usecase/devices/wsman/message.go b/internal/usecase/devices/wsman/message.go index 2a8fa761e..4dbb6ec19 100644 --- a/internal/usecase/devices/wsman/message.go +++ b/internal/usecase/devices/wsman/message.go @@ -531,11 +531,26 @@ func createMapInterfaceForHWInfo(hwResults HWResults) (interface{}, error) { }, "CIM_Processor": map[string]interface{}{ "responses": []interface{}{hwResults.ProcessorResult.Body.PackageResponse}, }, "CIM_PhysicalMemory": map[string]interface{}{ - "responses": hwResults.PhysicalMemoryResult.Body.PullResponse.MemoryItems, + "responses": interfaceSlice(hwResults.PhysicalMemoryResult.Body.PullResponse.MemoryItems), }, }, nil } +// interfaceSlice converts []physical.PhysicalMemory to []interface{} for consistent handling. +func interfaceSlice(items []physical.PhysicalMemory) []interface{} { + if items == nil { + return []interface{}{} + } + + result := make([]interface{}, len(items)) + + for i := range items { + result[i] = items[i] + } + + return result +} + func createMapInterfaceForDiskInfo(diskResults DiskResults) (interface{}, error) { return map[string]interface{}{ "CIM_MediaAccessDevice": map[string]interface{}{ diff --git a/internal/usecase/devices/wsman/message_test.go b/internal/usecase/devices/wsman/message_test.go new file mode 100644 index 000000000..97f7f8376 --- /dev/null +++ b/internal/usecase/devices/wsman/message_test.go @@ -0,0 +1,84 @@ +package wsman + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/device-management-toolkit/go-wsman-messages/v2/pkg/wsman/cim/physical" +) + +func TestInterfaceSlice(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + input []physical.PhysicalMemory + expected []interface{} + }{ + { + name: "empty slice", + input: []physical.PhysicalMemory{}, + expected: []interface{}{}, + }, + { + name: "single item", + input: []physical.PhysicalMemory{ + { + Capacity: 17179869184, // 16 GB + Manufacturer: "Kingston", + PartNumber: "9905700-101.A00G", + }, + }, + expected: []interface{}{ + physical.PhysicalMemory{ + Capacity: 17179869184, + Manufacturer: "Kingston", + PartNumber: "9905700-101.A00G", + }, + }, + }, + { + name: "multiple items", + input: []physical.PhysicalMemory{ + { + Capacity: 8589934592, // 8 GB + Manufacturer: "Samsung", + PartNumber: "M471A1K43CB1-CRC", + }, + { + Capacity: 8589934592, // 8 GB + Manufacturer: "Samsung", + PartNumber: "M471A1K43CB1-CRC", + }, + }, + expected: []interface{}{ + physical.PhysicalMemory{ + Capacity: 8589934592, + Manufacturer: "Samsung", + PartNumber: "M471A1K43CB1-CRC", + }, + physical.PhysicalMemory{ + Capacity: 8589934592, + Manufacturer: "Samsung", + PartNumber: "M471A1K43CB1-CRC", + }, + }, + }, + { + name: "nil slice", + input: nil, + expected: []interface{}{}, + }, + } + + for _, tc := range tests { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + result := interfaceSlice(tc.input) + require.Equal(t, tc.expected, result) + }) + } +}