* [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.