Skip to content

Commit

Permalink
Abort the managedsave progress
Browse files Browse the repository at this point in the history
Abort the managedsave progress, and check the vm should keep running and
check the correspondig events.

Signed-off-by: Yalan Zhang <[email protected]>
  • Loading branch information
yalzhang committed Jan 2, 2025
1 parent 713d07f commit 2eba914
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
9 changes: 9 additions & 0 deletions libvirt/tests/cfg/save_and_restore/abort_managedsave.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
- save_and_restore.abort_managedsave:
type = abort_managedsave
save_opt =
start_vm = no
default_path = "/var/lib/libvirt/qemu/save"
event_cmd = "event --loop --all"
expected_event = ["Suspended Paused", "Resumed Unpaused"]


73 changes: 73 additions & 0 deletions libvirt/tests/src/save_and_restore/abort_managedsave.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import logging
import re
import os

from virttest import virsh
from virttest.libvirt_xml import vm_xml
from provider.save import save_base

LOG = logging.getLogger('avocado.test.' + __name__)
VIRSH_ARGS = {'debug': True, 'ignore_status': False}


def run(test, params, env):
"""
Test the scenario to abort the vm ManagedSave process
Steps:
1. Start the vm, run stress in the vm to slow down the ManagedSave process;
2. Run "virsh managedsave" to save the vm;
3. During the managedsave process, run domjobabort;
4. Check the VM's states after the abort operation and check the events;
"""

vm_name = params.get('main_vm')
vm = env.get_vm(vm_name)
default_path = params.get('default_path')
file_path = default_path + vm_name + '.save'
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
bkxml = vmxml.copy()
event_cmd = params.get("event_cmd")
expected_event = eval(params.get('expected_event'))
try:
vm.start()
session = vm.wait_for_login()
pid_ping, upsince = save_base.pre_save_setup(vm)
LOG.debug(f'Step1: run stress on the vm:')
sh_cmd1 = "dnf install -y stress"
session.cmd(sh_cmd1, ignore_all_errors=True)
sh_cmd2 = "stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --vm-keep"
session.cmd(sh_cmd2, ignore_all_errors=True, timeout=10)
LOG.debug(f'Step2: ManagedSave the VM:')
# Start event session to catch the events
event_session = virsh.EventTracker.start_get_event(vm_name, event_cmd=event_cmd)
cmd = "managedsave %s" % vm_name
virsh_session = virsh.VirshSession(virsh_exec=virsh.VIRSH_EXEC,
auto_close=False)
virsh_session.sendline(cmd)
LOG.debug(f'Step3: Abort the ManagedSave process')
# check if the save process is succeed, cancel the test if save succeed
st = virsh.domjobinfo(vm_name, ignore_status=True).stdout_text.strip()
LOG.debug("domjobinfo: %s", st)
if not re.search("Unbounded", st):
test.cancel("Test cancel since managedsave process completed before abort.")
virsh.domjobabort(vm_name).stdout_text.strip()
LOG.debug(f"Check the VM's state details after save abort")
save_base.post_save_check(vm, pid_ping, upsince)
# check the events for abort
LOG.debug("Step4: Check the event:")
event_output = virsh.EventTracker.finish_get_event(event_session)
for event in expected_event:
if not re.search(event, event_output):
test.fail('Not find: %s from event output:%s' % (event, event_output))
# check VM states details
outputs_ = virsh.domstate(vm_name, "--reason").stdout_text.strip()
LOG.debug("Step5: check the domstate: %s and ensure no saved file", outputs_)
if not re.search("save canceled", outputs_):
test.fail(f"There is no 'save canceled' words in the domstate outputs!")
if os.path.exists(file_path):
test.fail("There should not be the save file since managedsave aborted")
virsh.shutdown(vm_name, **VIRSH_ARGS)
finally:
bkxml.sync()
if os.path.exists(file_path):
os.remove(file_path)

0 comments on commit 2eba914

Please sign in to comment.