aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2021-09-27 19:52:43 +0100
committerPeter Maydell <peter.maydell@linaro.org>2021-09-27 19:52:43 +0100
commit14f02d8a9ec1746823c106933a4c8f062f9e0f95 (patch)
tree06909b431ddc9efae6c5c44f23fd20e30cef76b9
parentde8ed1055c2ce18c95f597eb10df360dcb534f99 (diff)
parent4c5fc0c5fc496c147adb15536e4ac808feccf2cf (diff)
downloadqemu-14f02d8a9ec1746823c106933a4c8f062f9e0f95.zip
qemu-14f02d8a9ec1746823c106933a4c8f062f9e0f95.tar.gz
qemu-14f02d8a9ec1746823c106933a4c8f062f9e0f95.tar.bz2
Merge remote-tracking branch 'remotes/philmd/tags/integration-testing-20210927' into staging
Integration testing patches - More Linux kernel record/replay tests (Pavel Dovgalyuk) - Various fixes (Willian Rampazzo, Cleber Rosa) - Split machine_ppc.py per machine (David Gibson) - Add AVOCADO_TESTS command line environment variable (Willian Rampazzo) - Test PowerPC PowerNV 8/9 machines (Cédric Le Goater) # gpg: Signature made Mon 27 Sep 2021 18:24:03 BST # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * remotes/philmd/tags/integration-testing-20210927: (22 commits) tests/acceptance: Test powernv machines tests/acceptance/ppc_prep_40p.py: clean up unused import tests/acceptance/ppc_prep_40p.py: NetBSD 7.1.2 location update tests/acceptance/boot_xen.py: removed unused import acceptance/tests/vnc.py: use explicit syntax for enabling passwords Acceptance Tests: improve check-acceptance description qemu: Split machine_ppc.py acceptance tests tests/Makefile: add AVOCADO_TESTS option to make check-acceptance docs/devel/testing: add instruction to run a single acceptance test tests/Makefile: allow control over tags during check-acceptance avocado_qemu: fix inheritance order on LinuxTest class avocado_qemu: explicitly return None to avoid R1710 avocado_qemu: tweak ssh connect method avocado_qemu: fix import module based on isort avocado_qemu: standardize super() call following PEP3135 Acceptance Tests: add standard clean up at test tearDown() Acceptance tests: add myself as a reviewer for the acceptance tests tests/acceptance: Linux boot test for record/replay tests/acceptance: add replay kernel test for alpha tests/acceptance: add replay kernel test for nios2 ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--MAINTAINERS6
-rw-r--r--docs/devel/testing.rst69
-rw-r--r--tests/Makefile.include19
-rw-r--r--tests/acceptance/avocado_qemu/__init__.py30
-rw-r--r--tests/acceptance/boot_linux_console.py35
-rw-r--r--tests/acceptance/boot_xen.py1
-rw-r--r--tests/acceptance/machine_ppc.py69
-rw-r--r--tests/acceptance/ppc_mpc8544ds.py32
-rw-r--r--tests/acceptance/ppc_prep_40p.py5
-rw-r--r--tests/acceptance/ppc_pseries.py35
-rw-r--r--tests/acceptance/ppc_virtex_ml507.py34
-rw-r--r--tests/acceptance/replay_kernel.py54
-rw-r--r--tests/acceptance/replay_linux.py116
-rw-r--r--tests/acceptance/vnc.py2
14 files changed, 409 insertions, 98 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index d7915ec..bf1fc5b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -274,7 +274,6 @@ F: target/ppc/
F: hw/ppc/
F: include/hw/ppc/
F: disas/ppc.c
-F: tests/acceptance/machine_ppc.py
RISC-V TCG CPUs
M: Palmer Dabbelt <palmer@dabbelt.com>
@@ -1270,6 +1269,7 @@ L: qemu-ppc@nongnu.org
S: Odd Fixes
F: hw/ppc/mpc8544ds.c
F: hw/ppc/mpc8544_guts.c
+F: tests/acceptance/ppc_mpc8544ds.py
New World (mac99)
M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
@@ -1340,6 +1340,7 @@ F: tests/qtest/spapr*
F: tests/qtest/libqos/*spapr*
F: tests/qtest/rtas*
F: tests/qtest/libqos/rtas*
+F: tests/acceptance/ppc_pseries.py
PowerNV (Non-Virtualized)
M: Cédric Le Goater <clg@kaod.org>
@@ -1361,6 +1362,7 @@ M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
L: qemu-ppc@nongnu.org
S: Odd Fixes
F: hw/ppc/virtex_ml507.c
+F: tests/acceptance/ppc_virtex_ml507.py
sam460ex
M: BALATON Zoltan <balaton@eik.bme.hu>
@@ -2973,6 +2975,7 @@ F: include/sysemu/replay.h
F: docs/replay.txt
F: stubs/replay.c
F: tests/acceptance/replay_kernel.py
+F: tests/acceptance/replay_linux.py
F: tests/acceptance/reverse_debugging.py
F: qapi/replay.json
@@ -3484,6 +3487,7 @@ W: https://trello.com/b/6Qi1pxVn/avocado-qemu
R: Cleber Rosa <crosa@redhat.com>
R: Philippe Mathieu-Daudé <philmd@redhat.com>
R: Wainer dos Santos Moschetta <wainersm@redhat.com>
+R: Willian Rampazzo <willianr@redhat.com>
S: Odd Fixes
F: tests/acceptance/
diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index 4a0abbf..64c9744 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -732,6 +732,47 @@ available. On Debian and Ubuntu based systems, depending on the
specific version, they may be on packages named ``python3-venv`` and
``python3-pip``.
+It is also possible to run tests based on tags using the
+``make check-acceptance`` command and the ``AVOCADO_TAGS`` environment
+variable:
+
+.. code::
+
+ make check-acceptance AVOCADO_TAGS=quick
+
+Note that tags separated with commas have an AND behavior, while tags
+separated by spaces have an OR behavior. For more information on Avocado
+tags, see:
+
+ https://avocado-framework.readthedocs.io/en/latest/guides/user/chapters/tags.html
+
+To run a single test file, a couple of them, or a test within a file
+using the ``make check-acceptance`` command, set the ``AVOCADO_TESTS``
+environment variable with the test files or test names. To run all
+tests from a single file, use:
+
+ .. code::
+
+ make check-acceptance AVOCADO_TESTS=$FILEPATH
+
+The same is valid to run tests from multiple test files:
+
+ .. code::
+
+ make check-acceptance AVOCADO_TESTS='$FILEPATH1 $FILEPATH2'
+
+To run a single test within a file, use:
+
+ .. code::
+
+ make check-acceptance AVOCADO_TESTS=$FILEPATH:$TESTCLASS.$TESTNAME
+
+The same is valid to run single tests from multiple test files:
+
+ .. code::
+
+ make check-acceptance AVOCADO_TESTS='$FILEPATH1:$TESTCLASS1.$TESTNAME1 $FILEPATH2:$TESTCLASS2.$TESTNAME2'
+
The scripts installed inside the virtual environment may be used
without an "activation". For instance, the Avocado test runner
may be invoked by running:
@@ -740,6 +781,34 @@ may be invoked by running:
tests/venv/bin/avocado run $OPTION1 $OPTION2 tests/acceptance/
+Note that if ``make check-acceptance`` was not executed before, it is
+possible to create the Python virtual environment with the dependencies
+needed running:
+
+ .. code::
+
+ make check-venv
+
+It is also possible to run tests from a single file or a single test within
+a test file. To run tests from a single file within the build tree, use:
+
+ .. code::
+
+ tests/venv/bin/avocado run tests/acceptance/$TESTFILE
+
+To run a single test within a test file, use:
+
+ .. code::
+
+ tests/venv/bin/avocado run tests/acceptance/$TESTFILE:$TESTCLASS.$TESTNAME
+
+Valid test names are visible in the output from any previous execution
+of Avocado or ``make check-acceptance``, and can also be queried using:
+
+ .. code::
+
+ tests/venv/bin/avocado list tests/acceptance
+
Manual Installation
-------------------
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 6e16c05..7426522 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -16,7 +16,7 @@ ifneq ($(filter $(all-check-targets), check-softfloat),)
@echo " $(MAKE) check-tcg Run TCG tests"
@echo " $(MAKE) check-softfloat Run FPU emulation tests"
endif
- @echo " $(MAKE) check-acceptance Run all acceptance (functional) tests"
+ @echo " $(MAKE) check-acceptance Run acceptance (functional) tests for currently configured targets"
@echo
@echo " $(MAKE) check-report.tap Generates an aggregated TAP test report"
@echo " $(MAKE) check-venv Creates a Python venv for tests"
@@ -88,11 +88,19 @@ clean-tcg: $(CLEAN_TCG_TARGET_RULES)
TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv
TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt
TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
+ifndef AVOCADO_TESTS
+ AVOCADO_TESTS=tests/acceptance
+endif
# Controls the output generated by Avocado when running tests.
# Any number of command separated loggers are accepted. For more
# information please refer to "avocado --help".
AVOCADO_SHOW=app
-AVOCADO_TAGS=$(patsubst %-softmmu,-t arch:%, $(filter %-softmmu,$(TARGETS)))
+ifndef AVOCADO_TAGS
+ AVOCADO_CMDLINE_TAGS=$(patsubst %-softmmu,-t arch:%, \
+ $(filter %-softmmu,$(TARGETS)))
+else
+ AVOCADO_CMDLINE_TAGS=$(addprefix -t , $(AVOCADO_TAGS))
+endif
$(TESTS_VENV_DIR): $(TESTS_VENV_REQ)
$(call quiet-command, \
@@ -128,9 +136,10 @@ check-acceptance: check-venv $(TESTS_RESULTS_DIR) get-vm-images
$(call quiet-command, \
$(TESTS_VENV_DIR)/bin/python -m avocado \
--show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
- --filter-by-tags-include-empty --filter-by-tags-include-empty-key \
- $(AVOCADO_TAGS) \
- $(if $(GITLAB_CI),,--failfast) tests/acceptance, \
+ $(if $(AVOCADO_TAGS),, --filter-by-tags-include-empty \
+ --filter-by-tags-include-empty-key) \
+ $(AVOCADO_CMDLINE_TAGS) \
+ $(if $(GITLAB_CI),,--failfast) $(AVOCADO_TESTS), \
"AVOCADO", "tests/acceptance")
# Consolidated targets
diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
index 2c4fef3..1841053 100644
--- a/tests/acceptance/avocado_qemu/__init__.py
+++ b/tests/acceptance/avocado_qemu/__init__.py
@@ -12,19 +12,14 @@ import logging
import os
import shutil
import sys
-import uuid
import tempfile
+import time
+import uuid
import avocado
-
-from avocado.utils import cloudinit
-from avocado.utils import datadrainer
-from avocado.utils import network
-from avocado.utils import ssh
-from avocado.utils import vmimage
+from avocado.utils import cloudinit, datadrainer, network, ssh, vmimage
from avocado.utils.path import find_command
-
#: The QEMU build root directory. It may also be the source directory
#: if building from the source dir, but it's safer to use BUILD_DIR for
#: that purpose. Be aware that if this code is moved outside of a source
@@ -42,11 +37,9 @@ else:
sys.path.append(os.path.join(SOURCE_DIR, 'python'))
from qemu.machine import QEMUMachine
-from qemu.utils import (
- get_info_usernet_hostfwd_port,
- kvm_available,
- tcg_available,
-)
+from qemu.utils import (get_info_usernet_hostfwd_port, kvm_available,
+ tcg_available)
+
def is_readable_executable_file(path):
return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
@@ -79,6 +72,7 @@ def pick_default_qemu_bin(arch=None):
qemu_bin_relative_path)
if is_readable_executable_file(qemu_bin_from_bld_dir_path):
return qemu_bin_from_bld_dir_path
+ return None
def _console_interaction(test, success_message, failure_message,
@@ -276,12 +270,13 @@ class Test(avocado.Test):
for vm in self._vms.values():
vm.shutdown()
self._sd = None
+ super().tearDown()
def fetch_asset(self, name,
asset_hash=None, algorithm=None,
locations=None, expire=None,
find_only=False, cancel_on_missing=True):
- return super(Test, self).fetch_asset(name,
+ return super().fetch_asset(name,
asset_hash=asset_hash,
algorithm=algorithm,
locations=locations,
@@ -312,8 +307,7 @@ class LinuxSSHMixIn:
self.ssh_session.connect()
return
except:
- time.sleep(4)
- pass
+ time.sleep(i)
self.fail('ssh connection timeout')
def ssh_command(self, command):
@@ -430,7 +424,7 @@ class LinuxDistro:
return self._info.get('kernel_params', None)
-class LinuxTest(Test, LinuxSSHMixIn):
+class LinuxTest(LinuxSSHMixIn, Test):
"""Facilitates having a cloud-image Linux based available.
For tests that indend to interact with guests, this is a better choice
@@ -469,7 +463,7 @@ class LinuxTest(Test, LinuxSSHMixIn):
self.distro.checksum = distro_checksum
def setUp(self, ssh_pubkey=None, network_device_type='virtio-net'):
- super(LinuxTest, self).setUp()
+ super().setUp()
self._set_distro()
self.vm.add_args('-smp', '2')
self.vm.add_args('-m', '1024')
diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index 0a49c0e..06fc967 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -1176,6 +1176,41 @@ class BootLinuxConsole(LinuxKernelTest):
tar_hash = '6951d86d644b302898da2fd701739c9406527fe1'
self.do_test_advcal_2018('19', tar_hash, 'uImage')
+ def do_test_ppc64_powernv(self, proc):
+ images_url = ('https://github.com/open-power/op-build/releases/download/v2.7/')
+
+ kernel_url = images_url + 'zImage.epapr'
+ kernel_hash = '0ab237df661727e5392cee97460e8674057a883c5f74381a128fa772588d45cd'
+ kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash,
+ algorithm='sha256')
+ self.vm.set_console()
+ self.vm.add_args('-kernel', kernel_path,
+ '-append', 'console=tty0 console=hvc0',
+ '-device', 'pcie-pci-bridge,id=bridge1,bus=pcie.1,addr=0x0',
+ '-device', 'nvme,bus=pcie.2,addr=0x0,serial=1234',
+ '-device', 'e1000e,bus=bridge1,addr=0x3',
+ '-device', 'nec-usb-xhci,bus=bridge1,addr=0x2')
+ self.vm.launch()
+
+ self.wait_for_console_pattern("CPU: " + proc + " generation processor")
+ self.wait_for_console_pattern("zImage starting: loaded")
+ self.wait_for_console_pattern("Run /init as init process")
+ self.wait_for_console_pattern("Creating 1 MTD partitions")
+
+ def test_ppc_powernv8(self):
+ """
+ :avocado: tags=arch:ppc64
+ :avocado: tags=machine:powernv8
+ """
+ self.do_test_ppc64_powernv('P8')
+
+ def test_ppc_powernv9(self):
+ """
+ :avocado: tags=arch:ppc64
+ :avocado: tags=machine:powernv9
+ """
+ self.do_test_ppc64_powernv('P9')
+
def test_ppc_g3beige(self):
"""
:avocado: tags=arch:ppc
diff --git a/tests/acceptance/boot_xen.py b/tests/acceptance/boot_xen.py
index 3479b52..fc2faee 100644
--- a/tests/acceptance/boot_xen.py
+++ b/tests/acceptance/boot_xen.py
@@ -13,7 +13,6 @@
import os
-from avocado import skipIf
from avocado_qemu import wait_for_console_pattern
from boot_linux_console import LinuxKernelTest
diff --git a/tests/acceptance/machine_ppc.py b/tests/acceptance/machine_ppc.py
deleted file mode 100644
index a836e24..0000000
--- a/tests/acceptance/machine_ppc.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# Test that Linux kernel boots on ppc machines and check the console
-#
-# Copyright (c) 2018, 2020 Red Hat, Inc.
-#
-# This work is licensed under the terms of the GNU GPL, version 2 or
-# later. See the COPYING file in the top-level directory.
-
-from avocado.utils import archive
-from avocado_qemu import Test
-from avocado_qemu import wait_for_console_pattern
-
-class PpcMachine(Test):
-
- timeout = 90
- KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
- panic_message = 'Kernel panic - not syncing'
-
- def test_ppc64_pseries(self):
- """
- :avocado: tags=arch:ppc64
- :avocado: tags=machine:pseries
- """
- kernel_url = ('https://archives.fedoraproject.org/pub/archive'
- '/fedora-secondary/releases/29/Everything/ppc64le/os'
- '/ppc/ppc64/vmlinuz')
- kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77'
- kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
-
- self.vm.set_console()
- kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=hvc0'
- self.vm.add_args('-kernel', kernel_path,
- '-append', kernel_command_line)
- self.vm.launch()
- console_pattern = 'Kernel command line: %s' % kernel_command_line
- wait_for_console_pattern(self, console_pattern, self.panic_message)
-
- def test_ppc_mpc8544ds(self):
- """
- :avocado: tags=arch:ppc
- :avocado: tags=machine:mpc8544ds
- """
- tar_url = ('https://www.qemu-advent-calendar.org'
- '/2020/download/day17.tar.gz')
- tar_hash = '7a5239542a7c4257aa4d3b7f6ddf08fb6775c494'
- file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
- archive.extract(file_path, self.workdir)
- self.vm.set_console()
- self.vm.add_args('-kernel', self.workdir + '/creek/creek.bin')
- self.vm.launch()
- wait_for_console_pattern(self, 'QEMU advent calendar 2020',
- self.panic_message)
-
- def test_ppc_virtex_ml507(self):
- """
- :avocado: tags=arch:ppc
- :avocado: tags=machine:virtex-ml507
- """
- tar_url = ('https://www.qemu-advent-calendar.org'
- '/2020/download/hippo.tar.gz')
- tar_hash = '306b95bfe7d147f125aa176a877e266db8ef914a'
- file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
- archive.extract(file_path, self.workdir)
- self.vm.set_console()
- self.vm.add_args('-kernel', self.workdir + '/hippo/hippo.linux',
- '-dtb', self.workdir + '/hippo/virtex440-ml507.dtb',
- '-m', '512')
- self.vm.launch()
- wait_for_console_pattern(self, 'QEMU advent calendar 2020',
- self.panic_message)
diff --git a/tests/acceptance/ppc_mpc8544ds.py b/tests/acceptance/ppc_mpc8544ds.py
new file mode 100644
index 0000000..ce84060
--- /dev/null
+++ b/tests/acceptance/ppc_mpc8544ds.py
@@ -0,0 +1,32 @@
+# Test that Linux kernel boots on ppc machines and check the console
+#
+# Copyright (c) 2018, 2020 Red Hat, Inc.
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later. See the COPYING file in the top-level directory.
+
+from avocado.utils import archive
+from avocado_qemu import Test
+from avocado_qemu import wait_for_console_pattern
+
+class Mpc8544dsMachine(Test):
+
+ timeout = 90
+ KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
+ panic_message = 'Kernel panic - not syncing'
+
+ def test_ppc_mpc8544ds(self):
+ """
+ :avocado: tags=arch:ppc
+ :avocado: tags=machine:mpc8544ds
+ """
+ tar_url = ('https://www.qemu-advent-calendar.org'
+ '/2020/download/day17.tar.gz')
+ tar_hash = '7a5239542a7c4257aa4d3b7f6ddf08fb6775c494'
+ file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
+ archive.extract(file_path, self.workdir)
+ self.vm.set_console()
+ self.vm.add_args('-kernel', self.workdir + '/creek/creek.bin')
+ self.vm.launch()
+ wait_for_console_pattern(self, 'QEMU advent calendar 2020',
+ self.panic_message)
diff --git a/tests/acceptance/ppc_prep_40p.py b/tests/acceptance/ppc_prep_40p.py
index 2993ee3..5e61e68 100644
--- a/tests/acceptance/ppc_prep_40p.py
+++ b/tests/acceptance/ppc_prep_40p.py
@@ -7,7 +7,6 @@
import os
-from avocado import skipIf
from avocado import skipUnless
from avocado_qemu import Test
from avocado_qemu import wait_for_console_pattern
@@ -67,8 +66,8 @@ class IbmPrep40pMachine(Test):
:avocado: tags=machine:40p
:avocado: tags=os:netbsd
"""
- drive_url = ('https://cdn.netbsd.org/pub/NetBSD/iso/7.1.2/'
- 'NetBSD-7.1.2-prep.iso')
+ drive_url = ('https://archive.netbsd.org/pub/NetBSD-archive/'
+ 'NetBSD-7.1.2/iso/NetBSD-7.1.2-prep.iso')
drive_hash = 'ac6fa2707d888b36d6fa64de6e7fe48e'
drive_path = self.fetch_asset(drive_url, asset_hash=drive_hash,
algorithm='md5')
diff --git a/tests/acceptance/ppc_pseries.py b/tests/acceptance/ppc_pseries.py
new file mode 100644
index 0000000..f14a884
--- /dev/null
+++ b/tests/acceptance/ppc_pseries.py
@@ -0,0 +1,35 @@
+# Test that Linux kernel boots on ppc machines and check the console
+#
+# Copyright (c) 2018, 2020 Red Hat, Inc.
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later. See the COPYING file in the top-level directory.
+
+from avocado.utils import archive
+from avocado_qemu import Test
+from avocado_qemu import wait_for_console_pattern
+
+class pseriesMachine(Test):
+
+ timeout = 90
+ KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
+ panic_message = 'Kernel panic - not syncing'
+
+ def test_ppc64_pseries(self):
+ """
+ :avocado: tags=arch:ppc64
+ :avocado: tags=machine:pseries
+ """
+ kernel_url = ('https://archives.fedoraproject.org/pub/archive'
+ '/fedora-secondary/releases/29/Everything/ppc64le/os'
+ '/ppc/ppc64/vmlinuz')
+ kernel_hash = '3fe04abfc852b66653b8c3c897a59a689270bc77'
+ kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
+
+ self.vm.set_console()
+ kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=hvc0'
+ self.vm.add_args('-kernel', kernel_path,
+ '-append', kernel_command_line)
+ self.vm.launch()
+ console_pattern = 'Kernel command line: %s' % kernel_command_line
+ wait_for_console_pattern(self, console_pattern, self.panic_message)
diff --git a/tests/acceptance/ppc_virtex_ml507.py b/tests/acceptance/ppc_virtex_ml507.py
new file mode 100644
index 0000000..27f7bf2
--- /dev/null
+++ b/tests/acceptance/ppc_virtex_ml507.py
@@ -0,0 +1,34 @@
+# Test that Linux kernel boots on ppc machines and check the console
+#
+# Copyright (c) 2018, 2020 Red Hat, Inc.
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later. See the COPYING file in the top-level directory.
+
+from avocado.utils import archive
+from avocado_qemu import Test
+from avocado_qemu import wait_for_console_pattern
+
+class VirtexMl507Machine(Test):
+
+ timeout = 90
+ KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
+ panic_message = 'Kernel panic - not syncing'
+
+ def test_ppc_virtex_ml507(self):
+ """
+ :avocado: tags=arch:ppc
+ :avocado: tags=machine:virtex-ml507
+ """
+ tar_url = ('https://www.qemu-advent-calendar.org'
+ '/2020/download/hippo.tar.gz')
+ tar_hash = '306b95bfe7d147f125aa176a877e266db8ef914a'
+ file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
+ archive.extract(file_path, self.workdir)
+ self.vm.set_console()
+ self.vm.add_args('-kernel', self.workdir + '/hippo/hippo.linux',
+ '-dtb', self.workdir + '/hippo/virtex440-ml507.dtb',
+ '-m', '512')
+ self.vm.launch()
+ wait_for_console_pattern(self, 'QEMU advent calendar 2020',
+ self.panic_message)
diff --git a/tests/acceptance/replay_kernel.py b/tests/acceptance/replay_kernel.py
index bb32b31..c68a953 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -207,6 +207,38 @@ class ReplayKernelNormal(ReplayKernelBase):
'-initrd', initrd_path,
'-no-reboot'))
+ def test_s390x_s390_ccw_virtio(self):
+ """
+ :avocado: tags=arch:s390x
+ :avocado: tags=machine:s390-ccw-virtio
+ """
+ kernel_url = ('https://archives.fedoraproject.org/pub/archive'
+ '/fedora-secondary/releases/29/Everything/s390x/os/images'
+ '/kernel.img')
+ kernel_hash = 'e8e8439103ef8053418ef062644ffd46a7919313'
+ kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
+
+ kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=sclp0'
+ console_pattern = 'Kernel command line: %s' % kernel_command_line
+ self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=9)
+
+ def test_alpha_clipper(self):
+ """
+ :avocado: tags=arch:alpha
+ :avocado: tags=machine:clipper
+ """
+ kernel_url = ('http://archive.debian.org/debian/dists/lenny/main/'
+ 'installer-alpha/20090123lenny10/images/cdrom/vmlinuz')
+ kernel_hash = '3a943149335529e2ed3e74d0d787b85fb5671ba3'
+ kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
+
+ uncompressed_kernel = archive.uncompress(kernel_path, self.workdir)
+
+ kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0'
+ console_pattern = 'Kernel command line: %s' % kernel_command_line
+ self.run_rr(uncompressed_kernel, kernel_command_line, console_pattern, shift=9,
+ args=('-nodefaults', ))
+
def test_ppc64_pseries(self):
"""
:avocado: tags=arch:ppc64
@@ -302,6 +334,28 @@ class ReplayKernelNormal(ReplayKernelBase):
file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
self.do_test_advcal_2018(file_path, 'uImage')
+ def test_or1k_sim(self):
+ """
+ :avocado: tags=arch:or1k
+ :avocado: tags=machine:or1k-sim
+ """
+ tar_hash = '20334cdaf386108c530ff0badaecc955693027dd'
+ tar_url = ('https://www.qemu-advent-calendar.org'
+ '/2018/download/day20.tar.xz')
+ file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
+ self.do_test_advcal_2018(file_path, 'vmlinux')
+
+ def test_nios2_10m50(self):
+ """
+ :avocado: tags=arch:nios2
+ :avocado: tags=machine:10m50-ghrd
+ """
+ tar_hash = 'e4251141726c412ac0407c5a6bceefbbff018918'
+ tar_url = ('https://www.qemu-advent-calendar.org'
+ '/2018/download/day14.tar.xz')
+ file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
+ self.do_test_advcal_2018(file_path, 'vmlinux.elf')
+
def test_ppc_g3beige(self):
"""
:avocado: tags=arch:ppc
diff --git a/tests/acceptance/replay_linux.py b/tests/acceptance/replay_linux.py
new file mode 100644
index 0000000..15953f9
--- /dev/null
+++ b/tests/acceptance/replay_linux.py
@@ -0,0 +1,116 @@
+# Record/replay test that boots a complete Linux system via a cloud image
+#
+# Copyright (c) 2020 ISP RAS
+#
+# Author:
+# Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
+#
+# 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 time
+
+from avocado import skipUnless
+from avocado.utils import cloudinit
+from avocado.utils import network
+from avocado.utils import vmimage
+from avocado.utils import datadrainer
+from avocado.utils.path import find_command
+from avocado_qemu import LinuxTest
+
+class ReplayLinux(LinuxTest):
+ """
+ Boots a Linux system, checking for a successful initialization
+ """
+
+ timeout = 1800
+ chksum = None
+ hdd = 'ide-hd'
+ cd = 'ide-cd'
+ bus = 'ide'
+
+ def setUp(self):
+ super(ReplayLinux, self).setUp()
+ self.boot_path = self.download_boot()
+ self.cloudinit_path = self.prepare_cloudinit()
+
+ def vm_add_disk(self, vm, path, id, device):
+ bus_string = ''
+ if self.bus:
+ bus_string = ',bus=%s.%d' % (self.bus, id,)
+ vm.add_args('-drive', 'file=%s,snapshot,id=disk%s,if=none' % (path, id))
+ vm.add_args('-drive',
+ 'driver=blkreplay,id=disk%s-rr,if=none,image=disk%s' % (id, id))
+ vm.add_args('-device',
+ '%s,drive=disk%s-rr%s' % (device, id, bus_string))
+
+ def launch_and_wait(self, record, args, shift):
+ vm = self.get_vm()
+ vm.add_args('-smp', '1')
+ vm.add_args('-m', '1024')
+ vm.add_args('-object', 'filter-replay,id=replay,netdev=hub0port0')
+ if args:
+ vm.add_args(*args)
+ self.vm_add_disk(vm, self.boot_path, 0, self.hdd)
+ self.vm_add_disk(vm, self.cloudinit_path, 1, self.cd)
+ logger = logging.getLogger('replay')
+ if record:
+ logger.info('recording the execution...')
+ mode = 'record'
+ else:
+ logger.info('replaying the execution...')
+ mode = 'replay'
+ replay_path = os.path.join(self.workdir, 'replay.bin')
+ vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s' %
+ (shift, mode, replay_path))
+
+ start_time = time.time()
+
+ vm.set_console()
+ vm.launch()
+ console_drainer = datadrainer.LineLogger(vm.console_socket.fileno(),
+ logger=self.log.getChild('console'),
+ stop_check=(lambda : not vm.is_running()))
+ console_drainer.start()
+ if record:
+ cloudinit.wait_for_phone_home(('0.0.0.0', self.phone_home_port),
+ self.name)
+ vm.shutdown()
+ logger.info('finished the recording with log size %s bytes'
+ % os.path.getsize(replay_path))
+ else:
+ vm.event_wait('SHUTDOWN', self.timeout)
+ vm.shutdown(True)
+ logger.info('successfully fihished the replay')
+ elapsed = time.time() - start_time
+ logger.info('elapsed time %.2f sec' % elapsed)
+ return elapsed
+
+ def run_rr(self, args=None, shift=7):
+ t1 = self.launch_and_wait(True, args, shift)
+ t2 = self.launch_and_wait(False, args, shift)
+ logger = logging.getLogger('replay')
+ logger.info('replay overhead {:.2%}'.format(t2 / t1 - 1))
+
+@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
+class ReplayLinuxX8664(ReplayLinux):
+ """
+ :avocado: tags=arch:x86_64
+ :avocado: tags=accel:tcg
+ """
+
+ chksum = 'e3c1b309d9203604922d6e255c2c5d098a309c2d46215d8fc026954f3c5c27a0'
+
+ def test_pc_i440fx(self):
+ """
+ :avocado: tags=machine:pc
+ """
+ self.run_rr(shift=1)
+
+ def test_pc_q35(self):
+ """
+ :avocado: tags=machine:q35
+ """
+ self.run_rr(shift=3)
diff --git a/tests/acceptance/vnc.py b/tests/acceptance/vnc.py
index 22656bb..f301fbb 100644
--- a/tests/acceptance/vnc.py
+++ b/tests/acceptance/vnc.py
@@ -45,7 +45,7 @@ class Vnc(Test):
'Could not set password')
def test_change_password(self):
- self.vm.add_args('-nodefaults', '-S', '-vnc', ':0,password')
+ self.vm.add_args('-nodefaults', '-S', '-vnc', ':0,password=on')
self.vm.launch()
self.assertTrue(self.vm.qmp('query-vnc')['return']['enabled'])
set_password_response = self.vm.qmp('change-vnc-password',