qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Wainer dos Santos Moschetta <wainersm@redhat.com>
To: "Philippe Mathieu-Daudé" <philmd@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: Tue, 4 Feb 2020 14:57:57 -0200	[thread overview]
Message-ID: <da60e227-390f-9d40-3be2-3c0d55b89e64@redhat.com> (raw)
In-Reply-To: <3ba16ccb-108b-8721-2e04-b00630bcb7d5@redhat.com>


On 2/3/20 2:08 PM, Philippe Mathieu-Daudé wrote:
> 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.


ah, ok, I learned something new today. Thanks!

- Wainer

>
>>> +        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
>>
>>
>



      reply	other threads:[~2020-02-04 17:00 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é
2020-02-04 16:57       ` Wainer dos Santos Moschetta [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=da60e227-390f-9d40-3be2-3c0d55b89e64@redhat.com \
    --to=wainersm@redhat.com \
    --cc=crosa@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=kraxel@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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).