From: Jason Wang <jasowang@xxxxxxxxxx> Run some workload in the background and do the migration would be helpful to verfiy the correctness, so this patch use the Thread class to wait for the completion of autotest cmd -- "bin/autotest control" and do the migration in parallel. Changes from v1: - Use the new super cool vm.migrate() method Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> --- client/tests/kvm/kvm_test_utils.py | 33 +++++++++++++++++++++++++++++-- client/tests/kvm/tests/autotest.py | 5 +++- client/tests/kvm/tests_base.cfg.sample | 11 ++++++++++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py index c1bff29..c9a9b42 100644 --- a/client/tests/kvm/kvm_test_utils.py +++ b/client/tests/kvm/kvm_test_utils.py @@ -429,7 +429,7 @@ def get_memory_info(lvms): return meminfo -def run_autotest(vm, session, control_path, timeout, outputdir): +def run_autotest(vm, session, control_path, timeout, outputdir, params): """ Run an autotest control file inside a guest (linux only utility). @@ -439,6 +439,9 @@ def run_autotest(vm, session, control_path, timeout, outputdir): @param timeout: Timeout under which the autotest control file must complete. @param outputdir: Path on host where we should copy the guest autotest results to. + + The following params is used by the migration + @param params: Test params used in the migration test """ def copy_if_hash_differs(vm, local_path, remote_path): """ @@ -515,6 +518,11 @@ def run_autotest(vm, session, control_path, timeout, outputdir): raise error.TestError("Invalid path to autotest control file: %s" % control_path) + migrate_background = params.get("migrate_background") == "yes" + if migrate_background: + mig_timeout = float(params.get("mig_timeout", "3600")) + mig_protocol = params.get("migration_protocol", "tcp") + compressed_autotest_path = "/tmp/autotest.tar.bz2" # To avoid problems, let's make the test use the current AUTODIR @@ -551,12 +559,31 @@ def run_autotest(vm, session, control_path, timeout, outputdir): except kvm_subprocess.ShellError: pass try: + bg = None try: logging.info("---------------- Test output ----------------") - session.cmd_output("bin/autotest control", timeout=timeout, - print_func=logging.info) + if migrate_background: + mig_timeout = float(params.get("mig_timeout", "3600")) + mig_protocol = params.get("migration_protocol", "tcp") + + bg = kvm_utils.Thread(session.cmd_output, + kwargs={'cmd': "bin/autotest control", + 'timeout': timeout, + 'print_func': logging.info}) + + bg.start() + + while bg.is_alive(): + logging.info("Tests is not ended, start a round of" + "migration ...") + vm.migrate(timeout=mig_timeout, protocol=mig_protocol) + else: + session.cmd_output("bin/autotest control", timeout=timeout, + print_func=logging.info) finally: logging.info("------------- End of test output ------------") + if migrate_background and bg: + bg.join() except kvm_subprocess.ShellTimeoutError: if vm.is_alive(): get_results() diff --git a/client/tests/kvm/tests/autotest.py b/client/tests/kvm/tests/autotest.py index 0b97b03..37e1b00 100644 --- a/client/tests/kvm/tests/autotest.py +++ b/client/tests/kvm/tests/autotest.py @@ -19,8 +19,11 @@ def run_autotest(test, params, env): # Collect test parameters timeout = int(params.get("test_timeout", 300)) + migrate = params.get("migrate" , "no") == "yes" control_path = os.path.join(test.bindir, "autotest_control", params.get("test_control_file")) outputdir = test.outputdir - kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir) + kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir, + params) + diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample index 047b0f3..c5d9ca3 100644 --- a/client/tests/kvm/tests_base.cfg.sample +++ b/client/tests/kvm/tests_base.cfg.sample @@ -170,6 +170,17 @@ variants: - with_file_transfer: iterations = 1 type = migration_with_file_transfer + - with_autotest: + type = autotest + migrate_background = yes + test_timeout = 1800 + variants: + - dbench: + test_control_file = dbench.control + - stress: + test_control_file = stress.control + - monotonic_time: + test_control_file = monotonic_time.control - migrate_multi_host: install setup unattended_install.cdrom type = migration_multi_host -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html