From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: "Aleksandar Markovic" <aleksandar.m.mail@gmail.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Cc: Eduardo Habkost <ehabkost@redhat.com>,
Thomas Huth <huth@tuxfamily.org>,
Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
QEMU Developers <qemu-devel@nongnu.org>,
Wainer dos Santos Moschetta <wainersm@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
"open list:Stellaris" <qemu-arm@nongnu.org>,
Gerd Hoffmann <kraxel@redhat.com>,
Aleksandar Markovic <amarkovic@wavecomp.com>,
Cleber Rosa <crosa@redhat.com>,
Leon Alrae <leon.alrae@imgtec.com>,
Aurelien Jarno <aurelien@aurel32.net>,
Laurent Vivier <laurent@vivier.eu>
Subject: Re: [PATCH] tests/acceptance: Count multiple Tux logos displayed on framebuffer
Date: Mon, 24 Feb 2020 22:00:48 +0100 [thread overview]
Message-ID: <65cb0397-baea-e18b-c549-c05efe55ecc1@redhat.com> (raw)
In-Reply-To: <CAL1e-=jqy1bcY-bt0hFxn+X_FQ095kqa__hRMUV1Bs0FjG8SiQ@mail.gmail.com>
Hi Aleksandar,
On 2/24/20 9:54 PM, Aleksandar Markovic wrote:
> On Sat, Feb 1, 2020 at 9:48 PM Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:
>>
>> Add a test that verifies that each core properly displays the Tux
>> logo on the framebuffer device.
>>
>
> Philippe,
>
> I would like to select this patch for the next MIPS queue, scheduled
> in next few days.
>
> It looks to me there are no prerequisites for this patch to be applied
> on current master, but I may be wrong. Philippe, is this correct or
> not (selecting the patch for the queue independently on other similar
> or any other patches not yet in master)?
You are correct, there are no prerequisites.
If you want to quickly run a SMP test with:
"avocado --show=app run -t mips:smp tests/acceptance"
(see below...)
>
> Thanks again!
> Aleksandar
>
>
>> 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 --show=app,framebuffer \
>> run -t cpu:i6400 \
>> tests/acceptance/machine_mips_malta.py
>> JOB ID : 54f3d8efd8674f289b8aa01a87f5d70c5814544c
>> JOB LOG : avocado/job-results/job-2020-02-01T20.52-54f3d8e/job.log
>> (1/3) tests/acceptance/machine_mips_malta.py:MaltaMachineFramebuffer.test_mips_malta_i6400_framebuffer_logo_1core:
>> framebuffer: found Tux at position (x, y) = (0, 0)
>> PASS (3.37 s)
>> (2/3) tests/acceptance/machine_mips_malta.py:MaltaMachineFramebuffer.test_mips_malta_i6400_framebuffer_logo_7cores:
>> framebuffer: found Tux at position (x, y) = (0, 0)
>> framebuffer: found Tux at position (x, y) = (88, 0)
>> framebuffer: found Tux at position (x, y) = (176, 0)
>> framebuffer: found Tux at position (x, y) = (264, 0)
>> framebuffer: found Tux at position (x, y) = (352, 0)
>> framebuffer: found Tux at position (x, y) = (440, 0)
>> framebuffer: found Tux at position (x, y) = (528, 0)
>> PASS (5.80 s)
>> (3/3) tests/acceptance/machine_mips_malta.py:MaltaMachineFramebuffer.test_mips_malta_i6400_framebuffer_logo_8cores:
>> framebuffer: found Tux at position (x, y) = (0, 0)
>> framebuffer: found Tux at position (x, y) = (88, 0)
>> framebuffer: found Tux at position (x, y) = (176, 0)
>> framebuffer: found Tux at position (x, y) = (264, 0)
>> framebuffer: found Tux at position (x, y) = (352, 0)
>> framebuffer: found Tux at position (x, y) = (440, 0)
>> framebuffer: found Tux at position (x, y) = (528, 0)
>> framebuffer: found Tux at position (x, y) = (616, 0)
>> PASS (6.67 s)
>> RESULTS : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
>> JOB TIME : 16.79 s
>>
>> If the AVOCADO_CV2_SCREENDUMP_PNG_PATH environment variable is set, the
>> test will save the screenshot with matched squares to it.
>>
>> Test inspired by the following post:
>> https://www.mips.com/blog/how-to-run-smp-linux-in-qemu-on-a-mips64-release-6-cpu/
>> Kernel built with the following Docker file:
>> https://github.com/philmd/qemu-testing-blob/blob/malta_i6400/mips/malta/mips64el/Dockerfile
>>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> The resulting match can be visualised at https://pasteboard.co/ISIj6ZA.png
>> Generated using:
>>
>> $ AVOCADO_CV2_SCREENDUMP_PNG_PATH=/tmp/screendump_matched.png \
>> avocado --show=app run -t cpu:i6400 \
>> tests/acceptance/machine_mips_malta.py
>> JOB ID : 54f3d8efd8674f289b8aa01a87f5d70c5814544c
>> JOB LOG : avocado/job-results/job-2020-02-01T20.52-54f3d8e/job.log
>> (1/3) tests/acceptance/machine_mips_malta.py:MaltaMachineFramebuffer.test_mips_malta_i6400_framebuffer_logo_1core: PASS (3.37 s)
>> (2/3) tests/acceptance/machine_mips_malta.py:MaltaMachineFramebuffer.test_mips_malta_i6400_framebuffer_logo_7cores: PASS (5.80 s)
>> (3/3) tests/acceptance/machine_mips_malta.py:MaltaMachineFramebuffer.test_mips_malta_i6400_framebuffer_logo_8cores: PASS (6.67 s)
>> RESULTS : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
>> JOB TIME : 16.79 s
>> ---
>> MAINTAINERS | 1 +
>> tests/acceptance/machine_mips_malta.py | 116 +++++++++++++++++++++++++
>> 2 files changed, 117 insertions(+)
>> create mode 100644 tests/acceptance/machine_mips_malta.py
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 4ceb1ad882..65a3dfb564 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -983,6 +983,7 @@ F: hw/mips/mips_malta.c
>> F: hw/mips/gt64xxx_pci.c
>> F: include/hw/southbridge/piix.h
>> F: tests/acceptance/linux_ssh_mips_malta.py
>> +F: tests/acceptance/machine_mips_malta.py
>>
>> Mipssim
>> M: Aleksandar Markovic <amarkovic@wavecomp.com>
>> diff --git a/tests/acceptance/machine_mips_malta.py b/tests/acceptance/machine_mips_malta.py
>> new file mode 100644
>> index 0000000000..2764143d15
>> --- /dev/null
>> +++ b/tests/acceptance/machine_mips_malta.py
>> @@ -0,0 +1,116 @@
>> +# Functional tests for the MIPS Malta board
>> +#
>> +# Copyright (c) Philippe Mathieu-Daudé <f4bug@amsat.org>
>> +#
>> +# This work is licensed under the terms of the GNU GPL, version 2 or later.
>> +# See the COPYING file in the top-level directory.
>> +#
>> +# SPDX-License-Identifier: GPL-2.0-or-later
>> +
>> +import os
>> +import gzip
>> +import logging
>> +
>> +from avocado import skipUnless
>> +from avocado_qemu import Test
>> +from avocado_qemu import wait_for_console_pattern
>> +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
>> +
>> +
>> +@skipUnless(NUMPY_AVAILABLE, 'Python NumPy not installed')
>> +@skipUnless(CV2_AVAILABLE, 'Python OpenCV not installed')
>> +class MaltaMachineFramebuffer(Test):
>> +
>> + timeout = 30
>> +
>> + KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
>> +
>> + def do_test_i6400_framebuffer_logo(self, cpu_cores_count):
>> + """
>> + Boot Linux kernel and check Tux logo is displayed on the framebuffer.
>> + """
>> + screendump_path = os.path.join(self.workdir, 'screendump.pbm')
>> +
>> + kernel_url = ('https://github.com/philmd/qemu-testing-blob/raw/'
>> + 'a5966ca4b5/mips/malta/mips64el/'
>> + 'vmlinux-4.7.0-rc1.I6400.gz')
>> + kernel_hash = '096f50c377ec5072e6a366943324622c312045f6'
>> + kernel_path_gz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
>> + kernel_path = self.workdir + "vmlinux"
>> + archive.gzip_uncompress(kernel_path_gz, kernel_path)
>> +
>> + 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.vm.set_console()
>> + kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
>> + 'clocksource=GIC console=tty0 console=ttyS0')
>> + self.vm.add_args('-kernel', kernel_path,
>> + '-cpu', 'I6400',
>> + '-smp', '%u' % cpu_cores_count,
>> + '-vga', 'std',
>> + '-append', kernel_command_line)
>> + self.vm.launch()
>> + framebuffer_ready = 'Console: switching to colour frame buffer device'
>> + wait_for_console_pattern(self, framebuffer_ready,
>> + failure_message='Kernel panic - not syncing')
>> + 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')
>> +
>> + match_threshold = 0.95
>> + screendump_bgr = cv2.imread(screendump_path, cv2.IMREAD_COLOR)
>> + tuxlogo_bgr = cv2.imread(tuxlogo_path, cv2.IMREAD_COLOR)
>> + result = cv2.matchTemplate(screendump_bgr, tuxlogo_bgr,
>> + cv2.TM_CCOEFF_NORMED)
>> + loc = np.where(result >= match_threshold)
>> + tuxlogo_count = 0
>> + h, w = tuxlogo_bgr.shape[:2]
>> + debug_png = os.getenv('AVOCADO_CV2_SCREENDUMP_PNG_PATH')
>> + for tuxlogo_count, pt in enumerate(zip(*loc[::-1]), start=1):
>> + logger.debug('found Tux at position (x, y) = %s', pt)
>> + cv2.rectangle(screendump_bgr, pt,
>> + (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
>> + if debug_png:
>> + cv2.imwrite(debug_png, screendump_bgr)
>> + self.assertGreaterEqual(tuxlogo_count, cpu_cores_count)
>> +
>> + def test_mips_malta_i6400_framebuffer_logo_1core(self):
>> + """
>> + :avocado: tags=arch:mips64el
>> + :avocado: tags=machine:malta
>> + :avocado: tags=cpu:i6400
>> + """
>> + self.do_test_i6400_framebuffer_logo(1)
>> +
>> + def test_mips_malta_i6400_framebuffer_logo_7cores(self):
>> + """
>> + :avocado: tags=arch:mips64el
>> + :avocado: tags=machine:malta
>> + :avocado: tags=cpu:i6400
You might want to add this tag here (or similar):
:avocado: tags=mips:smp
>> + """
>> + self.do_test_i6400_framebuffer_logo(7)
>> +
>> + def test_mips_malta_i6400_framebuffer_logo_8cores(self):
>> + """
>> + :avocado: tags=arch:mips64el
>> + :avocado: tags=machine:malta
>> + :avocado: tags=cpu:i6400
And here:
:avocado: tags=mips:smp
Anyway we can add that later.
Regards,
Phil.
>> + """
>> + self.do_test_i6400_framebuffer_logo(8)
>> --
>> 2.21.1
>>
>>
>
prev parent reply other threads:[~2020-02-24 21:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-01 20:47 [PATCH] tests/acceptance: Count multiple Tux logos displayed on framebuffer Philippe Mathieu-Daudé
2020-02-01 20:58 ` Aleksandar Markovic
2020-02-01 22:16 ` Philippe Mathieu-Daudé
2020-02-18 18:07 ` Aleksandar Markovic
2020-02-18 18:11 ` Philippe Mathieu-Daudé
2020-02-18 19:10 ` Aleksandar Markovic
2020-02-24 20:54 ` Aleksandar Markovic
2020-02-24 21:00 ` Philippe Mathieu-Daudé [this message]
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=65cb0397-baea-e18b-c549-c05efe55ecc1@redhat.com \
--to=philmd@redhat.com \
--cc=aleksandar.m.mail@gmail.com \
--cc=amarkovic@wavecomp.com \
--cc=aurelien@aurel32.net \
--cc=crosa@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=f4bug@amsat.org \
--cc=huth@tuxfamily.org \
--cc=kraxel@redhat.com \
--cc=laurent@vivier.eu \
--cc=leon.alrae@imgtec.com \
--cc=mark.cave-ayland@ilande.co.uk \
--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).