[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 28/33] tests/acceptance/integratorcp: Verify Tux is displayed on f
From: |
Peter Maydell |
Subject: |
[PULL 28/33] tests/acceptance/integratorcp: Verify Tux is displayed on framebuffer |
Date: |
Fri, 28 Feb 2020 16:38:35 +0000 |
From: Philippe Mathieu-Daudé <address@hidden>
Add a test that verifies the Tux logo is displayed on the framebuffer.
We simply follow the OpenCV "Template Matching with Multiple Objects"
tutorial, replacing Lionel Messi by Tux:
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_ALLOW_UNTRUSTED_CODE=hmmm \
avocado --show=app,framebuffer run -t device:framebuffer \
tests/acceptance/machine_arm_integratorcp.py
JOB ID : 8c46b0f8269242e87d738247883ea2a470df949e
JOB LOG : avocado/job-results/job-2020-01-31T21.38-8c46b0f/job.log
(1/1)
tests/acceptance/machine_arm_integratorcp.py:IntegratorMachine.test_framebuffer_tux_logo:
framebuffer: found Tux at position [x, y] = (0, 0)
PASS (3.96 s)
RESULTS : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 |
CANCEL 0
JOB TIME : 4.23 s
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
Reviewed-by: Wainer dos Santos Moschetta <address@hidden>
Message-id: address@hidden
Message-Id: <address@hidden>
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
---
tests/acceptance/machine_arm_integratorcp.py | 52 ++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/tests/acceptance/machine_arm_integratorcp.py
b/tests/acceptance/machine_arm_integratorcp.py
index 22afd3b82a8..49c8ebff78b 100644
--- a/tests/acceptance/machine_arm_integratorcp.py
+++ b/tests/acceptance/machine_arm_integratorcp.py
@@ -9,11 +9,26 @@
# later. See the COPYING file in the top-level directory.
import os
+import logging
from avocado import skipUnless
from avocado_qemu import Test
from avocado_qemu import wait_for_console_pattern
+
+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 IntegratorMachine(Test):
timeout = 90
@@ -45,3 +60,40 @@ class IntegratorMachine(Test):
"""
self.boot_integratorcp()
wait_for_console_pattern(self, 'Log in as root')
+
+ @skipUnless(NUMPY_AVAILABLE, 'Python NumPy not installed')
+ @skipUnless(CV2_AVAILABLE, 'Python OpenCV not installed')
+ @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
+ def test_framebuffer_tux_logo(self):
+ """
+ Boot Linux and verify the Tux logo is displayed on the framebuffer.
+ :avocado: tags=arch:arm
+ :avocado: tags=machine:integratorcp
+ :avocado: tags=device:pl110
+ :avocado: tags=device:framebuffer
+ """
+ screendump_path = os.path.join(self.workdir, "screendump.pbm")
+ tuxlogo_url = ('https://github.com/torvalds/linux/raw/v2.6.12/'
+ 'drivers/video/logo/logo_linux_vga16.ppm')
+ tuxlogo_hash = '3991c2ddbd1ddaecda7601f8aafbcf5b02dc86af'
+ tuxlogo_path = self.fetch_asset(tuxlogo_url, asset_hash=tuxlogo_hash)
+
+ self.boot_integratorcp()
+ 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_count = 1
+ match_threshold = 0.92
+ screendump_bgr = cv2.imread(screendump_path)
+ screendump_gray = cv2.cvtColor(screendump_bgr, cv2.COLOR_BGR2GRAY)
+ result = cv2.matchTemplate(screendump_gray, cv2.imread(tuxlogo_path,
0),
+ cv2.TM_CCOEFF_NORMED)
+ loc = np.where(result >= match_threshold)
+ tux_count = 0
+ for tux_count, pt in enumerate(zip(*loc[::-1]), start=1):
+ logger.debug('found Tux at position [x, y] = %s', pt)
+ self.assertGreaterEqual(tux_count, cpu_count)
--
2.20.1
- [PULL 23/33] hw/arm/xilinx_zynq: Fix USB port instantiation, (continued)
- [PULL 23/33] hw/arm/xilinx_zynq: Fix USB port instantiation, Peter Maydell, 2020/02/28
- [PULL 30/33] target/arm: Implement v8.3-RCPC, Peter Maydell, 2020/02/28
- [PULL 05/33] cpu/a9mpcore: Set number of GIC priority bits to 5, Peter Maydell, 2020/02/28
- [PULL 20/33] target/arm: Add formats for some vfp 2 and 3-register insns, Peter Maydell, 2020/02/28
- [PULL 22/33] target/arm: Split VMINMAXNM decode, Peter Maydell, 2020/02/28
- [PULL 25/33] tests/acceptance: Add a test for the N800 and N810 arm machines, Peter Maydell, 2020/02/28
- [PULL 26/33] tests/acceptance: Add a test for the integratorcp arm machine, Peter Maydell, 2020/02/28
- [PULL 17/33] target/arm: Move the vfp decodetree calls next to the base isa, Peter Maydell, 2020/02/28
- [PULL 21/33] target/arm: Split VFM decode, Peter Maydell, 2020/02/28
- [PULL 27/33] tests/acceptance: Extract boot_integratorcp() from test_integratorcp(), Peter Maydell, 2020/02/28
- [PULL 28/33] tests/acceptance/integratorcp: Verify Tux is displayed on framebuffer,
Peter Maydell <=
- [PULL 33/33] hw/intc/arm_gic_kvm: Don't assume kernel can provide a GICv2, Peter Maydell, 2020/02/28
- [PULL 31/33] target/arm: Implement v8.4-RCPC, Peter Maydell, 2020/02/28
- [PULL 32/33] target/arm: Implement ARMv8.3-CCIDX, Peter Maydell, 2020/02/28
- [PULL 19/33] target/arm: Remove ARM_FEATURE_VFP*, Peter Maydell, 2020/02/28
- Re: [PULL 00/33] target-arm queue, Peter Maydell, 2020/02/28