116 lines
4.6 KiB
Plaintext
116 lines
4.6 KiB
Plaintext
|
|
# These tests are based on the Zephyr device drivers, which are in turn based on the QEMU implementation of the Virtio devices
|
||
|
|
# The driver sometimes exhibits behavior that either does not fit the specification or interprets the specification in a particular way
|
||
|
|
# Listed here are some idiosyncrasies that the tests and the device implementation will respect in order to facilitate testing of Zephyr drivers
|
||
|
|
|
||
|
|
# For the VIRTIO_CONSOLE_DEVICE_ADD, VIRTIO_CONSOLE_DEVICE_REMOVE, VIRTIO_CONSOLE_CONSOLE_PORT messages, QEMU sends
|
||
|
|
# a 0x1 in the value field, despite it being unspecified or specified as unused in the specification.
|
||
|
|
# The driver also ignores those fields.
|
||
|
|
|
||
|
|
# Console Ports can only be closed by removing the console port using a VIRTIO_CONSOLE_DEVICE_REMOVE message
|
||
|
|
# Why the specification of a device calls the control messages for adding and removing ports "*_DEVICE_*" instead of "*_PORT_*" is unclear
|
||
|
|
|
||
|
|
# In the current implementation of both driver and device, the VIRTIO_CONSOLE_PORT_OPEN does nothing except print
|
||
|
|
# some log messages. The specification also does not provide any insights into what the difference between opening a port and
|
||
|
|
# adding a device is. But it may be that DEVICE_ADD/REMOVE is meant to be used for managing the lifecycle of the device
|
||
|
|
# while PORT_OPEN/CLOSE is for managing sessions using a device/port combination.
|
||
|
|
|
||
|
|
# QEMU only uses one port by default, even with the multiport feature enabled. To test the multiport feature from QEMU
|
||
|
|
# CONFIG_QEMU_EXTRA_FLAGS can be used to add additional chardevs and virtconsole devices to the emulation. This can then be
|
||
|
|
# used with socat, picocom etc. to verify the other ports.
|
||
|
|
# A setup like this might be interesting for comparing advanced usage scenarios of the console with these tests.
|
||
|
|
|
||
|
|
*** Variables ***
|
||
|
|
${UART} sysbus.virtio_console
|
||
|
|
${DEVICE_ADDR} "0x4000a140"
|
||
|
|
${DEVICE_NAME} "virtio_console"
|
||
|
|
${SEED} 0x42424242
|
||
|
|
${BIN} https://dl.antmicro.com/projects/renode/zephyr-cortex_a53-virtio_mmio_console_test.elf-s_825904-3fa347e7d15d447de6756bf2613dbe959b737a00
|
||
|
|
|
||
|
|
*** Keywords ***
|
||
|
|
Create Machine
|
||
|
|
Execute Command mach create
|
||
|
|
Execute Command machine LoadPlatformDescription @platforms/boards/cortex_a53_console.repl
|
||
|
|
Execute Command sysbus LoadELF @${BIN}
|
||
|
|
Execute Command emulation SetSeed ${SEED}
|
||
|
|
Create Terminal Tester ${UART}
|
||
|
|
|
||
|
|
Wait For Init
|
||
|
|
Wait For Line On Uart console device doesn't work as expected:
|
||
|
|
Wait For Line On Uart Start typing characters to see them echoed back
|
||
|
|
|
||
|
|
Set Multiport
|
||
|
|
[Arguments] ${value}
|
||
|
|
Execute Command sysbus.virtio_console VirtioConsoleFeatureMultiport ${value}
|
||
|
|
|
||
|
|
Remove Port
|
||
|
|
[Arguments] ${port}
|
||
|
|
Execute Command sysbus.virtio_console RemoveDevice ${port}
|
||
|
|
|
||
|
|
Add Port
|
||
|
|
[Arguments] ${port}
|
||
|
|
Execute Command sysbus.virtio_console AddDevice ${port}
|
||
|
|
|
||
|
|
Make Console Port
|
||
|
|
[Arguments] ${port}
|
||
|
|
Execute Command sysbus.virtio_console MakeConsole ${port}
|
||
|
|
|
||
|
|
Change Host Input Port
|
||
|
|
[Arguments] ${port}
|
||
|
|
Execute Command sysbus.virtio_console ChangeUsedPort ${port}
|
||
|
|
|
||
|
|
Set Initial Port Number
|
||
|
|
[Arguments] ${numPorts}
|
||
|
|
Execute Command sysbus.virtio_console InitialOpenPortCount ${numPorts}
|
||
|
|
|
||
|
|
*** Test Cases ***
|
||
|
|
Should Receive Text from Driver
|
||
|
|
Create Machine
|
||
|
|
Set Multiport false
|
||
|
|
Wait For Init
|
||
|
|
|
||
|
|
Should Receive Text from Driver Multiport
|
||
|
|
Create Machine
|
||
|
|
Set Multiport true
|
||
|
|
Wait For Init
|
||
|
|
|
||
|
|
Should Echo Back Characters
|
||
|
|
Create Machine
|
||
|
|
Set Multiport false
|
||
|
|
Wait For Init
|
||
|
|
Write Line To Uart abcd
|
||
|
|
|
||
|
|
Should Echo Back Characters Multiport
|
||
|
|
Create Machine
|
||
|
|
Set Multiport true
|
||
|
|
Wait For Init
|
||
|
|
Write Line To Uart abcd
|
||
|
|
|
||
|
|
Create Multiple Devices
|
||
|
|
Create Machine
|
||
|
|
Set Multiport true
|
||
|
|
Set Initial Port Number 8
|
||
|
|
Wait For Init
|
||
|
|
Write Line To Uart abcd
|
||
|
|
|
||
|
|
Change Port And Echo Double
|
||
|
|
Create Machine
|
||
|
|
Set Multiport true
|
||
|
|
Wait For Init
|
||
|
|
Add Port 1
|
||
|
|
Make Console Port 1
|
||
|
|
Write Line To Uart abcd waitForEcho=false
|
||
|
|
Wait For Line On Uart aabbccdd
|
||
|
|
Remove Port 0
|
||
|
|
Change Host Input Port 1
|
||
|
|
Write Line To Uart xyz
|
||
|
|
|
||
|
|
Change Port And Echo Bug
|
||
|
|
Create Machine
|
||
|
|
Set Multiport true
|
||
|
|
Wait For Init
|
||
|
|
Add Port 1
|
||
|
|
Make Console Port 1
|
||
|
|
Remove Port 0
|
||
|
|
Change Host Input Port 1
|
||
|
|
Write Line To Uart xyz
|