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