[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] tests/acceptance: Add tests for the Pegasos2 machine
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH] tests/acceptance: Add tests for the Pegasos2 machine |
Date: |
Wed, 14 Jul 2021 11:37:54 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
Hi Cleber,
On 7/13/21 3:43 AM, Cleber Rosa wrote:
> From: Philippe Mathieu-Daudé <f4bug@amsat.org>
>
> Add a pair of tests for the Pegasos2 machine following the steps from:
> https://lists.nongnu.org/archive/html/qemu-devel/2021-01/msg01553.html
>
> $ AVOCADO_ALLOW_UNTRUSTED_CODE=1 avocado --show=app,console,tesseract \
> run -t machine:pegasos2 tests/acceptance/
> (1/2)
> tests/acceptance/machine_ppc_pegasos.py:PPCPegasos2.test_rom_serial_console:
> console: PegasosII Boot Strap (c) 2002-2003 bplan GmbH
> console: Running on CPU PVR:000C0209
> console: Enable L1 ICache...
> Done.
> console: Reading W83194 :
> FAILED.
> console: Setting Front Side Bus to 133MHz...
> FAILED.
> console: Configuring DDR...
> Done.
> console: Configuring PCI0...
> Done.
> console: Configuring PCI1...
> Done.
> console: Configuring ETH...
> Done.
> console: Releasing IDE reset ...
> Done.
> console: Configuring Legacy Devices
> console: Initializing KBD...
> Done.
> console: Testing 10000000 Bytes, Pass: 00000000 Failed: 00000000
> console: RAM TEST (fill linear)...
> Done.
> console: FFFFFFFF
> console: SmartFirmware:
> console: cpu0: PowerPC,G4 CPUClock 599 Mhz BUSClock 133 Mhz (Version
> 0x000C,0x0209)
> console: no/bad nvramrc - performing default startup script
> console: channel 1 unit 0 : atapi | QEMU DVD-ROM
> | 2.5+
> console: ATA device not present or not responding
> console: Welcome to SmartFirmware(tm) for bplan Pegasos2 version 1.1
> (20040405172512)
> PASS (5.23 s)
> (2/2)
> tests/acceptance/machine_ppc_pegasos.py:PPCPegasos2.test_morphos_cdrom_vga:
> ...
> console: Welcome to SmartFirmware(tm) for bplan Pegasos2 version 1.1
> (20040405172512)
> console: SmartFirmware(tm) Copyright 1996-2001 by CodeGen, Inc.
> console: All Rights Reserved.
> console: Pegasos BIOS Extensions Copyright 2001-2003 by bplan GmbH.
> console: All Rights Reserved.
> console: entering main read/eval loop...
> console: ok boot cd boot.img
> console: ISO-9660 filesystem: System-ID: "MORPHOS" Volume-ID:
> "MorphOSBoot"
> console: " flags=0x2 extent=0x20 size=0x1800
> console: Memory used before SYS_Init: 9MB
> console: PCI ATA/ATAPI Driver@2: PIO Mode 4
> console: PCI ATA/ATAPI Driver@2: UDMA Mode 5
> console: ide.device@2: QEMU QEMU DVD-ROM <CDROM>
> console: ide.device@2: CDRom <CD001>,<MORPHOS > found, bootable
> tesseract: Ambient Screen 4: Saturday, 15 May 2021, 13:36:06 &
> tesseract: keymap
> tesseract: Albanian keyboard with 101/104 keys
> tesseract: ‘American keyboard with Greek input extension, 105 keys
> tesseract: Belarusian keyboard with 105 keys
> tesseract: Belgian keyboard with 105 keys J
> tesseract: British Apple keyboard
> tesseract: British keyboard with 105 keys
> tesseract: Bulgarian keyboard with 104 keys
> tesseract: Canadian keyboard with 105 keys
> tesseract: Colemak layout for keyboards with 101/104 keys
> tesseract: Croatian keyboard with 101/108 keys
> tesseract: Czech keyboard (QWERTY) with 101/104 keys
> tesseract: Czech keyboard (QWERTZ) with 101/104 keys
> tesseract: Danish keyboard with 105 keys
> PASS (28.56 s)
> RESULTS : PASS 2 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 |
> CANCEL 0
> JOB TIME : 34.42 s
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> Signed-off-by: Cleber Rosa <crosa@redhat.com>
> ---
So this is v2.
Here would be nice to have the list of changes.
> tests/acceptance/machine_ppc_pegasos.py | 103 ++++++++++++++++++++++++
> 1 file changed, 103 insertions(+)
> create mode 100644 tests/acceptance/machine_ppc_pegasos.py
>
> diff --git a/tests/acceptance/machine_ppc_pegasos.py
> b/tests/acceptance/machine_ppc_pegasos.py
> new file mode 100644
> index 0000000000..e890a3a539
> --- /dev/null
> +++ b/tests/acceptance/machine_ppc_pegasos.py
> @@ -0,0 +1,103 @@
> +# Functional tests for the Pegasos2 machine.
> +#
> +# Copyright (c) 2021 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 time
> +
> +from avocado import skipUnless
> +from avocado_qemu import Test
> +from avocado_qemu import exec_command_and_wait_for_pattern
> +from avocado_qemu import wait_for_console_pattern
> +from tesseract_utils import tesseract_available, tesseract_ocr
> +
> +PIL_AVAILABLE = True
> +try:
> + from PIL import Image
> +except ImportError:
> + PIL_AVAILABLE = False
> +
> +
> +@skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
> +class PPCPegasos2(Test):
> + """These tests require a Pegasos2 ROM. You need to perform a one
> + time manual set up of the ROM, registering it with the Avocado
> + assets system. Please follow the steps bellow from a QEMU build
> + directory, replaceing $MY_ROMS_DIR with a suitable directory.
> +
> + 1. make check-venv
> + 2. curl
> http://web.archive.org/web/20071021223056/http://www.bplan-gmbh.de/up050404/up050404
> -o $MY_ROMS_DIR/up050404
> + 3. tail -c +85581 /tmp/up050404 | head -c 524288 >
> $MY_ROMS_DIR/pegasos2.rom
Sorry but I am not signing for this patch description. I don't think
the project should link non-free software like this; which is why I
only listed the recipe link in the commit description. Maybe we can
simply add this link here again.
Stefan do you know what is recommended?
> + 4. ./tests/venv/bin/avocado assets register --hash
> 08dc28afb3d10fb223376a28eebfd07c9f8df9fa pegasos2.rom
> $MY_ROMS_DIR/pegasos2.rom
> + """
> + timeout = 60
> + rom_hash = '08dc28afb3d10fb223376a28eebfd07c9f8df9fa'
> +
> + def test_rom_serial_console(self):
> + """
> + :avocado: tags=arch:ppc
> + :avocado: tags=machine:pegasos2
> + :avocado: tags=device:mv64361
> + :avocado: tags=device:vt8231
> + """
> + rom_path = self.fetch_asset('pegasos2.rom', asset_hash=self.rom_hash)
> + self.vm.set_console()
> + self.vm.add_args('-bios', rom_path)
> + self.vm.launch()
> + msg = 'PegasosII Boot Strap (c) 2002-2003 bplan GmbH'
> + wait_for_console_pattern(self, msg)
> + msg = 'Welcome to SmartFirmware(tm) for bplan Pegasos2 version 1.1'
> + wait_for_console_pattern(self, msg)
> +
> + def test_morphos_cdrom_vga(self):
> + """
> + :avocado: tags=arch:ppc
> + :avocado: tags=machine:pegasos2
> + :avocado: tags=device:mv64361
> + :avocado: tags=device:vt8231
> + :avocado: tags=device:ati-vga
> + """
> + rom_path = self.fetch_asset('pegasos2.rom', asset_hash=self.rom_hash)
> + iso_url = 'https://www.morphos-team.net/morphos-3.15.iso'
> + iso_hash = 'a19dbfbbc4728e0ba9ceb6335db69ca4'
> + iso_path = self.fetch_asset(iso_url,
> + asset_hash=iso_hash, algorithm='md5')
> +
> + self.vm.set_console()
> + self.vm.add_args('-bios', rom_path,
> + '-device', 'ati-vga,romfile=',
> + '-cdrom', iso_path)
> + self.vm.launch()
> + msg = 'Welcome to SmartFirmware(tm) for bplan Pegasos2 version 1.1'
> + wait_for_console_pattern(self, msg)
> + wait_for_console_pattern(self, 'entering main read/eval loop...')
> + msg = 'filesystem: System-ID: "MORPHOS" Volume-ID: "MorphOSBoot"'
> + exec_command_and_wait_for_pattern(self, 'boot cd boot.img', msg)
> +
> + msg = 'ide.device@2: CDRom <CD001>,<MORPHOS > found, bootable'
> + wait_for_console_pattern(self, msg)
> + if PIL_AVAILABLE:
> + delay_s = 20 if tesseract_available(4) else 8
> +
> + self.log.info('VM launched, waiting for display')
> + # TODO: Use avocado.utils.wait.wait_for to catch the
> + # 'displaysurface_create 1120x832' trace-event.
> + time.sleep(delay_s)
> +
> + screenshot_path = os.path.join(self.workdir, "dump.ppm")
> + self.vm.command('human-monitor-command',
> + command_line='screendump %s' % screenshot_path)
> + width, height = Image.open(screenshot_path).size
> + self.assertEqual(width, 2048)
> + self.assertEqual(height, 1152)
> +
> + if tesseract_available(4):
> + lines = tesseract_ocr(screenshot_path, tesseract_version=4)
> + text = '\n'.join(lines)
> + msg = 'American keyboard with Greek input extension, 105
> keys'
> + self.assertIn(msg, text)
>
For the test code part it looks better indeed, thanks for the help here.
Regards,
Phil.