diff --git a/libvirt/tests/cfg/migration/async_job/abort_before_qemu_layer_mig_start.cfg b/libvirt/tests/cfg/migration/async_job/abort_before_qemu_layer_mig_start.cfg new file mode 100644 index 0000000000..aa5bea1177 --- /dev/null +++ b/libvirt/tests/cfg/migration/async_job/abort_before_qemu_layer_mig_start.cfg @@ -0,0 +1,52 @@ +- migration.async_job.abort_before_qemu_layer_mig_start: + type = abort_before_qemu_layer_mig_start + migration_setup = 'yes' + storage_type = 'nfs' + setup_local_nfs = 'yes' + disk_type = "file" + disk_source_protocol = "netfs" + mnt_path_name = ${nfs_mount_dir} + # Console output can only be monitored via virsh console output + only_pty = True + take_regular_screendumps = no + # Extra options to pass after + virsh_migrate_extra = '' + # SSH connection time out + ssh_timeout = 60 + # Local URI + virsh_migrate_connect_uri = 'qemu:///system' + virsh_migrate_dest_state = "running" + virsh_migrate_src_state = "shut off" + image_convert = 'no' + server_ip = "${migrate_dest_host}" + server_user = "root" + server_pwd = "${migrate_dest_pwd}" + status_error = "yes" + check_network_accessibility_after_mig = "yes" + migrate_speed = "15" + err_msg = "error: operation aborted: migration out: canceled by client" + migrate_again_status_error = "no" + start_vm = "yes" + variants: + - p2p: + virsh_migrate_options = '--live --p2p --verbose' + variants: + - with_precopy: + variants: + - tcp: + migrate_desturi_port = "16509" + migrate_desturi_type = "tcp" + virsh_migrate_desturi = "qemu+tcp://${migrate_dest_host}/system" + - unix: + transport_type = "unix_proxy" + service_to_check = "" + migrateuri_socket_path = "/var/lib/libvirt/qemu/migrateuri-socket" + desturi_socket_path = "/tmp/desturi-socket" + migrate_desturi_type = "unix_proxy" + virsh_migrate_desturi = "qemu+unix:///system?socket=${desturi_socket_path}" + migrateuri_port = "33334" + port_to_check = "${migrateuri_port}" + virsh_migrate_migrateuri = "unix://${migrateuri_socket_path}" + virsh_migrate_extra = "--migrateuri ${virsh_migrate_migrateuri}" + variants abort_mig: + - domjobabort: diff --git a/libvirt/tests/src/migration/async_job/abort_before_qemu_layer_mig_start.py b/libvirt/tests/src/migration/async_job/abort_before_qemu_layer_mig_start.py new file mode 100644 index 0000000000..aa70a8cd5c --- /dev/null +++ b/libvirt/tests/src/migration/async_job/abort_before_qemu_layer_mig_start.py @@ -0,0 +1,84 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright Redhat +# +# SPDX-License-Identifier: GPL-2.0 +# +# Author: Liping Cheng +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +import queue +import threading +import time + +from virttest import remote +from virttest import virsh +from virttest.utils_test import libvirt + +from provider.migration import base_steps + +msg_queue = queue.Queue() + + +def run_migration(vm_name, dest_uri, option, extra): + """ + Run migration + + :param vm_name: VM name + :param dest_uri: virsh uri + :param option: virsh migrate option parameters + :param extra: virsh migrate extra parameters + """ + ret = virsh.migrate(vm_name, dest_uri, option, extra, ignore_status=True, debug=True) + msg_queue.put(ret) + + +def run(test, params, env): + """ + Abort migration job before qemu layer migration starts, then migrate vm + again. + + """ + def setup_test(): + """ + Setup steps + + """ + test.log.info("Setup steps.") + migration_obj.setup_connection() + remote.run_remote_cmd("pkill -19 virtqemud", params) + + def run_test(): + """ + Run test + + """ + dest_uri = params.get("virsh_migrate_desturi") + option = params.get("virsh_migrate_options", "--live --verbose") + extra = params.get("virsh_migrate_extra") + err_msg = params.get("err_msg") + + mig_t = threading.Thread(target=run_migration, args=(vm_name, dest_uri, option, extra)) + mig_t.start() + time.sleep(3) + + virsh.domjobabort(vm_name, debug=True) + remote.run_remote_cmd("pkill -18 virtqemud", params) + mig_t.join() + + output = msg_queue.get() + libvirt.check_result(output, err_msg) + + vm_name = params.get("migrate_main_vm") + + vm = env.get_vm(vm_name) + migration_obj = base_steps.MigrationBase(test, vm, params) + + try: + setup_test() + run_test() + migration_obj.run_migration_again() + migration_obj.verify_default() + finally: + migration_obj.cleanup_connection()