[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 28/30] tests/acceptance: Count Raspberry Pi logos displayed on
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH v2 28/30] tests/acceptance: Count Raspberry Pi logos displayed on framebuffer |
Date: |
Thu, 6 Feb 2020 02:17:54 +0100 |
Add a test that verifies that each core properly displays the
Raspberry Pi logo on the framebuffer device.
We simply follow the OpenCV "Template Matching with Multiple Objects"
tutorial, replacing Lionel Messi by a raspberrry:
https://docs.opencv.org/4.2.0/d4/dc6/tutorial_py_template_matching.html
When OpenCV and NumPy are installed, this test can be run using:
$ avocado --show=app,framebuffer run -t device:bcm2835-fb tests/acceptance/
JOB ID : 9bbbc54c0a6fa180348d0b5305507f76852b4da2
JOB LOG : avocado/job-results/job-2020-01-31T23.48-9bbbc54/job.log
(1/1)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_raspi2_framebuffer_logo:
framebuffer: found raspberry at position (x, y) = (0, 0)
framebuffer: found raspberry at position (x, y) = (71, 0)
framebuffer: found raspberry at position (x, y) = (142, 0)
framebuffer: found raspberry at position (x, y) = (213, 0)
PASS (11.06 s)
RESULTS : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 |
CANCEL 0
JOB TIME : 11.39 s
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
---
The resulting match can be visualised at https://pasteboard.co/ISzNHtx.png
Cc: address@hidden
---
tests/acceptance/boot_linux_console.py | 62 ++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/tests/acceptance/boot_linux_console.py
b/tests/acceptance/boot_linux_console.py
index 7210acd977..33d39d8292 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -12,6 +12,7 @@ import os
import lzma
import gzip
import shutil
+import logging
from avocado import skipUnless
from avocado_qemu import Test
@@ -21,6 +22,19 @@ from avocado.utils import process
from avocado.utils import archive
+NUMPY_AVAILABLE = True
+try:
+ import numpy as np
+except ImportError:
+ NUMPY_AVAILABLE = False
+
+CV2_AVAILABLE = True
+try:
+ import cv2
+except ImportError:
+ CV2_AVAILABLE = False
+
+
class BootLinuxConsole(Test):
"""
Boots a Linux kernel and checks that the console is operational and the
@@ -428,6 +442,54 @@ class BootLinuxConsole(Test):
"""
self.do_test_arm_raspi(2, 'bcm2835_aux')
+ @skipUnless(NUMPY_AVAILABLE, 'Python NumPy not installed')
+ @skipUnless(CV2_AVAILABLE, 'Python OpenCV not installed')
+ def test_arm_raspi2_framebuffer_logo(self):
+ """
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:raspi2
+ :avocado: tags=device:bcm2835-fb
+ """
+ screendump_path = os.path.join(self.workdir, 'screendump.pbm')
+ rpilogo_url = ('https://github.com/raspberrypi/linux/raw/'
+ 'raspberrypi-kernel_1.20190517-1/'
+ 'drivers/video/logo/logo_linux_clut224.ppm')
+ rpilogo_hash = 'fff3cc20c6030acce0953147f9baac43f44ed6b0'
+ rpilogo_path = self.fetch_asset(rpilogo_url, asset_hash=rpilogo_hash)
+ deb_url = ('http://archive.raspberrypi.org/debian/'
+ 'pool/main/r/raspberrypi-firmware/'
+ 'raspberrypi-kernel_1.20190215-1_armhf.deb')
+ deb_hash = 'cd284220b32128c5084037553db3c482426f3972'
+ deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
+ kernel_path = self.extract_from_deb(deb_path, '/boot/kernel7.img')
+ dtb_path = self.extract_from_deb(deb_path, '/boot/bcm2709-rpi-2-b.dtb')
+
+ self.vm.set_console()
+ kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+ 'earlycon=pl011,0x3f201000 console=ttyAMA0')
+ self.vm.add_args('-kernel', kernel_path,
+ '-dtb', dtb_path,
+ '-append', kernel_command_line)
+ self.vm.launch()
+ framebuffer_ready = 'Console: switching to colour frame buffer device'
+ wait_for_console_pattern(self, framebuffer_ready)
+ self.vm.command('human-monitor-command', command_line='stop')
+ self.vm.command('human-monitor-command',
+ command_line='screendump %s' % screendump_path)
+ logger = logging.getLogger('framebuffer')
+
+ cpu_cores_count = 4
+ match_threshold = 0.95
+ screendump_bgr = cv2.imread(screendump_path, cv2.IMREAD_COLOR)
+ rpilogo_bgr = cv2.imread(rpilogo_path, cv2.IMREAD_COLOR)
+ result = cv2.matchTemplate(screendump_bgr, rpilogo_bgr,
+ cv2.TM_CCOEFF_NORMED)
+ loc = np.where(result >= match_threshold)
+ rpilogo_count = 0
+ for rpilogo_count, pt in enumerate(zip(*loc[::-1]), start=1):
+ logger.debug('found raspberry at position (x, y) = %s', pt)
+ self.assertGreaterEqual(rpilogo_count, cpu_cores_count)
+
def test_arm_exynos4210_initrd(self):
"""
:avocado: tags=arch:arm
--
2.21.1
- [PATCH v2 20/30] hw/arm/raspi: Add the Raspberry Pi Zero machine, (continued)
- [PATCH v2 20/30] hw/arm/raspi: Add the Raspberry Pi Zero machine, Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 21/30] hw/arm/raspi: Add the Raspberry Pi B+ machine, Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 24/30] tests/acceptance/boot_linux_console: Test the raspi1 console, Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 23/30] tests/acceptance/boot_linux_console: Add raspi version=2 parameter, Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 22/30] tests/acceptance/boot_linux_console: Use raspi console model as key, Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 25/30] tests/acceptance/boot_linux_console: Test the raspi0 console, Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 26/30] python/qemu/machine: Allow to use other serial consoles than default, Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 27/30] tests/acceptance/boot_linux_console: Test the raspi1 AUX console, Philippe Mathieu-Daudé, 2020/02/05
- [NOTFORMERGE PATCH v2 30/30] hw/arm/raspi: Add the Raspberry Pi 4, Philippe Mathieu-Daudé, 2020/02/05
- [NOTFORMERGE PATCH v2 29/30] hw/arm/bcm2836: Add the BCM2838 (ARMv8), Philippe Mathieu-Daudé, 2020/02/05
- [PATCH v2 28/30] tests/acceptance: Count Raspberry Pi logos displayed on framebuffer,
Philippe Mathieu-Daudé <=