import os import infra.basetest class TestPythonPyQt5(infra.basetest.BRTest): # We use a specific configuration for: # - using Aarch64, to have more than 256MB memory, # - using a kernel config fragment, to enable VKMS, # - to have an ext4 rootfs image exposed as a virtio storage # (rather than cpio initrd). This will save some memory, as the # rootfs image is big. kernel_fragment = \ infra.filepath("tests/package/test_python_pyqt5/linux-vkms.fragment") rootfs_overlay = \ infra.filepath("tests/package/test_python_pyqt5/rootfs-overlay") config = \ f""" BR2_aarch64=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.81" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config" BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{kernel_fragment}" BR2_PACKAGE_DEJAVU=y BR2_PACKAGE_LIBDRM=y BR2_PACKAGE_MESA3D=y BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SOFTPIPE=y BR2_PACKAGE_MESA3D_LLVM=y BR2_PACKAGE_MESA3D_OPENGL_EGL=y BR2_PACKAGE_MESA3D_OPENGL_ES=y BR2_PACKAGE_PYTHON3=y BR2_PACKAGE_PYTHON_PYQT5=y BR2_PACKAGE_QT5=y BR2_PACKAGE_QT5BASE_EGLFS=y BR2_PACKAGE_QT5BASE_FONTCONFIG=y BR2_PACKAGE_QT5BASE_WIDGETS=y BR2_ROOTFS_OVERLAY="{rootfs_overlay}" BR2_TARGET_ROOTFS_EXT2=y BR2_TARGET_ROOTFS_EXT2_4=y BR2_TARGET_ROOTFS_EXT2_SIZE="256M" # BR2_TARGET_ROOTFS_TAR is not set """ def test_run(self): drive = os.path.join(self.builddir, "images", "rootfs.ext4") kern = os.path.join(self.builddir, "images", "Image") self.emulator.boot(arch="aarch64", kernel=kern, kernel_cmdline=["root=/dev/vda console=ttyAMA0"], options=["-M", "virt", "-cpu", "cortex-a57", "-m", "512M", "-drive", f"file={drive},if=virtio,format=raw"]) self.emulator.login() # We run the test application with a customized message. # NOTE: to manually debug this test, a Qemu emulator with # virtio-gpu can be used by starting it the command line from # the run log generated by this test, and by adding the # arguments "-device virtio-gpu -display gtk". With this, the # test application will be observable on the Qemu window. Once # logged, we can use the "card1" DRM/KMS device (virtio-gpu, # instead of card0, which is vkms on "card0") by using the # command: # echo '{"device":"/dev/dri/card1"}' > cfg.json # export QT_QPA_EGLFS_KMS_CONFIG="$PWD/cfg.json" # The Qt debug can also be enabled with the command: # export QT_LOGGING_RULES=*=true # Then, run the /root/pyqt5test.py application. msg = "Hello Buildroot." cmd = f'/root/pyqt5test.py "{msg}"' self.assertRunOk(cmd, timeout=30) # We check the test message is present in the file created by # the previous application execution. cmd = f'grep -F "{msg}" /root/message.txt' self.assertRunOk(cmd)