@@ -34,6 +34,7 @@ class kvm_runtest_2(test.test):
"migration": test_routine("kvm_tests", "run_migration"),
"yum_update": test_routine("kvm_tests", "run_yum_update"),
"autotest": test_routine("kvm_tests", "run_autotest"),
+ "saveload": test_routine("kvm_tests", "run_save_load"),
"kvm_install": test_routine("kvm_install", "run_kvm_install"),
"linux_s3": test_routine("kvm_tests", "run_linux_s3"),
}
@@ -48,6 +48,12 @@ variants:
reboot = yes
extra_params += " -snapshot"
kill_vm_on_error = yes
+
+ - saveload: install
+ type = saveload
+ pre_command = "if [ -f kvm_save_test_file ] ; then rm -rf kvm_save_test_file; fi"
+ do_command = "touch kvm_save_test_file
+ verify_command = "[ -f kvm_save_test_file ]"
- migrate: install setup
type = migration
@@ -449,3 +449,100 @@ def run_linux_s3(test, params, env):
kvm_log.info("VM resumed after S3")
session.close()
+
+def run_save_load(test, params, env):
+ # state testing, save and load vm state
+ vm = kvm_utils.env_get_vm(env, params.get("main_vm"))
+ if not vm:
+ message = "VM object not found in environment"
+ kvm_log.error(message)
+ raise error.TestError, message
+ if not vm.is_alive():
+ message = "VM seems to be dead; Test requires a living VM"
+ kvm_log.error(message)
+ raise error.TestError, message
+
+ kvm_log.info("Waiting for guest to be up...")
+
+ pxssh = kvm_utils.wait_for(vm.ssh_login, 240, 0, 2)
+ if not pxssh:
+ message = "Could not log into guest"
+ kvm_log.error(message)
+ raise error.TestFail, message
+
+ pre_command=params.get("pre_command")
+ do_command=params.get("do_command")
+ verify_command=params.get("verify_command")
+
+ # do preparation
+ kvm_log.info("Logged in")
+ kvm_log.info("Doing preparation ... %s" % pre_command)
+ if not pxssh.send_command(pre_command):
+ message = "%s failed" % pre_command
+ kvm_log.error(message)
+ raise error.TestFail, message
+ pxssh.close()
+ kvm_log.info("Logged out")
+
+ # save state
+ kvm_log.info("Saving VM state ...")
+ vm.send_monitor_cmd('savevm test1')
+ s, o = vm.send_monitor_cmd('info snapshots')
+ if not 'test1' in o:
+ message = "Saveing VM state error %s" % o
+ kvm_log.error(message)
+ raise error.TestFail, message
+ kvm_log.info(o)
+ kvm_log.info("VM state saved")
+
+ kvm_log.info("Destroying VM ...")
+ vm.destroy();
+ kvm_log.info("VM Destroyed")
+
+ kvm_log.info("Booting VM...")
+ if not vm.create():
+ message = "Could no recreate VM instance"
+ kvm_log.error(message)
+ raise error.TestError, message
+ kvm_log.info("VM recreated")
+
+ # do modification
+ pxssh = kvm_utils.wait_for(vm.ssh_login, 240, 0, 2)
+ if not pxssh:
+ message = "Could not log into guest"
+ kvm_log.error(message)
+ raise error.TestFail, message
+ kvm_log.info("Logged in")
+ kvm_log.info("Doing modification %s" % do_command)
+ if not pxssh.send_command(do_command):
+ message = "%s failed" % do_command
+ kvm_log.error(message)
+ raise error.TestFail, message
+ pxssh.close()
+ kvm_log.info("Logged out")
+
+ # load state
+ kvm_log.info("Loading VM state ...")
+ s, o = vm.send_monitor_cmd('loadvm test1')
+ kvm_log.info(o)
+ if "Error" in o:
+ message = "VM state load failed: %s" % o
+ kvm_log.error(message)
+ raise error.TestFail, message
+ kvm_log.info("VM state loaded")
+
+ # verify the status
+ pxssh = kvm_utils.wait_for(vm.ssh_login, 240, 0, 2)
+ if not pxssh:
+ message = "Could not log into guest"
+ kvm_log.error(message)
+ raise error.TestFail, message
+ kvm_log.info("Verifying ... %s" % verify_command)
+ if pxssh.send_command(verify_command):
+ message = "Loaded state does not match previous saved one"
+ kvm_log.error(message)
+ raise error.TestFail, message
+
+ vm.send_command("delvm test1")
+
+ pxssh.close()