Similar to the test_x86_64_pc test, this boots a Linux kernel on a
R2D board (SH4 little-endian) and verify the usb is working by looking
at the usb trace events. Thus this test requires the QEMU binary to be
compiled with:
$ configure ... --enable-trace-backends=log
This test also requires the dpkg-deb tool (apt/dnf install dpkg) to
extract the kernel from the Debian package.
$ avocado --show=app,trace run -p arch=sh4 tests/acceptance/boot_linux_console.py
JOB ID : dc45be27f5d1edb8289a1ede139e107bbc55b045
JOB LOG : /home/phil/avocado/job-results/job-2018-10-13T14.46-dc45be2/job.log
(1/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_x86_64_pc: CANCEL: Currently specific to the x86_64 target arch (0.00 s)
(2/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips_4kc_malta: CANCEL: Currently specific to the sh4 target arch (0.00 s)
(3/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mipsel_5kc_malta: CANCEL: Currently specific to the sh4 target arch (0.00 s)
(4/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_sh4_r2d: SKIP: console not working on r2d machine
(5/5) tests/acceptance/boot_linux_console.py:BootLinuxTracing.test_sh4_r2d: /
trace: 22770@1539434809.450006:usb_ohci_init_time usb_bit_time=1000000 usb_frame_time=83
trace: 22770@1539434809.453017:usb_ohci_port_attach port #0
trace: 22770@1539434809.454827:usb_ohci_reset sysbus-ohci
trace: 22770@1539434809.454833:usb_ohci_stop sysbus-ohci: USB Suspended
trace: 22770@1539434809.454835:usb_ohci_stop sysbus-ohci: USB Suspended
trace: 22770@1539434809.454837:usb_ohci_port_detach port #0
trace: 22770@1539434809.454839:usb_ohci_port_attach port #0
trace: 22770@1539434811.588702:usb_ohci_reset sysbus-ohci
trace: 22770@1539434811.588711:usb_ohci_stop sysbus-ohci: USB Suspended
trace: 22770@1539434811.589062:usb_ohci_set_ctl sysbus-ohci: new state 0x80
trace: 22770@1539434811.589067:usb_ohci_start sysbus-ohci: USB Operational
trace: 22770@1539434811.589253:usb_ohci_hub_power_up powered up all ports
PASS (2.43 s)
RESULTS : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 3
JOB TIME : 2.67 s
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
tests/acceptance/boot_linux_console.py | 64 ++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index 8f99cc0d7c..e11993bf98 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -8,11 +8,22 @@
# This work is licensed under the terms of the GNU GPL, version 2 or
# later. See the COPYING file in the top-level directory.
+import os
import logging
import subprocess
from avocado import skip
from avocado_qemu import Test
+from avocado.utils.wait import wait_for
+
+
+def read_stream_for_string(stream, expected_string, logger=None):
+ msg = stream.readline()
+ if len(msg) == 0:
+ return False
+ if logger:
+ logger.debug(msg.strip())
+ return expected_string in msg
class BootLinuxConsole(Test):
@@ -185,3 +196,56 @@ class BootLinuxConsole(Test):
break
if 'Kernel panic - not syncing' in msg:
self.fail("Kernel panic reached")
+
+class BootLinuxTracing(Test):
+ """
+ Boots a Linux kernel and checks that via the Tracing framework that
+ a specific trace events occured, demostrating the kernel is operational.
+
+ :avocado: enable
+ """
+
+ timeout = 60
+
+ def test_sh4_r2d(self):
+ """
+ This test requires the dpkg-deb tool (apt/dnf install dpkg) to extract
+ the kernel from the Debian package.
+ This test also requires the QEMU binary to be compiled with:
+
+ $ configure ... --enable-trace-backends=log
+
+ The kernel can be rebuilt using this Debian kernel source [1] and
+ following the instructions on [2].
+
+ [1] https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-official
+ [2] http://snapshot.debian.org/package/linux-2.6/2.6.32-30/#linux-source-2.6.32_2.6.32-30
+
+ :avocado: tags=arch:sh4
+ """
+ if self.arch != 'sh4':
+ self.cancel('Currently specific to the %s target arch' % self.arch)
+
+ deb_url = ('http://snapshot.debian.org/archive/'
+ 'debian-ports/20110116T065852Z/pool-sh4/main/l/'
+ 'linux-2.6/linux-image-2.6.32-5-sh7751r_2.6.32-30_sh4.deb')
+ deb_hash = '8025e503319dc8ad786756e3afaa8eb868e9ef59'
+ deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
+ subprocess.check_call(['dpkg-deb', '--extract', deb_path, self.workdir])
+ kernel_path = self.workdir + '/boot/vmlinuz-2.6.32-5-sh7751r'
+ trace_path = os.path.join(self.workdir, 'trace.log')
+ trace_logger = logging.getLogger('trace')
+
+ self.vm.set_arch(self.arch)
+ self.vm.set_machine('r2d')
+ kernel_command_line = 'noiotrap'
+ self.vm.add_args('-trace', "enable=usb_ohci_*,file=" + trace_path,
+ '-kernel', kernel_path,
+ '-append', kernel_command_line)
+
+ self.vm.launch()
+ if not wait_for(read_stream_for_string, timeout=15, step=0,
+ args=(open(trace_path),
+ 'usb_ohci_hub_power_up powered up all ports',
+ trace_logger)):
+ self.fail("Machine failed to boot")
--
2.19.1
On 10/13/18 11:15 AM, Philippe Mathieu-Daudé wrote:
> Similar to the test_x86_64_pc test, this boots a Linux kernel on a
> R2D board (SH4 little-endian) and verify the usb is working by looking
> at the usb trace events. Thus this test requires the QEMU binary to be
> compiled with:
>
> $ configure ... --enable-trace-backends=log
>
> This test also requires the dpkg-deb tool (apt/dnf install dpkg) to
> extract the kernel from the Debian package.
>
> $ avocado --show=app,trace run -p arch=sh4 tests/acceptance/boot_linux_console.py
> JOB ID : dc45be27f5d1edb8289a1ede139e107bbc55b045
> JOB LOG : /home/phil/avocado/job-results/job-2018-10-13T14.46-dc45be2/job.log
> (1/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_x86_64_pc: CANCEL: Currently specific to the x86_64 target arch (0.00 s)
> (2/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips_4kc_malta: CANCEL: Currently specific to the sh4 target arch (0.00 s)
> (3/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mipsel_5kc_malta: CANCEL: Currently specific to the sh4 target arch (0.00 s)
> (4/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_sh4_r2d: SKIP: console not working on r2d machine
> (5/5) tests/acceptance/boot_linux_console.py:BootLinuxTracing.test_sh4_r2d: /
> trace: 22770@1539434809.450006:usb_ohci_init_time usb_bit_time=1000000 usb_frame_time=83
> trace: 22770@1539434809.453017:usb_ohci_port_attach port #0
> trace: 22770@1539434809.454827:usb_ohci_reset sysbus-ohci
> trace: 22770@1539434809.454833:usb_ohci_stop sysbus-ohci: USB Suspended
> trace: 22770@1539434809.454835:usb_ohci_stop sysbus-ohci: USB Suspended
> trace: 22770@1539434809.454837:usb_ohci_port_detach port #0
> trace: 22770@1539434809.454839:usb_ohci_port_attach port #0
> trace: 22770@1539434811.588702:usb_ohci_reset sysbus-ohci
> trace: 22770@1539434811.588711:usb_ohci_stop sysbus-ohci: USB Suspended
> trace: 22770@1539434811.589062:usb_ohci_set_ctl sysbus-ohci: new state 0x80
> trace: 22770@1539434811.589067:usb_ohci_start sysbus-ohci: USB Operational
> trace: 22770@1539434811.589253:usb_ohci_hub_power_up powered up all ports
> PASS (2.43 s)
> RESULTS : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 3
> JOB TIME : 2.67 s
>
And with similar changes, on this point of this series:
$ avocado run tests/acceptance/boot_linux_console.py
JOB ID : 857fef1b8c0ce59a79d452f27e996ed2743404b1
JOB LOG :
/home/cleber/avocado/job-results/job-2018-10-19T19.58-857fef1/job.log
(1/5)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_x86_64_pc:
PASS (2.04 s)
(2/5)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mips_4kc_malta:
PASS (0.57 s)
(3/5)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_mipsel_5kc_malta:
PASS (0.59 s)
(4/5)
tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_sh4_r2d:
SKIP: console not working on r2d machine
(5/5)
tests/acceptance/boot_linux_console.py:BootLinuxTracing.test_sh4_r2d:
PASS (1.01 s)
RESULTS : PASS 4 | ERROR 0 | FAIL 0 | SKIP 1 | WARN 0 | INTERRUPT 0 |
CANCEL 0
JOB TIME : 4.57 s
- Cleber.
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> tests/acceptance/boot_linux_console.py | 64 ++++++++++++++++++++++++++
> 1 file changed, 64 insertions(+)
>
> diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
> index 8f99cc0d7c..e11993bf98 100644
> --- a/tests/acceptance/boot_linux_console.py
> +++ b/tests/acceptance/boot_linux_console.py
> @@ -8,11 +8,22 @@
> # This work is licensed under the terms of the GNU GPL, version 2 or
> # later. See the COPYING file in the top-level directory.
>
> +import os
> import logging
> import subprocess
>
> from avocado import skip
> from avocado_qemu import Test
> +from avocado.utils.wait import wait_for
> +
> +
> +def read_stream_for_string(stream, expected_string, logger=None):
> + msg = stream.readline()
> + if len(msg) == 0:
> + return False
> + if logger:
> + logger.debug(msg.strip())
> + return expected_string in msg
>
>
> class BootLinuxConsole(Test):
> @@ -185,3 +196,56 @@ class BootLinuxConsole(Test):
> break
> if 'Kernel panic - not syncing' in msg:
> self.fail("Kernel panic reached")
> +
> +class BootLinuxTracing(Test):
> + """
> + Boots a Linux kernel and checks that via the Tracing framework that
> + a specific trace events occured, demostrating the kernel is operational.
> +
> + :avocado: enable
> + """
> +
> + timeout = 60
> +
> + def test_sh4_r2d(self):
> + """
> + This test requires the dpkg-deb tool (apt/dnf install dpkg) to extract
> + the kernel from the Debian package.
> + This test also requires the QEMU binary to be compiled with:
> +
> + $ configure ... --enable-trace-backends=log
> +
> + The kernel can be rebuilt using this Debian kernel source [1] and
> + following the instructions on [2].
> +
> + [1] https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-official
> + [2] http://snapshot.debian.org/package/linux-2.6/2.6.32-30/#linux-source-2.6.32_2.6.32-30
> +
> + :avocado: tags=arch:sh4
> + """
> + if self.arch != 'sh4':
> + self.cancel('Currently specific to the %s target arch' % self.arch)
> +
> + deb_url = ('http://snapshot.debian.org/archive/'
> + 'debian-ports/20110116T065852Z/pool-sh4/main/l/'
> + 'linux-2.6/linux-image-2.6.32-5-sh7751r_2.6.32-30_sh4.deb')
> + deb_hash = '8025e503319dc8ad786756e3afaa8eb868e9ef59'
> + deb_path = self.fetch_asset(deb_url, asset_hash=deb_hash)
> + subprocess.check_call(['dpkg-deb', '--extract', deb_path, self.workdir])
> + kernel_path = self.workdir + '/boot/vmlinuz-2.6.32-5-sh7751r'
> + trace_path = os.path.join(self.workdir, 'trace.log')
> + trace_logger = logging.getLogger('trace')
> +
> + self.vm.set_arch(self.arch)
> + self.vm.set_machine('r2d')
> + kernel_command_line = 'noiotrap'
> + self.vm.add_args('-trace', "enable=usb_ohci_*,file=" + trace_path,
> + '-kernel', kernel_path,
> + '-append', kernel_command_line)
> +
> + self.vm.launch()
> + if not wait_for(read_stream_for_string, timeout=15, step=0,
> + args=(open(trace_path),
> + 'usb_ohci_hub_power_up powered up all ports',
> + trace_logger)):
> + self.fail("Machine failed to boot")
>
--
Cleber Rosa
[ Sr Software Engineer - Virtualization Team - Red Hat ]
[ Avocado Test Framework - avocado-framework.github.io ]
[ 7ABB 96EB 8B46 B94D 5E0F E9BB 657E 8D33 A5F2 09F3 ]
© 2016 - 2025 Red Hat, Inc.