blob: d11d8271286792a3004fce5c472948de53ab1af1 [file] [log] [blame]
*** Settings ***
Suite Setup Custom Suite Setup
Suite Teardown Custom Suite Teardown
Library OperatingSystem
*** Variables ***
${UART} sysbus.uart0
${DRIVE} https://dl.antmicro.com/projects/renode/empty-ext4-filesystem.img-s_33554432-1eb65a808612389cc35a69b81178fbad5708a863
${FS} https://dl.antmicro.com/projects/renode/virtio-filesystem-passthrough_hp_uds-s_7318728-f7b60ce9b60c82cede19e798e81971663e1c0ad2
${SCRIPT_BLK} ${CURDIR}/../../scripts/single-node/hifive_unleashed.resc
${SCRIPT_FS} ${CURDIR}/../../tests/peripherals/virtio-vexriscv.resc
${INPUT} Quick Brown Fox Jumps Over the Lazy Dog
${PROMPT} #
${SOCK_FILE} libfuse-passthrough-hp.sock
${SOCK_PATH} ${TEMPDIR}${/}${SOCK_FILE}
${SHARED_FILE} testfile
${SHARED_DIR} shareddir
${VIRTIOFS_TAG} "MySharedDir"
${SYSTEM}= Evaluate platform.system() modules=platform
*** Keywords ***
Custom Suite Setup
Setup
${TEMP_DRIVE}= Download File ${DRIVE}
${DIR} ${FILE_NAME}= Split Path ${TEMP_DRIVE}
Copy File ${TEMP_DRIVE} ${TEMPDIR}
Set Suite Variable ${DRIVE_PATH} ${TEMPDIR}${/}${FILE_NAME}
${TEMP_FS}= Download File ${FS}
${DIR} ${FILE_NAME}= Split Path ${TEMP_FS}
Copy File ${TEMP_FS} ${TEMPDIR}
Set Suite Variable ${FS_PATH} ${TEMPDIR}${/}${FILE_NAME}
Run Process chmod +x ${FS_PATH}
Custom Suite Teardown
Remove File ${DRIVE_PATH}
Remove File ${FS_PATH}
Teardown
Create Machine VirtIOBlock
Execute Command $fdt=@https://dl.antmicro.com/projects/renode/virtio-hifive_unleashed.dtb-s_10640-08834542504afb748827fdca52515f156e971d5f
Execute Script ${SCRIPT_BLK}
Execute Command machine LoadPlatformDescriptionFromString 'virtioblk: Storage.VirtIOBlockDevice @ sysbus 0x100d0000 { IRQ -> plic@50 }'
Create Machine VirtIOFS
Execute Command $platform=@tests/peripherals/virtio-platform.repl
Execute Command $img=@https://dl.antmicro.com/projects/renode/virtio-filesystem-image-s_8448188-414604e8f64c41ebdbffe0f9ae7525c20bb1b124
Execute Command $dtb=@https://dl.antmicro.com/projects/renode/virtio-filesystem-rv32.dtb-s_1806-b2ad3ecaf517c6a6781d1cbb48eff6fca7972094
Execute Command $osbi=@https://dl.antmicro.com/projects/renode/litex_vexriscv_smp--opensbi.bin-s_45360-dcfe5f7b149bd1e0232609d87fb698f95f5e33c4
Execute Command $rootfs=@https://dl.antmicro.com/projects/renode/virtio-filesystem-rootfs.cpio-s_39962112-95a3591d189699f21b988b036a9843c882d8e42f
Execute Command $sock_path=@${SOCK_PATH}
Execute Command $virtiofs_tag=${VIRTIOFS_TAG}
Execute Script ${SCRIPT_FS}
Setup Machine VirtIOBlock
Wait For Prompt On Uart buildroot login:
Write Line To Uart root
Wait For Prompt On Uart Password:
Write Line To Uart root waitForEcho=false
Wait For Prompt On Uart ${PROMPT}
Execute Command virtioblk LoadImage @${DRIVE_PATH} true
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart dmesg -n 1
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart mkdir /mnt/drive
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart mount /dev/vda /mnt/drive
Wait For Prompt On Uart ${PROMPT}
Setup Machine VirtIOFS
Wait For Prompt On Uart buildroot login:
Write Line To Uart root
Wait For Line On Uart root login on 'console'
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart mkdir ${SHARED_DIR}
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart mount -t virtiofs ${VIRTIOFS_TAG} ${SHARED_DIR}
Wait For Prompt On Uart ${PROMPT}
Setup Shared Directory
Create Directory ${SHARED_DIR}
Create File ${SHARED_DIR}/${SHARED_FILE} ${INPUT}
*** Test Cases ***
Read Shared Directory
[Tags] skip_windows skip_osx
# Unix domain sockets
Setup Shared Directory
${FS_PROCESS}= Start Process ${FS_PATH} ${SHARED_DIR} --socket ${SOCK_PATH}
Create Machine VirtIOFS
Create Terminal Tester ${UART}
Start Emulation
Setup Machine VirtIOFS
Write Line To Uart ls -al ${SHARED_DIR}
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart cat ${SHARED_DIR}/${SHARED_FILE}
Wait For Prompt On Uart ${INPUT}
Sleep 5s
Terminate Process ${FS_PROCESS} kill=true
Run Process rm ${SOCK_PATH}
Should Boot
Create Machine VirtIOBlock
Create Terminal Tester ${UART}
Start Emulation
Setup Machine VirtIOBlock
Write Line To Uart echo ${INPUT} > /mnt/drive/file
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart cat /mnt/drive/file
Wait For Line On Uart ${INPUT}
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart umount /dev/vda
Wait For Prompt On Uart ${PROMPT}
# We encountered data corruption when closing the emulation right after `umount`.
# Although `umount` should wait for all write operations on the device to finish, we noticed writes even after the prompt in bash is printed.
# Surprisingly even using `sync; sync` doesn't help here.
# As a workaround let's include sleep, but this should be fixed later.
Sleep 5s
Should Be Persistent
Create Machine VirtIOBlock
Create Terminal Tester ${UART}
Start Emulation
Setup Machine VirtIOBlock
Write Line To Uart cat /mnt/drive/file
Wait For Line On Uart ${INPUT}
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart umount /dev/vda
Wait For Prompt On Uart ${PROMPT}