All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] tests: Add functional test for out-of-process device emulation
@ 2021-03-03 20:53 Willian Rampazzo
  2021-03-03 20:53 ` [PATCH v3 1/2] avocado_qemu: add exec_command function Willian Rampazzo
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Willian Rampazzo @ 2021-03-03 20:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Wainer dos Santos Moschetta, Cleber Rosa

This series is a respin to the "multi-process: Acceptance test for
multiprocess QEMU" patch sent in December which, runs an Avocado
functional test to check if a remote lsi53c895a device gets identified
by the guest:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg769188.html

First, we introduce the `exec_command` to the avocado_qemu package,
which sends a command to a console without the need to wait for a
pattern as a result. This is useful when a test needs to execute a
command that does not produce an output, like, for example, a `mount`
command.

Then, the original test is refactored to simplify the code using the
new `exec_command` function, remove the unnecessary change to the
`wait_for_console_pattern` method and normalize the use of single
quotes.

CI Pipeline: https://gitlab.com/willianrampazzo/qemu/-/pipelines/261946622

Supersedes: <785772783205140e219b8bfe7f793305ee768f03.1608705805.git.elena.ufimtseva@oracle.com>

Change from v2:
  - Add command type to the `exec_command` docstring

Jagannathan Raman (1):
  tests: Add functional test for out-of-process device emulation

Willian Rampazzo (1):
  avocado_qemu: add exec_command function

 tests/acceptance/avocado_qemu/__init__.py | 14 +++-
 tests/acceptance/multiprocess.py          | 95 +++++++++++++++++++++++
 2 files changed, 108 insertions(+), 1 deletion(-)
 create mode 100644 tests/acceptance/multiprocess.py

-- 
2.29.2




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

* [PATCH v3 1/2] avocado_qemu: add exec_command function
  2021-03-03 20:53 [PATCH v3 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
@ 2021-03-03 20:53 ` Willian Rampazzo
  2021-03-08 16:53   ` Cleber Rosa
  2021-03-03 20:53 ` [PATCH v3 2/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
  2021-03-10 15:11 ` [PATCH v3 0/2] " Stefan Hajnoczi
  2 siblings, 1 reply; 6+ messages in thread
From: Willian Rampazzo @ 2021-03-03 20:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Wainer dos Santos Moschetta, Cleber Rosa

Sometimes a test needs to send a command to a console without waiting
for a pattern as a result, or the command issued do not produce any kind
of output, like, for example, a `mount` command.

This introduces the `exec_command` function to the avocado_qemu,
allowing the test to send a command to the console without the need to
match a pattern produced as a result.

Signed-off-by: Willian Rampazzo <willianr@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
---
 tests/acceptance/avocado_qemu/__init__.py | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
index df167b142c..0e6d286403 100644
--- a/tests/acceptance/avocado_qemu/__init__.py
+++ b/tests/acceptance/avocado_qemu/__init__.py
@@ -93,7 +93,7 @@ def _console_interaction(test, success_message, failure_message,
         if not msg:
             continue
         console_logger.debug(msg)
-        if success_message in msg:
+        if success_message is None or success_message in msg:
             break
         if failure_message and failure_message in msg:
             console.close()
@@ -139,6 +139,18 @@ def wait_for_console_pattern(test, success_message, failure_message=None,
     """
     _console_interaction(test, success_message, failure_message, None, vm=vm)
 
+def exec_command(test, command):
+    """
+    Send a command to a console (appending CRLF characters), while logging
+    the content.
+
+    :param test: an Avocado test containing a VM.
+    :type test: :class:`avocado_qemu.Test`
+    :param command: the command to send
+    :type command: str
+    """
+    _console_interaction(test, None, None, command + '\r')
+
 def exec_command_and_wait_for_pattern(test, command,
                                       success_message, failure_message=None):
     """
-- 
2.29.2



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

* [PATCH v3 2/2] tests: Add functional test for out-of-process device emulation
  2021-03-03 20:53 [PATCH v3 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
  2021-03-03 20:53 ` [PATCH v3 1/2] avocado_qemu: add exec_command function Willian Rampazzo
@ 2021-03-03 20:53 ` Willian Rampazzo
  2021-03-09  1:17   ` Cleber Rosa
  2021-03-10 15:11 ` [PATCH v3 0/2] " Stefan Hajnoczi
  2 siblings, 1 reply; 6+ messages in thread
From: Willian Rampazzo @ 2021-03-03 20:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Elena Ufimtseva, John G Johnson, Jagannathan Raman,
	Wainer dos Santos Moschetta, Cleber Rosa, Marc-André Lureau,
	Philippe Mathieu-Daudé

From: Jagannathan Raman <jag.raman@oracle.com>

Runs the Avocado acceptance test to check if a
remote lsi53c895a device gets identified by the guest.

Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
[WR: Refactored code]
Signed-off-by: Willian Rampazzo <willianr@redhat.com>
Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
---
 tests/acceptance/multiprocess.py | 95 ++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100644 tests/acceptance/multiprocess.py

diff --git a/tests/acceptance/multiprocess.py b/tests/acceptance/multiprocess.py
new file mode 100644
index 0000000000..96627f022a
--- /dev/null
+++ b/tests/acceptance/multiprocess.py
@@ -0,0 +1,95 @@
+# Test for multiprocess qemu
+#
+# 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 socket
+
+from avocado_qemu import Test
+from avocado_qemu import wait_for_console_pattern
+from avocado_qemu import exec_command
+from avocado_qemu import exec_command_and_wait_for_pattern
+
+class Multiprocess(Test):
+    """
+    :avocado: tags=multiprocess
+    """
+    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
+
+    def do_test(self, kernel_url, initrd_url, kernel_command_line,
+                machine_type):
+        """Main test method"""
+        self.require_accelerator('kvm')
+
+        # Create socketpair to connect proxy and remote processes
+        proxy_sock, remote_sock = socket.socketpair(socket.AF_UNIX,
+                                                    socket.SOCK_STREAM)
+        os.set_inheritable(proxy_sock.fileno(), True)
+        os.set_inheritable(remote_sock.fileno(), True)
+
+        kernel_path = self.fetch_asset(kernel_url)
+        initrd_path = self.fetch_asset(initrd_url)
+
+        # Create remote process
+        remote_vm = self.get_vm()
+        remote_vm.add_args('-machine', 'x-remote')
+        remote_vm.add_args('-nodefaults')
+        remote_vm.add_args('-device', 'lsi53c895a,id=lsi1')
+        remote_vm.add_args('-object', 'x-remote-object,id=robj1,'
+                           'devid=lsi1,fd='+str(remote_sock.fileno()))
+        remote_vm.launch()
+
+        # Create proxy process
+        self.vm.set_console()
+        self.vm.add_args('-machine', machine_type)
+        self.vm.add_args('-accel', 'kvm')
+        self.vm.add_args('-cpu', 'host')
+        self.vm.add_args('-object',
+                         'memory-backend-memfd,id=sysmem-file,size=2G')
+        self.vm.add_args('--numa', 'node,memdev=sysmem-file')
+        self.vm.add_args('-m', '2048')
+        self.vm.add_args('-kernel', kernel_path,
+                         '-initrd', initrd_path,
+                         '-append', kernel_command_line)
+        self.vm.add_args('-device',
+                         'x-pci-proxy-dev,'
+                         'id=lsi1,fd='+str(proxy_sock.fileno()))
+        self.vm.launch()
+        wait_for_console_pattern(self, 'as init process',
+                                 'Kernel panic - not syncing')
+        exec_command(self, 'mount -t sysfs sysfs /sys')
+        exec_command_and_wait_for_pattern(self,
+                                          'cat /sys/bus/pci/devices/*/uevent',
+                                          'PCI_ID=1000:0012')
+
+    def test_multiprocess_x86_64(self):
+        """
+        :avocado: tags=arch:x86_64
+        """
+        kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
+                      '/linux/releases/31/Everything/x86_64/os/images'
+                      '/pxeboot/vmlinuz')
+        initrd_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
+                      '/linux/releases/31/Everything/x86_64/os/images'
+                      '/pxeboot/initrd.img')
+        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+                               'console=ttyS0 rdinit=/bin/bash')
+        machine_type = 'pc'
+        self.do_test(kernel_url, initrd_url, kernel_command_line, machine_type)
+
+    def test_multiprocess_aarch64(self):
+        """
+        :avocado: tags=arch:aarch64
+        """
+        kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
+                      '/linux/releases/31/Everything/aarch64/os/images'
+                      '/pxeboot/vmlinuz')
+        initrd_url = ('https://archives.fedoraproject.org/pub/archive/fedora'
+                      '/linux/releases/31/Everything/aarch64/os/images'
+                      '/pxeboot/initrd.img')
+        kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE +
+                               'rdinit=/bin/bash console=ttyAMA0')
+        machine_type = 'virt,gic-version=3'
+        self.do_test(kernel_url, initrd_url, kernel_command_line, machine_type)
-- 
2.29.2



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

* Re: [PATCH v3 1/2] avocado_qemu: add exec_command function
  2021-03-03 20:53 ` [PATCH v3 1/2] avocado_qemu: add exec_command function Willian Rampazzo
@ 2021-03-08 16:53   ` Cleber Rosa
  0 siblings, 0 replies; 6+ messages in thread
From: Cleber Rosa @ 2021-03-08 16:53 UTC (permalink / raw)
  To: Willian Rampazzo
  Cc: Philippe Mathieu-Daudé, qemu-devel, Wainer dos Santos Moschetta

[-- Attachment #1: Type: text/plain, Size: 817 bytes --]

On Wed, Mar 03, 2021 at 05:53:19PM -0300, Willian Rampazzo wrote:
> Sometimes a test needs to send a command to a console without waiting
> for a pattern as a result, or the command issued do not produce any kind
> of output, like, for example, a `mount` command.
> 
> This introduces the `exec_command` function to the avocado_qemu,
> allowing the test to send a command to the console without the need to
> match a pattern produced as a result.
> 
> Signed-off-by: Willian Rampazzo <willianr@redhat.com>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
> ---
>  tests/acceptance/avocado_qemu/__init__.py | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 

Reviewed-by: Cleber Rosa <crosa@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v3 2/2] tests: Add functional test for out-of-process device emulation
  2021-03-03 20:53 ` [PATCH v3 2/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
@ 2021-03-09  1:17   ` Cleber Rosa
  0 siblings, 0 replies; 6+ messages in thread
From: Cleber Rosa @ 2021-03-09  1:17 UTC (permalink / raw)
  To: Willian Rampazzo
  Cc: Elena Ufimtseva, John G Johnson, Jagannathan Raman, qemu-devel,
	Wainer dos Santos Moschetta, Marc-André Lureau,
	Philippe Mathieu-Daudé

[-- Attachment #1: Type: text/plain, Size: 1915 bytes --]

On Wed, Mar 03, 2021 at 05:53:20PM -0300, Willian Rampazzo wrote:
> From: Jagannathan Raman <jag.raman@oracle.com>
> 
> Runs the Avocado acceptance test to check if a
> remote lsi53c895a device gets identified by the guest.
> 
> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
> Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> [WR: Refactored code]
> Signed-off-by: Willian Rampazzo <willianr@redhat.com>
> Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
> ---
>  tests/acceptance/multiprocess.py | 95 ++++++++++++++++++++++++++++++++
>  1 file changed, 95 insertions(+)
>  create mode 100644 tests/acceptance/multiprocess.py
>

Because of KVM requirement, tested on x86_64 host:

   ./tests/venv/bin/avocado run -t arch:x86_64 tests/acceptance/multiprocess.py 
   JOB ID     : bde34ca2168ce031f3fbdbb5091889fb9bc4b977
   JOB LOG    : /home/cleber/avocado/job-results/job-2021-03-08T20.16-bde34ca/job.log
    (1/1) tests/acceptance/multiprocess.py:Multiprocess.test_multiprocess_x86_64: PASS (5.80 s)
   RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
   JOB TIME   : 6.23 s

And on aarch64 host:

   $ ./tests/venv/bin/avocado run -t arch:aarch64 tests/acceptance/multiprocess.py 
   JOB ID     : a101a47887322981aae722b9c8e7cb6e6350eed9
   JOB LOG    : /home/cleber/avocado/job-results/job-2021-03-08T20.17-a101a47/job.log
    (1/1) tests/acceptance/multiprocess.py:Multiprocess.test_multiprocess_aarch64: PASS (9.55 s)
   RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
   JOB TIME   : 10.17 s

Reviewed-by: Cleber Rosa <crosa@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v3 0/2] tests: Add functional test for out-of-process device emulation
  2021-03-03 20:53 [PATCH v3 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
  2021-03-03 20:53 ` [PATCH v3 1/2] avocado_qemu: add exec_command function Willian Rampazzo
  2021-03-03 20:53 ` [PATCH v3 2/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
@ 2021-03-10 15:11 ` Stefan Hajnoczi
  2 siblings, 0 replies; 6+ messages in thread
From: Stefan Hajnoczi @ 2021-03-10 15:11 UTC (permalink / raw)
  To: Willian Rampazzo
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, Wainer dos Santos Moschetta, Cleber Rosa

[-- Attachment #1: Type: text/plain, Size: 1658 bytes --]

On Wed, Mar 03, 2021 at 05:53:18PM -0300, Willian Rampazzo wrote:
> This series is a respin to the "multi-process: Acceptance test for
> multiprocess QEMU" patch sent in December which, runs an Avocado
> functional test to check if a remote lsi53c895a device gets identified
> by the guest:
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg769188.html
> 
> First, we introduce the `exec_command` to the avocado_qemu package,
> which sends a command to a console without the need to wait for a
> pattern as a result. This is useful when a test needs to execute a
> command that does not produce an output, like, for example, a `mount`
> command.
> 
> Then, the original test is refactored to simplify the code using the
> new `exec_command` function, remove the unnecessary change to the
> `wait_for_console_pattern` method and normalize the use of single
> quotes.
> 
> CI Pipeline: https://gitlab.com/willianrampazzo/qemu/-/pipelines/261946622
> 
> Supersedes: <785772783205140e219b8bfe7f793305ee768f03.1608705805.git.elena.ufimtseva@oracle.com>
> 
> Change from v2:
>   - Add command type to the `exec_command` docstring
> 
> Jagannathan Raman (1):
>   tests: Add functional test for out-of-process device emulation
> 
> Willian Rampazzo (1):
>   avocado_qemu: add exec_command function
> 
>  tests/acceptance/avocado_qemu/__init__.py | 14 +++-
>  tests/acceptance/multiprocess.py          | 95 +++++++++++++++++++++++
>  2 files changed, 108 insertions(+), 1 deletion(-)
>  create mode 100644 tests/acceptance/multiprocess.py
> 
> -- 
> 2.29.2
> 
> 
> 

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2021-03-10 15:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-03 20:53 [PATCH v3 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
2021-03-03 20:53 ` [PATCH v3 1/2] avocado_qemu: add exec_command function Willian Rampazzo
2021-03-08 16:53   ` Cleber Rosa
2021-03-03 20:53 ` [PATCH v3 2/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
2021-03-09  1:17   ` Cleber Rosa
2021-03-10 15:11 ` [PATCH v3 0/2] " Stefan Hajnoczi

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.