Skip to content

Commit

Permalink
migration: Add case about destroy vm
Browse files Browse the repository at this point in the history
XXX-298199 - [VM migration][async ops] destroy vm during PerformPhase of
migration

Signed-off-by: lcheng <[email protected]>
  • Loading branch information
cliping committed Oct 9, 2024
1 parent 2eb24f1 commit c6cfdd4
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
- migration.async_ops.destroy_vm_during_performphase:
type = destroy_vm_during_performphase
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 <domain> <desturi>
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}"
check_network_accessibility_after_mig = "yes"
migrate_desturi_port = "16509"
migrate_desturi_type = "tcp"
virsh_migrate_desturi = "qemu+tcp://${migrate_dest_host}/system"
status_error = "yes"
migrate_again = "yes"
migrate_again_status_error = "no"
variants:
- p2p:
virsh_migrate_options = '--live --p2p --verbose'
- non_p2p:
virsh_migrate_options = '--live --verbose'
variants:
- with_precopy:
variants:
- destroy_dst_vm_before_vm_paused:
virsh_migrate_extra = "--bandwidth 1"
expected_event_src = ["migration-iteration"]
expected_event_target = ["lifecycle.*Stopped Destroyed"]
expected_dest_state = "nonexist"
expected_src_state = "running"
action_during_mig = [{"func": "virsh.destroy", "after_event": "iteration: '1'", "func_param": {"name": "${main_vm}", "uri": "${virsh_migrate_desturi}"}, "need_sleep_time": "1"}]
err_msg = "domain is not running|Unable to read from socket: Connection reset by peer"
virsh_migrate_extra_mig_again = " "
- destroy_dst_vm_after_vm_paused:
migrate_speed = "10"
action_during_mig = [{"func": "virsh.destroy", "after_event": "Suspended Migrated", "func_param": {"name": "${main_vm}", "uri": "${virsh_migrate_desturi}"}}]
virsh_migrate_extra = "--timeout 2 --timeout-suspend"
expected_event_src = ["lifecycle.*Suspended Migrated", "lifecycle.*Resumed Migrated"]
expected_event_target = ["lifecycle.*Stopped Destroyed"]
expected_dest_state = "nonexist"
expected_src_state = "running"
err_msg = "domain is no longer running|Unable to read from socket: Connection reset by peer"
- destroy_src_vm:
migrate_speed = "10"
virsh_migrate_extra = "--timeout 2 --timeout-suspend"
expected_event_src = ["lifecycle.*Stopped Destroyed"]
expected_event_target = ["lifecycle.*Started Migrated", "lifecycle.*Stopped Failed"]
expected_dest_state = "nonexist"
expected_src_state = "shut off"
action_during_mig = [{"func": "virsh.destroy", "after_event": "iteration: '1'", "func_param": {"name": "${main_vm}"}}]
err_msg = "domain is not running"
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from virttest import virsh

from virttest.utils_test import libvirt

from provider.migration import base_steps
from provider.migration import migration_base


def run(test, params, env):
"""
This case is to verify that if destroying vm during PerformPhase of precopy
migration, migration will fail.
:param test: test object
:param params: Dictionary with the test parameters
:param env: Dictionary with test environment.
"""
def verify_test():
"""
Verify steps
"""
expected_dest_state = params.get("expected_dest_state")
expected_src_state = params.get("expected_src_state")
dest_uri = params.get("virsh_migrate_desturi")

test.log.info("Verify steps.")
if not libvirt.check_vm_state(vm.name, expected_src_state, uri=migration_obj.src_uri):
test.faile("Check vm state on source host fail.")
dest_vm_list = virsh.dom_list(options="--all --persistent", debug=True, uri=dest_uri)
if expected_dest_state == "nonexist":
if vm_name in dest_vm_list.stdout.strip():
test.fail("%s should not exist." % vm_name)

vm_name = params.get("migrate_main_vm")
migrate_again = "yes" == params.get("migrate_again", "no")

virsh_session = None
remote_virsh_session = None

vm = env.get_vm(vm_name)
migration_obj = base_steps.MigrationBase(test, vm, params)

try:
migration_obj.setup_connection()
virsh_session, remote_virsh_session = migration_base.monitor_event(params)
migration_obj.run_migration()
verify_test()
if migrate_again:
migration_obj.run_migration_again()
migration_obj.verify_default()
migration_base.check_event_output(params, test, virsh_session, remote_virsh_session)
finally:
migration_obj.cleanup_connection()

0 comments on commit c6cfdd4

Please sign in to comment.