From b347565ed9cc1bd7cb1ce1e28338f55ef46ddd24 Mon Sep 17 00:00:00 2001 From: lcheng Date: Mon, 30 Oct 2023 12:27:11 +0800 Subject: [PATCH] Update event timeout for copy storage migration 1. It takes longer to get the desired event in copy storage migration. So update event timeout. 2. Add a function to check item multiple times by check_blockjob(). Signed-off-by: lcheng --- virttest/migration.py | 3 ++- virttest/utils_libvirt/libvirt_misc.py | 31 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/virttest/migration.py b/virttest/migration.py index 9fd9ed19fb3..8e65cf5f1c8 100644 --- a/virttest/migration.py +++ b/virttest/migration.py @@ -408,6 +408,7 @@ def _run_complex_func(vm, one_func, virsh_event_session=None): after_event = one_func.get('after_event') before_event = one_func.get('before_event') func = one_func.get('func') + wait_for_after_event_timeout = one_func.get('wait_for_after_event_timeout', '30') if after_event and not virsh_event_session: raise exceptions.TestError("virsh session for collecting domain " "events is not provided") @@ -417,7 +418,7 @@ def _run_complex_func(vm, one_func, virsh_event_session=None): "%s", virsh_event_session.get_stripped_output()) if not utils_misc.wait_for( lambda: re.findall(after_event, - virsh_event_session.get_stripped_output()), 30): + virsh_event_session.get_stripped_output()), wait_for_after_event_timeout): raise exceptions.TestError("Unable to find " "event {}".format(after_event)) LOG.debug("Receive the event '{}'".format(after_event)) diff --git a/virttest/utils_libvirt/libvirt_misc.py b/virttest/utils_libvirt/libvirt_misc.py index e2eec41258e..60325715926 100644 --- a/virttest/utils_libvirt/libvirt_misc.py +++ b/virttest/utils_libvirt/libvirt_misc.py @@ -7,6 +7,12 @@ import re import logging +from avocado.core import exceptions + +from virttest import utils_misc + +from virttest.utils_test import libvirt + LOG = logging.getLogger('avocado.' + __name__) @@ -25,3 +31,28 @@ def convert_to_dict(content, pattern=r'(\d+) +(\S+)'): info_dict[info[0]] = info[1] LOG.debug("The dict converted is:\n%s", info_dict) return info_dict + + +def check_item_by_blockjob(params): + """ + Check item by blockjob, for example, bandwidth, progress. + + :param params: dictionary with the test parameter + """ + vm_name = params.get("main_vm") + check_item = params.get("check_item") + check_item_value = params.get("check_item_value") + target_disk = params.get("target_disk", "vda") + wait_for_timeout = params.get("wait_for_timeout", "10") + + if check_item == "none": + if not utils_misc.wait_for( + lambda: libvirt.check_blockjob(vm_name, target_disk), + wait_for_timeout): + raise exceptions.TestFail("Check failed.") + else: + if not utils_misc.wait_for( + lambda: libvirt.check_blockjob(vm_name, + target_disk, check_item, check_item_value), + wait_for_timeout): + raise exceptions.TestFail("Check '%s' failed." % check_item)