提交 76880bc7 编写于 作者: F Feng Yang

Merge pull request #240 from spcui/migration_multi_host

qemu.tests: Improve migration_multi_host
import logging import logging
import os import time
from autotest.client.shared import error from autotest.client.shared import error
from virttest import utils_test, remote, virt_vm, utils_misc from virttest import utils_test
@error.context_aware @error.context_aware
...@@ -21,12 +21,6 @@ def run(test, params, env): ...@@ -21,12 +21,6 @@ def run(test, params, env):
:param params: Dictionary with test parameters. :param params: Dictionary with test parameters.
:param env: Dictionary with the test environment. :param env: Dictionary with the test environment.
""" """
login_timeout = int(params.get("login_timeout", 360))
pre_sub_test = params.get("pre_sub_test")
post_sub_test = params.get("post_sub_test")
pre_sub_test_timeout = int(params.get("pre_sub_test_timeout", "240"))
login_before_pre_tests = params.get("login_before_pre_tests", "no")
mig_protocol = params.get("mig_protocol", "tcp") mig_protocol = params.get("mig_protocol", "tcp")
mig_type = utils_test.qemu.MultihostMigration mig_type = utils_test.qemu.MultihostMigration
if mig_protocol == "fd": if mig_protocol == "fd":
...@@ -34,31 +28,84 @@ def run(test, params, env): ...@@ -34,31 +28,84 @@ def run(test, params, env):
if mig_protocol == "exec": if mig_protocol == "exec":
mig_type = utils_test.qemu.MultihostMigrationExec mig_type = utils_test.qemu.MultihostMigrationExec
vms = params.get("vms").split(" ") class TestMultihostMigration(mig_type):
srchost = params["hosts"][0]
dsthost = params["hosts"][1] def __init__(self, test, params, env):
is_src = params["hostid"] == srchost super(TestMultihostMigration, self).__init__(test, params, env)
self.srchost = self.params.get("hosts")[0]
self.dsthost = self.params.get("hosts")[1]
self.is_src = params["hostid"] == self.srchost
self.vms = params["vms"].split()
self.vm = params["vms"].split()[0]
self.login_timeout = int(params.get("login_timeout", 360))
self.pre_sub_test = params.get("pre_sub_test")
self.post_sub_test = params.get("post_sub_test")
self.login_before_pre_tests = params.get("login_before_pre_tests", "no")
self.mig_bg_command = params.get("migration_bg_command",
"cd /tmp; nohup ping localhost &")
self.mig_bg_check_command = params.get("migration_bg_check_command",
"pgrep ping")
self.mig_bg_kill_command = params.get("migration_bg_kill_command",
"pkill -9 ping")
self.need_to_login = params.get("need_to_login", "no")
if is_src: # is destination def run_pre_sub_test(self):
if pre_sub_test: # is source host
if login_before_pre_tests == "yes": if self.is_src:
vm = env.get_vm(vms[0]) if self.pre_sub_test:
vm.wait_for_login(timeout=login_timeout) if self.login_before_pre_tests == "yes":
vm = env.get_vm(params["main_vm"])
vm.wait_for_login(timeout=self.login_timeout)
error.context("Run sub test '%s' before migration on src" error.context("Run sub test '%s' before migration on src"
% pre_sub_test, logging.info) % self.pre_sub_test, logging.info)
utils_test.run_virt_sub_test(test, params, env, pre_sub_test) utils_test.run_virt_sub_test(test, params, env,
self.pre_sub_test)
def run_post_sub_test(self):
# is destination host
if not self.is_src:
if self.post_sub_test:
error.context("Run sub test '%s' after migration on dst"
% self.post_sub_test, logging.info)
utils_test.run_virt_sub_test(test, params, env,
self.post_sub_test)
def migration_scenario(self, worker=None):
def start_worker(mig_data):
logging.info("Try to login guest before migration test.")
vm = env.get_vm(params["main_vm"])
session = vm.wait_for_login(timeout=self.login_timeout)
session.sendline(self.mig_bg_command)
time.sleep(5)
def check_worker(mig_data):
if not self.is_src:
logging.info("Try to login guest after migration test.")
vm = env.get_vm(params["main_vm"])
session = vm.wait_for_login(timeout=self.login_timeout)
logging.info("Check the background command in the guest.")
s, o = session.cmd_status_output(self.mig_bg_check_command)
if s:
raise error.TestFail("Background command not found,"
" Migration failed.")
logging.info("Kill the background command in the guest.")
session.sendline(self.mig_bg_kill_command)
session.close()
if params.get("check_vm_before_migration", "yes") == "no": if params.get("check_vm_before_migration", "yes") == "no":
params['check_vm_needs_restart'] = "no" params["check_vm_needs_restart"] = "no"
mig = mig_type(test, params, env, False) self.run_pre_sub_test()
mig._hosts_barrier([srchost, dsthost],
{'src': srchost, 'dst': dsthost, "vms": vms[0]},
"sync", pre_sub_test_timeout)
mig.migrate_wait([vms[0]], srchost, dsthost)
if not is_src: # is destination if self.need_to_login == "yes":
if post_sub_test: self.migrate_wait([self.vm], self.srchost, self.dsthost,
error.context("Run sub test '%s' after migration on dst" start_work=start_worker,
% post_sub_test, logging.info) check_work=check_worker)
utils_test.run_virt_sub_test(test, params, env, post_sub_test) else:
self.migrate_wait([self.vm], self.srchost, self.dsthost)
self.run_post_sub_test()
mig = TestMultihostMigration(test, params, env)
mig.run()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册