package v2 import ( "fmt" "testing" "github.com/stretchr/testify/require" v1 "edge-infra.dev/pkg/sds/display/k8s/apis/v1" ) var ( v1Primary = v1.Primary(true) v1NotPrimary = v1.Primary(false) v1EloTouchSolutionsUSB = v1.InputDeviceName("Elo Touch Solutions Elo Touch Solutions Pcap USB Interface") v1EGalaxEXC3189 = v1.InputDeviceName("eGalax Inc. eGalaxTouch EXC3189-2506-09.00.00.00") v1EGalaxEXC3189Mouse = v1.InputDeviceName("eGalax Inc. eGalaxTouch EXC3189-2506-09.00.00.00 Mouse") ) func TestDisplayConfigFromV1(t *testing.T) { tcs := []struct { v1 *v1.DisplayConfig displayConfig *DisplayConfig expectedV2 *DisplayConfig expectedDisconnectedIDs map[DisplayPort]MPID }{ { // test case 1: // empty display config v1: &v1.DisplayConfig{}, displayConfig: &DisplayConfig{}, expectedV2: &DisplayConfig{}, expectedDisconnectedIDs: map[DisplayPort]MPID{}, }, { // test case 2: // all connected displays are converted v1: &v1.DisplayConfig{ Displays: v1.Displays{ "NCR-1234": v1.Display{ Orientation: &v1.NormalOrientation, Resolution: &v1.Resolution{ Width: 1920, Height: 1080, }, Primary: &v1Primary, InputDeviceMappings: []v1.InputDeviceName{ v1EloTouchSolutionsUSB, }, }, "NCR-5678": v1.Display{ Orientation: &v1.InvertedOrientation, Resolution: &v1.Resolution{ Width: 800, Height: 600, }, Primary: &v1NotPrimary, InputDeviceMappings: []v1.InputDeviceName{ v1EGalaxEXC3189, v1EGalaxEXC3189Mouse, }, }, }, }, displayConfig: &DisplayConfig{ Displays: Displays{ { DisplayPort: "card0-HDMI1", MPID: &ncr1234, Orientation: &NormalOrientation, Resolution: &Resolution{ Width: 1260, Height: 720, }, Primary: ¬Primary, }, { DisplayPort: "card0-HDMI2", MPID: &ncr5678, Orientation: &NormalOrientation, Resolution: &Resolution{ Width: 400, Height: 300, }, Primary: &primary, }, }, }, expectedV2: &DisplayConfig{ Displays: Displays{ { DisplayPort: "card0-HDMI1", Orientation: &NormalOrientation, Resolution: &Resolution{ Width: 1920, Height: 1080, }, Primary: &primary, InputDeviceMappings: []InputDeviceName{ eloTouchSolutionsUSB, }, }, { DisplayPort: "card0-HDMI2", Orientation: &InvertedOrientation, Resolution: &Resolution{ Width: 800, Height: 600, }, Primary: ¬Primary, InputDeviceMappings: []InputDeviceName{ eGalaxEXC3189, eGalaxEXC3189Mouse, }, }, }, }, expectedDisconnectedIDs: map[DisplayPort]MPID{}, }, { // test case 3: // disconnected displays marked "DISCONNECTED" v1: &v1.DisplayConfig{ Displays: v1.Displays{ "ARC-2332": v1.Display{ Primary: &v1Primary, }, "NCR-1234": v1.Display{ Resolution: &v1.Resolution{ Width: 1920, Height: 1080, }, }, "NCR-5678": v1.Display{ Orientation: &v1.InvertedOrientation, InputDeviceMappings: []v1.InputDeviceName{ v1EGalaxEXC3189, v1EGalaxEXC3189Mouse, }, }, }, }, displayConfig: &DisplayConfig{ Displays: Displays{ { DisplayPort: "card0-HDMI1", MPID: &ncr1234, Orientation: &NormalOrientation, Resolution: &Resolution{ Width: 1260, Height: 720, }, Primary: &primary, }, }, }, expectedV2: &DisplayConfig{ Displays: Displays{ { DisplayPort: "unknown-disconnected-1", Primary: &primary, }, { DisplayPort: "card0-HDMI1", Resolution: &Resolution{ Width: 1920, Height: 1080, }, }, { DisplayPort: "unknown-disconnected-2", Orientation: &InvertedOrientation, InputDeviceMappings: []InputDeviceName{ eGalaxEXC3189, eGalaxEXC3189Mouse, }, }, }, }, expectedDisconnectedIDs: map[DisplayPort]MPID{ "unknown-disconnected-1": "ARC-2332", "unknown-disconnected-2": "NCR-5678", }, }, } for idx, tc := range tcs { v2, disconnectedIDs := DisplayConfigFromV1(tc.v1, tc.displayConfig) require.Equal(t, tc.expectedV2, v2, fmt.Sprintf("test case %d failed", idx+1)) require.Equal(t, tc.expectedDisconnectedIDs, disconnectedIDs, fmt.Sprintf("test case %d failed", idx+1)) } }