Commit 7f0af11cee (support/testing/tests/package/test_flutter.py: new
runtime test) added a simple test that just checked that the systemd
unit launching the application, was active.
It is perfectly possible, from a systemd perspective, that the unit is
active, while the application actually crashes.
Instead, what we need to check, is that the application does actually
render "something"; we don't really care what, as long as we know it is
actually rendering, thus the graphical stack is working and the
aplication stack is running.
Extend the flutter runtime test to also check that the framebuffer is
modified by the application when it is running, similarly to what we do
in the weston test.
We drop the activation of the unit and start it manually, as we want to
check the state of the CRC before, while, and after the application
runs.
We also need to disable the blinking cursor on the console, or we would
not be able to detect whether a change in CRC is due to the application
starting rendering, or to the cursor blinking. We tell the kernel to
disable the cursor with the appropriate kernel command line parameter.
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Reviewed-by: Adam Duskett <aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
79 lines
3.1 KiB
Python
79 lines
3.1 KiB
Python
import os
|
|
import time
|
|
import infra.basetest
|
|
|
|
from ..graphics_base import GraphicsBase
|
|
|
|
|
|
class TestFlutter(infra.basetest.BRTest, GraphicsBase):
|
|
config = f"""
|
|
BR2_aarch64=y
|
|
BR2_TOOLCHAIN_EXTERNAL=y
|
|
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
|
|
BR2_ROOTFS_OVERLAY="{infra.filepath("tests/package/test_flutter/overlay")}"
|
|
BR2_PER_PACKAGE_DIRECTORIES=y
|
|
BR2_INIT_SYSTEMD=y
|
|
BR2_LINUX_KERNEL=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
|
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.54"
|
|
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
|
BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
|
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
|
|
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{infra.filepath("tests/package/test_flutter/linux-vkms.fragment")}"
|
|
BR2_PACKAGE_LIBDRM=y
|
|
BR2_PACKAGE_MESA3D=y
|
|
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST=y
|
|
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_VIRGL=y
|
|
BR2_PACKAGE_MESA3D_OPENGL_ES=y
|
|
BR2_PACKAGE_FLUTTER_PI=y
|
|
BR2_PACKAGE_FLUTTER_PI_RAW_KEYBOARD_PLUGIN=y
|
|
BR2_PACKAGE_FLUTTER_PI_TEXT_INPUT_PLUGIN=y
|
|
BR2_PACKAGE_FLUTTER_PACKAGES=y
|
|
BR2_PACKAGE_FLUTTER_MARKDOWN_EXAMPLE=y
|
|
BR2_PACKAGE_FLUTTER_ENGINE=y
|
|
BR2_TARGET_ROOTFS_EXT2=y
|
|
BR2_TARGET_ROOTFS_EXT2_4=y
|
|
BR2_TARGET_ROOTFS_EXT2_SIZE="512M"
|
|
# BR2_TARGET_ROOTFS_TAR is not set
|
|
"""
|
|
|
|
def test_run(self):
|
|
img = os.path.join(self.builddir, "images", "rootfs.ext2")
|
|
kern = os.path.join(self.builddir, "images", "Image")
|
|
self.emulator.boot(
|
|
arch="aarch64",
|
|
kernel=kern,
|
|
kernel_cmdline=["root=/dev/vda console=ttyAMA0 vt.global_cursor_default=0"],
|
|
options=["-M", "virt",
|
|
"-cpu", "cortex-a57",
|
|
"-m", "512M",
|
|
"-smp", "4",
|
|
"-vga", "std",
|
|
"-vnc", "none",
|
|
"-drive", f"file={img},if=virtio,format=raw"])
|
|
self.emulator.login()
|
|
|
|
# Get the CRC from the current ramebuffer
|
|
empty_crc = self.get_n_fb_crc(count=1)[0]
|
|
|
|
# Start the example App. It can take a bit of time to start,
|
|
# so lets try a few times. 600 samples should cover about 10s
|
|
# @60Hz (although, the rendering could be much slower on slow
|
|
# machines)
|
|
self.assertRunOk("systemctl start flutter-markdown-example", timeout=10)
|
|
for i in range(600):
|
|
gallery_crc = self.get_n_fb_crc(count=1)[0]
|
|
if gallery_crc != empty_crc:
|
|
break
|
|
time.sleep(1)
|
|
self.assertNotEqual(gallery_crc, empty_crc, "gallery app did not render anything on screen")
|
|
|
|
# Stop the application, and check it restored the framebuffer content
|
|
self.assertRunOk("systemctl stop flutter-markdown-example", timeout=10)
|
|
for i in range(600):
|
|
gallery_crc = self.get_n_fb_crc(count=1)[0]
|
|
if gallery_crc == empty_crc:
|
|
break
|
|
time.sleep(1)
|
|
self.assertEqual(gallery_crc, empty_crc, "gallery app did not stop rendering")
|