From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: "Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
qemu-devel@nongnu.org
Cc: Cleber Rosa <crosa@redhat.com>,
qemu-arm@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [PATCH 1/1] tests/acceptance: Count Raspberry Pi logos displayed on framebuffer
Date: Mon, 3 Feb 2020 17:08:00 +0100 [thread overview]
Message-ID: <3ba16ccb-108b-8721-2e04-b00630bcb7d5@redhat.com> (raw)
In-Reply-To: <ad5d50ff-acc8-247f-74d9-7854605baaca@redhat.com>
On 2/3/20 3:21 PM, Wainer dos Santos Moschetta wrote:
> On 1/31/20 9:24 PM, Philippe Mathieu-Daudé wrote:
>> 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é <f4bug@amsat.org>
>> ---
>> The resulting match can be visualised at
>> https://pasteboard.co/ISzNHtx.png
>> ---
>> 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 e40b84651b..4e69a83a12 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
>> +
>> +
>
>
> Those Python packages are only needed by this new test case, and the
> test is likely to be moved to a separate file soon. So I suggest to put
> those availability checks inside the test method, so easing the future
> removal. And use self.cancel() to cancel the test (if the case).
Yes I'll move (actually the series is ready, I'll add this on top).
>
>
>> class BootLinuxConsole(Test):
>> """
>> Boots a Linux kernel and checks that the console is operational
>> and the
>> @@ -360,6 +374,54 @@ class BootLinuxConsole(Test):
>> """
>> self.do_test_arm_raspi2(0)
>> + @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
>
>
> Won't this fail if host cpu cores are less than 4?
This count the TCG vCPU guest emulated by QEMU, and are not related to
the host cores.
I.E. you can run this test on a single-core powerpc host cpu, QEMU will
instantiate 4 virtual cores for the raspberry pi.
Also, the Raspberry Pi 2/3 machines are forced to 4 cores, because they
only run a certain type of system-on-chip which has 4 cores built-in.
>> + 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
>
>
next prev parent reply other threads:[~2020-02-03 16:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-31 23:24 [PATCH 0/1] tests/acceptance: Count Raspberry Pi logos displayed on framebuffer Philippe Mathieu-Daudé
2020-01-31 23:24 ` [PATCH 1/1] " Philippe Mathieu-Daudé
2020-02-03 14:21 ` Wainer dos Santos Moschetta
2020-02-03 15:48 ` Eduardo Habkost
2020-02-03 16:08 ` Philippe Mathieu-Daudé [this message]
2020-02-04 16:57 ` Wainer dos Santos Moschetta
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3ba16ccb-108b-8721-2e04-b00630bcb7d5@redhat.com \
--to=philmd@redhat.com \
--cc=crosa@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=f4bug@amsat.org \
--cc=kraxel@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=wainersm@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).