qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/5] More record/replay acceptance tests
@ 2021-07-27  8:45 Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 1/5] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Pavel Dovgalyuk @ 2021-07-27  8:45 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, alpha, nios2, and openrisc,
and Linux boot with cloudinit image for x86_64.

v3 changes:
 - rebased
 - removed duplicate ppc64 test
v2 changes:
 - moved ppc64 test to the right script

---

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

Pavel Dovgalyuk (4):
      tests/acceptance: add replay kernel test for s390
      tests/acceptance: add replay kernel test for openrisc
      tests/acceptance: add replay kernel test for nios2
      tests/acceptance: add replay kernel test for alpha


 MAINTAINERS                       |   1 +
 tests/acceptance/replay_kernel.py |  39 ++++++++++
 tests/acceptance/replay_linux.py  | 116 ++++++++++++++++++++++++++++++
 3 files changed, 156 insertions(+)
 create mode 100644 tests/acceptance/replay_linux.py

--
Pavel Dovgalyuk


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

* [PATCH v3 1/5] tests/acceptance: add replay kernel test for s390
  2021-07-27  8:45 [PATCH v3 0/5] More record/replay acceptance tests Pavel Dovgalyuk
@ 2021-07-27  8:45 ` Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 2/5] tests/acceptance: add replay kernel test for openrisc Pavel Dovgalyuk
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Pavel Dovgalyuk @ 2021-07-27  8:45 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>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
---
 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 bb32b31240..779db2a51f 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -207,6 +207,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] 8+ messages in thread

* [PATCH v3 2/5] tests/acceptance: add replay kernel test for openrisc
  2021-07-27  8:45 [PATCH v3 0/5] More record/replay acceptance tests Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 1/5] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
@ 2021-07-27  8:45 ` Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 3/5] tests/acceptance: add replay kernel test for nios2 Pavel Dovgalyuk
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Pavel Dovgalyuk @ 2021-07-27  8:45 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>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
---
 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 779db2a51f..a6db1b6556 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -318,6 +318,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')
 
+    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] 8+ messages in thread

* [PATCH v3 3/5] tests/acceptance: add replay kernel test for nios2
  2021-07-27  8:45 [PATCH v3 0/5] More record/replay acceptance tests Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 1/5] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 2/5] tests/acceptance: add replay kernel test for openrisc Pavel Dovgalyuk
@ 2021-07-27  8:45 ` Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 4/5] tests/acceptance: add replay kernel test for alpha Pavel Dovgalyuk
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Pavel Dovgalyuk @ 2021-07-27  8:45 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 nios2 platform. The test uses kernel binaries
taken from boot_linux_console test.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
---
 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 a6db1b6556..89079987ee 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -329,6 +329,17 @@ def test_or1k_sim(self):
         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



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

* [PATCH v3 4/5] tests/acceptance: add replay kernel test for alpha
  2021-07-27  8:45 [PATCH v3 0/5] More record/replay acceptance tests Pavel Dovgalyuk
                   ` (2 preceding siblings ...)
  2021-07-27  8:45 ` [PATCH v3 3/5] tests/acceptance: add replay kernel test for nios2 Pavel Dovgalyuk
@ 2021-07-27  8:45 ` Pavel Dovgalyuk
  2021-07-27  8:45 ` [PATCH v3 5/5] tests/acceptance: Linux boot test for record/replay Pavel Dovgalyuk
  2021-09-27 16:37 ` [PATCH v3 0/5] More record/replay acceptance tests Philippe Mathieu-Daudé
  5 siblings, 0 replies; 8+ messages in thread
From: Pavel Dovgalyuk @ 2021-07-27  8:45 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 alpha platform. The test uses kernel binaries
taken from boot_linux_console test.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
---
 tests/acceptance/replay_kernel.py |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/tests/acceptance/replay_kernel.py b/tests/acceptance/replay_kernel.py
index 89079987ee..bcecdf1522 100644
--- a/tests/acceptance/replay_kernel.py
+++ b/tests/acceptance/replay_kernel.py
@@ -223,6 +223,23 @@ def test_s390x_s390_ccw_virtio(self):
         self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=9,
             args=('-nodefaults', '-smp', '1'))
 
+    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



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

* [PATCH v3 5/5] tests/acceptance: Linux boot test for record/replay
  2021-07-27  8:45 [PATCH v3 0/5] More record/replay acceptance tests Pavel Dovgalyuk
                   ` (3 preceding siblings ...)
  2021-07-27  8:45 ` [PATCH v3 4/5] tests/acceptance: add replay kernel test for alpha Pavel Dovgalyuk
@ 2021-07-27  8:45 ` Pavel Dovgalyuk
  2021-09-27 16:37 ` [PATCH v3 0/5] More record/replay acceptance tests Philippe Mathieu-Daudé
  5 siblings, 0 replies; 8+ messages in thread
From: Pavel Dovgalyuk @ 2021-07-27  8:45 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>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
---
 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 445f7fe2d1..1b9882614b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2913,6 +2913,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] 8+ messages in thread

* Re: [PATCH v3 0/5] More record/replay acceptance tests
  2021-07-27  8:45 [PATCH v3 0/5] More record/replay acceptance tests Pavel Dovgalyuk
                   ` (4 preceding siblings ...)
  2021-07-27  8:45 ` [PATCH v3 5/5] tests/acceptance: Linux boot test for record/replay Pavel Dovgalyuk
@ 2021-09-27 16:37 ` Philippe Mathieu-Daudé
  2021-09-28  6:08   ` dovgaluk
  5 siblings, 1 reply; 8+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-09-27 16:37 UTC (permalink / raw)
  To: Pavel Dovgalyuk, qemu-devel; +Cc: pbonzini, alex.bennee, wrampazz, crosa

On 7/27/21 10:45, Pavel Dovgalyuk wrote:
> 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, alpha, nios2, and openrisc,
> and Linux boot with cloudinit image for x86_64.
> 
> v3 changes:
>  - rebased
>  - removed duplicate ppc64 test
> v2 changes:
>  - moved ppc64 test to the right script
> 
> ---
> 
> Pavel Dovgaluk (1):
>       tests/acceptance: Linux boot test for record/replay
> 
> Pavel Dovgalyuk (4):
>       tests/acceptance: add replay kernel test for s390
>       tests/acceptance: add replay kernel test for openrisc
>       tests/acceptance: add replay kernel test for nios2
>       tests/acceptance: add replay kernel test for alpha

Thanks Pavel, I apologize for the delay, and have now applied
your series to my integration-testing tree.



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

* Re: [PATCH v3 0/5] More record/replay acceptance tests
  2021-09-27 16:37 ` [PATCH v3 0/5] More record/replay acceptance tests Philippe Mathieu-Daudé
@ 2021-09-28  6:08   ` dovgaluk
  0 siblings, 0 replies; 8+ messages in thread
From: dovgaluk @ 2021-09-28  6:08 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Pavel Dovgalyuk, qemu-devel, wrampazz, crosa, pbonzini, alex.bennee

Philippe Mathieu-Daudé писал 2021-09-27 19:37:
> On 7/27/21 10:45, Pavel Dovgalyuk wrote:
>> 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, alpha, nios2, and openrisc,
>> and Linux boot with cloudinit image for x86_64.
>> 
>> v3 changes:
>>  - rebased
>>  - removed duplicate ppc64 test
>> v2 changes:
>>  - moved ppc64 test to the right script
>> 
>> ---
>> 
>> Pavel Dovgaluk (1):
>>       tests/acceptance: Linux boot test for record/replay
>> 
>> Pavel Dovgalyuk (4):
>>       tests/acceptance: add replay kernel test for s390
>>       tests/acceptance: add replay kernel test for openrisc
>>       tests/acceptance: add replay kernel test for nios2
>>       tests/acceptance: add replay kernel test for alpha
> 
> Thanks Pavel, I apologize for the delay, and have now applied
> your series to my integration-testing tree.

Thank you.


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

end of thread, other threads:[~2021-09-28  6:09 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-27  8:45 [PATCH v3 0/5] More record/replay acceptance tests Pavel Dovgalyuk
2021-07-27  8:45 ` [PATCH v3 1/5] tests/acceptance: add replay kernel test for s390 Pavel Dovgalyuk
2021-07-27  8:45 ` [PATCH v3 2/5] tests/acceptance: add replay kernel test for openrisc Pavel Dovgalyuk
2021-07-27  8:45 ` [PATCH v3 3/5] tests/acceptance: add replay kernel test for nios2 Pavel Dovgalyuk
2021-07-27  8:45 ` [PATCH v3 4/5] tests/acceptance: add replay kernel test for alpha Pavel Dovgalyuk
2021-07-27  8:45 ` [PATCH v3 5/5] tests/acceptance: Linux boot test for record/replay Pavel Dovgalyuk
2021-09-27 16:37 ` [PATCH v3 0/5] More record/replay acceptance tests Philippe Mathieu-Daudé
2021-09-28  6:08   ` dovgaluk

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).