提交 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]
if is_src: # is destination self.dsthost = self.params.get("hosts")[1]
if pre_sub_test: self.is_src = params["hostid"] == self.srchost
if login_before_pre_tests == "yes": self.vms = params["vms"].split()
vm = env.get_vm(vms[0]) self.vm = params["vms"].split()[0]
vm.wait_for_login(timeout=login_timeout) self.login_timeout = int(params.get("login_timeout", 360))
error.context("Run sub test '%s' before migration on src" self.pre_sub_test = params.get("pre_sub_test")
% pre_sub_test, logging.info) self.post_sub_test = params.get("post_sub_test")
utils_test.run_virt_sub_test(test, params, env, pre_sub_test) self.login_before_pre_tests = params.get("login_before_pre_tests", "no")
self.mig_bg_command = params.get("migration_bg_command",
if params.get("check_vm_before_migration", "yes") == "no": "cd /tmp; nohup ping localhost &")
params['check_vm_needs_restart'] = "no" self.mig_bg_check_command = params.get("migration_bg_check_command",
"pgrep ping")
mig = mig_type(test, params, env, False) self.mig_bg_kill_command = params.get("migration_bg_kill_command",
mig._hosts_barrier([srchost, dsthost], "pkill -9 ping")
{'src': srchost, 'dst': dsthost, "vms": vms[0]}, self.need_to_login = params.get("need_to_login", "no")
"sync", pre_sub_test_timeout)
mig.migrate_wait([vms[0]], srchost, dsthost) def run_pre_sub_test(self):
# is source host
if not is_src: # is destination if self.is_src:
if post_sub_test: if self.pre_sub_test:
error.context("Run sub test '%s' after migration on dst" if self.login_before_pre_tests == "yes":
% post_sub_test, logging.info) vm = env.get_vm(params["main_vm"])
utils_test.run_virt_sub_test(test, params, env, post_sub_test) vm.wait_for_login(timeout=self.login_timeout)
error.context("Run sub test '%s' before migration on src"
% self.pre_sub_test, logging.info)
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":
params["check_vm_needs_restart"] = "no"
self.run_pre_sub_test()
if self.need_to_login == "yes":
self.migrate_wait([self.vm], self.srchost, self.dsthost,
start_work=start_worker,
check_work=check_worker)
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.
先完成此消息的编辑!
想要评论请 注册