All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] tests: Add functional test for out-of-process device emulation
@ 2021-02-25 20:59 Willian Rampazzo
  2021-02-25 20:59 ` [PATCH v2 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-02-25 20:59 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é

This series is a respin to the "multi-process: Acceptance test for multiproce=
ss
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 sen=
ds 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.uf=
imtseva@oracle.com>

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 | 13 +++-
 tests/acceptance/multiprocess.py          | 95 +++++++++++++++++++++++
 2 files changed, 107 insertions(+), 1 deletion(-)
 create mode 100644 tests/acceptance/multiprocess.py

--=20
2.29.2




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

* [PATCH v2 1/2] avocado_qemu: add exec_command function
  2021-02-25 20:59 [PATCH v2 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
@ 2021-02-25 20:59 ` Willian Rampazzo
  2021-03-02 15:38   ` Wainer dos Santos Moschetta
  2021-02-25 20:59 ` [PATCH v2 2/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
  2021-02-25 23:07 ` [PATCH v2 0/2] " Philippe Mathieu-Daudé
  2 siblings, 1 reply; 6+ messages in thread
From: Willian Rampazzo @ 2021-02-25 20:59 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é

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>
---
 tests/acceptance/avocado_qemu/__init__.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
index df167b142c..6ea94cc721 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,17 @@ 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
+    """
+    _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 v2 2/2] tests: Add functional test for out-of-process device emulation
  2021-02-25 20:59 [PATCH v2 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
  2021-02-25 20:59 ` [PATCH v2 1/2] avocado_qemu: add exec_command function Willian Rampazzo
@ 2021-02-25 20:59 ` Willian Rampazzo
  2021-03-02 17:14   ` Wainer dos Santos Moschetta
  2021-02-25 23:07 ` [PATCH v2 0/2] " Philippe Mathieu-Daudé
  2 siblings, 1 reply; 6+ messages in thread
From: Willian Rampazzo @ 2021-02-25 20:59 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>
---
 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 v2 0/2] tests: Add functional test for out-of-process device emulation
  2021-02-25 20:59 [PATCH v2 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
  2021-02-25 20:59 ` [PATCH v2 1/2] avocado_qemu: add exec_command function Willian Rampazzo
  2021-02-25 20:59 ` [PATCH v2 2/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
@ 2021-02-25 23:07 ` Philippe Mathieu-Daudé
  2 siblings, 0 replies; 6+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-02-25 23:07 UTC (permalink / raw)
  To: Willian Rampazzo, qemu-devel
  Cc: Elena Ufimtseva, John G Johnson, Jagannathan Raman,
	Wainer dos Santos Moschetta, Cleber Rosa, Marc-André Lureau

On 2/25/21 9:59 PM, Willian Rampazzo wrote:
> This series is a respin to the "multi-process: Acceptance test for multiproce=
> ss
> 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 sen=
> ds 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.uf=
> imtseva@oracle.com>
> 
> 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 | 13 +++-
>  tests/acceptance/multiprocess.py          | 95 +++++++++++++++++++++++
>  2 files changed, 107 insertions(+), 1 deletion(-)
>  create mode 100644 tests/acceptance/multiprocess.py

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>



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

* Re: [PATCH v2 1/2] avocado_qemu: add exec_command function
  2021-02-25 20:59 ` [PATCH v2 1/2] avocado_qemu: add exec_command function Willian Rampazzo
@ 2021-03-02 15:38   ` Wainer dos Santos Moschetta
  0 siblings, 0 replies; 6+ messages in thread
From: Wainer dos Santos Moschetta @ 2021-03-02 15:38 UTC (permalink / raw)
  To: Willian Rampazzo, qemu-devel
  Cc: Elena Ufimtseva, John G Johnson, Jagannathan Raman, Cleber Rosa,
	Marc-André Lureau, Philippe Mathieu-Daudé

Hi,

On 2/25/21 5:59 PM, 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>
> ---
>   tests/acceptance/avocado_qemu/__init__.py | 13 ++++++++++++-
>   1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
> index df167b142c..6ea94cc721 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,17 @@ 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

It's missing the command type. With that:

Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>

> +    """
> +    _console_interaction(test, None, None, command + '\r')
> +
>   def exec_command_and_wait_for_pattern(test, command,
>                                         success_message, failure_message=None):
>       """



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

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


On 2/25/21 5:59 PM, 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>
> ---
>   tests/acceptance/multiprocess.py | 95 ++++++++++++++++++++++++++++++++
>   1 file changed, 95 insertions(+)
>   create mode 100644 tests/acceptance/multiprocess.py

I ran the tests on my x86_64 workstation, so:

Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>

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



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

end of thread, other threads:[~2021-03-02 17:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-25 20:59 [PATCH v2 0/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
2021-02-25 20:59 ` [PATCH v2 1/2] avocado_qemu: add exec_command function Willian Rampazzo
2021-03-02 15:38   ` Wainer dos Santos Moschetta
2021-02-25 20:59 ` [PATCH v2 2/2] tests: Add functional test for out-of-process device emulation Willian Rampazzo
2021-03-02 17:14   ` Wainer dos Santos Moschetta
2021-02-25 23:07 ` [PATCH v2 0/2] " Philippe Mathieu-Daudé

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.