Acceptance and Python Test Improvements
Small collection of Acceptance and Python tests/improvements. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEeruW64tGuU1eD+m7ZX6NM6XyCfMFAmBRdgcACgkQZX6NM6Xy CfMfPQ//SYjVDDYDQUtRLkXP1L5Mv+ocDcFhSqr+gmBlgUzTgioTe9m5qys/DgFo NZqK+A05Qil/C1qILGBO6mass8YGMuND9f1oeX0ZlGXvyanYOn6XtV0TTPH42NIo Cu4rTWEOlrnLxXAFisGdkupfiKHRfIBQSpkNREi70nLAyVv6AFORLhXuVdcI4Kna wUaw55NzOjUK6H1PimByU2IMaJt63zvzUsda2sJyE+NKoFrdtU/HUyrBYS8I8NcA oRHlDCzDfQUw08xoP74nZJTCAfW7ZMCRlfU+RQKsMs+iW0eADeNA6hZ/cUN/Njdz a6E7p1YhN3iRQf6gqPpwUXSbcignA5fobU6pMve0uAOlKfscIKmosHDFedyRVWZN oVc6BX0LUA8RZruYe2hCGQ4DNTAzMhVpTw9+pSHn75zvS/BfWOkqxEYUE4gcKbQg D4wvpffD1wRvuGTfBYtBEQwrwZTKKmOPV8ikzHMwH8TTBQYSHCRjQtUekQJEX7+3 IICgahgxwBdXkJplCZfO5P505uNnhLdyeolHEIC3+xQuMTIHr8oWSCtAnEv7bku0 5MMNcpGUd0HIGYpuE/o2L9cMHR7kQp1k1/qWaCWKMqenk7U51bY1sGPhS4q+/Pnb raahyhktHKThsJqd4z9O4nZw+v2rcai2k0VfpBcNkJxCkisi8E0= =/Qqa -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/cleber-gitlab/tags/python-next-pull-request' into staging Acceptance and Python Test Improvements Small collection of Acceptance and Python tests/improvements. # gpg: Signature made Wed 17 Mar 2021 03:22:47 GMT # gpg: using RSA key 7ABB96EB8B46B94D5E0FE9BB657E8D33A5F209F3 # gpg: Good signature from "Cleber Rosa <crosa@redhat.com>" [marginal] # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 7ABB 96EB 8B46 B94D 5E0F E9BB 657E 8D33 A5F2 09F3 * remotes/cleber-gitlab/tags/python-next-pull-request: tests/acceptance: linux-related tests fix tests: Add functional test for out-of-process device emulation avocado_qemu: add exec_command function tests/migration: fix unix socket batch migration tests/acceptance: Print expected message on wait_for_console_pattern Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
1db136a29c
@ -93,11 +93,12 @@ 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()
|
||||
fail = 'Failure message found in console: %s' % failure_message
|
||||
fail = 'Failure message found in console: "%s". Expected: "%s"' % \
|
||||
(failure_message, success_message)
|
||||
test.fail(fail)
|
||||
|
||||
def interrupt_interactive_console_until_pattern(test, success_message,
|
||||
@ -139,6 +140,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):
|
||||
"""
|
||||
@ -304,8 +317,10 @@ class LinuxTest(Test):
|
||||
try:
|
||||
cloudinit_iso = os.path.join(self.workdir, 'cloudinit.iso')
|
||||
self.phone_home_port = network.find_free_port()
|
||||
with open(ssh_pubkey) as pubkey:
|
||||
pubkey_content = pubkey.read()
|
||||
pubkey_content = None
|
||||
if ssh_pubkey:
|
||||
with open(ssh_pubkey) as pubkey:
|
||||
pubkey_content = pubkey.read()
|
||||
cloudinit.iso(cloudinit_iso, self.name,
|
||||
username='root',
|
||||
password='password',
|
||||
|
95
tests/acceptance/multiprocess.py
Normal file
95
tests/acceptance/multiprocess.py
Normal file
@ -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)
|
@ -407,6 +407,13 @@ class Engine(object):
|
||||
vcpu_timings = ret[2]
|
||||
if uri[0:5] == "unix:":
|
||||
os.remove(uri[5:])
|
||||
|
||||
if os.path.exists(srcmonaddr):
|
||||
os.remove(srcmonaddr)
|
||||
|
||||
if self._dst_host == "localhost" and os.path.exists(dstmonaddr):
|
||||
os.remove(dstmonaddr)
|
||||
|
||||
if self._verbose:
|
||||
print("Finished migration")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user