All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] More record/replay acceptance tests
@ 2021-04-02  9:35 Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 1/4] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Pavel Dovgalyuk @ 2021-04-02  9:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: pavel.dovgalyuk, philmd, wrampazz, crosa, pbonzini, alex.bennee

The following series adds new record/replay tests to the acceptance group.

The provided tests perform kernel boot and disk image boot scenarios.
For all of them recording and replaying phases are executed.
Tests were borrowed from existing boot_linux*.py tests.

New tests include kernel boot for s390x, ppc64, and openrisc,
and Linux boot with cloudinit image for x86_64.

---

Pavel Dovgaluk (1):
      tests/acceptance: Linux boot test for record/replay

Pavel Dovgalyuk (3):
      tests/acceptance: add replay kernel test for s390
      tests/acceptance: add replay kernel test for ppc64
      tests/acceptance: add replay kernel test for openrisc


 MAINTAINERS                            |   1 +
 tests/acceptance/boot_linux_console.py |  12 +++
 tests/acceptance/replay_kernel.py      |  11 +++
 tests/acceptance/replay_linux.py       | 116 +++++++++++++++++++++++++
 4 files changed, 140 insertions(+)
 create mode 100644 tests/acceptance/replay_linux.py

--
Pavel Dovgalyuk


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/4] tests/acceptance: add replay kernel test for s390
  2021-04-02  9:35 [PATCH 0/4] More record/replay acceptance tests Pavel Dovgalyuk
@ 2021-04-02  9:35 ` Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 2/4] tests/acceptance: add replay kernel test for ppc64 Pavel Dovgalyuk
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Pavel Dovgalyuk @ 2021-04-02  9:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: pavel.dovgalyuk, philmd, wrampazz, crosa, pbonzini, alex.bennee

This patch adds record/replay test which boots Linux
kernel on s390x platform. The test uses kernel binaries
taken from boot_linux_console test.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
---
 tests/acceptance/replay_kernel.py |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/tests/acceptance/replay_kernel.py b/tests/acceptance/replay_kernel.py
index 71facdaa75..cdc22cb6d3 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -208,6 +208,22 @@ def test_arm_cubieboard_initrd(self):
                           '-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,
+            args=('-nodefaults', '-smp', '1'))
+
     def test_ppc64_pseries(self):
         """
         :avocado: tags=arch:ppc64



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/4] tests/acceptance: add replay kernel test for ppc64
  2021-04-02  9:35 [PATCH 0/4] More record/replay acceptance tests Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 1/4] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
@ 2021-04-02  9:35 ` Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 3/4] tests/acceptance: add replay kernel test for openrisc Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 4/4] tests/acceptance: Linux boot test for record/replay Pavel Dovgalyuk
  3 siblings, 0 replies; 5+ messages in thread
From: Pavel Dovgalyuk @ 2021-04-02  9:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: pavel.dovgalyuk, philmd, wrampazz, crosa, pbonzini, alex.bennee

This patch adds record/replay test which boots Linux
kernel on ppc64 platform. The test uses kernel binaries
taken from boot_linux_console test.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
---
 tests/acceptance/boot_linux_console.py |   12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
index 1ca32ecf25..22a434ebd9 100644
--- a/tests/acceptance/boot_linux_console.py
+++ b/tests/acceptance/boot_linux_console.py
@@ -1018,6 +1018,18 @@ def test_m68k_mcf5208evb(self):
         tar_hash = 'ac688fd00561a2b6ce1359f9ff6aa2b98c9a570c'
         self.do_test_advcal_2018('07', tar_hash, 'sanity-clause.elf')
 
+    def test_ppc64_e500(self):
+        """
+        :avocado: tags=arch:ppc64
+        :avocado: tags=machine:ppce500
+        :avocado: tags=cpu:e5500
+        """
+        tar_hash = '6951d86d644b302898da2fd701739c9406527fe1'
+        tar_url = ('https://www.qemu-advent-calendar.org'
+                   '/2018/download/day19.tar.xz')
+        file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
+        self.do_test_advcal_2018(file_path, 'uImage', ('-cpu', 'e5500'))
+
     def test_or1k_sim(self):
         """
         :avocado: tags=arch:or1k



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/4] tests/acceptance: add replay kernel test for openrisc
  2021-04-02  9:35 [PATCH 0/4] More record/replay acceptance tests Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 1/4] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 2/4] tests/acceptance: add replay kernel test for ppc64 Pavel Dovgalyuk
@ 2021-04-02  9:35 ` Pavel Dovgalyuk
  2021-04-02  9:35 ` [PATCH 4/4] tests/acceptance: Linux boot test for record/replay Pavel Dovgalyuk
  3 siblings, 0 replies; 5+ messages in thread
From: Pavel Dovgalyuk @ 2021-04-02  9:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: pavel.dovgalyuk, philmd, wrampazz, crosa, pbonzini, alex.bennee

This patch adds record/replay test which boots Linux
kernel on openrisc platform. The test uses kernel binaries
taken from boot_linux_console test.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
---
 tests/acceptance/replay_kernel.py |   11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/tests/acceptance/replay_kernel.py b/tests/acceptance/replay_kernel.py
index cdc22cb6d3..c1e80ab5ad 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -319,6 +319,17 @@ def test_ppc64_e500(self):
         file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
         self.do_test_advcal_2018(file_path, 'uImage', ('-cpu', 'e5500'))
 
+    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_ppc_g3beige(self):
         """
         :avocado: tags=arch:ppc



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 4/4] tests/acceptance: Linux boot test for record/replay
  2021-04-02  9:35 [PATCH 0/4] More record/replay acceptance tests Pavel Dovgalyuk
                   ` (2 preceding siblings ...)
  2021-04-02  9:35 ` [PATCH 3/4] tests/acceptance: add replay kernel test for openrisc Pavel Dovgalyuk
@ 2021-04-02  9:35 ` Pavel Dovgalyuk
  3 siblings, 0 replies; 5+ messages in thread
From: Pavel Dovgalyuk @ 2021-04-02  9:35 UTC (permalink / raw)
  To: qemu-devel
  Cc: pavel.dovgalyuk, philmd, wrampazz, crosa, pbonzini, alex.bennee

From: Pavel Dovgalyuk <Pavel.Dovgaluk@gmail.com>

This patch adds a test for record/replay, which boots Linux
image from the disk and interacts with the network.
The idea and code of this test is borrowed from boot_linux.py
This test includes only x86_64 platform. Other platforms and
machines will be added later after testing and improving
record/replay to completely support them.

Each test consists of the following phases:
 - downloading the disk image
 - recording the execution
 - replaying the execution

Replay does not validates the output, but waits until QEMU
finishes the execution. This is reasonable, because
QEMU usually hangs when replay goes wrong.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
---
 MAINTAINERS                      |    1 
 tests/acceptance/replay_linux.py |  116 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 117 insertions(+)
 create mode 100644 tests/acceptance/replay_linux.py

diff --git a/MAINTAINERS b/MAINTAINERS
index aa894767dc..17c152a5e1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2856,6 +2856,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
 
diff --git a/tests/acceptance/replay_linux.py b/tests/acceptance/replay_linux.py
new file mode 100644
index 0000000000..15953f9e49
--- /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)



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-04-02  9:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-02  9:35 [PATCH 0/4] More record/replay acceptance tests Pavel Dovgalyuk
2021-04-02  9:35 ` [PATCH 1/4] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
2021-04-02  9:35 ` [PATCH 2/4] tests/acceptance: add replay kernel test for ppc64 Pavel Dovgalyuk
2021-04-02  9:35 ` [PATCH 3/4] tests/acceptance: add replay kernel test for openrisc Pavel Dovgalyuk
2021-04-02  9:35 ` [PATCH 4/4] tests/acceptance: Linux boot test for record/replay Pavel Dovgalyuk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.