Based on Naphtali Sprei's patches. Changes from v1: - Determine success/failure by exit status instead of output - Restructure loop so that vm.is_dead() is called less often - Copy test log to debugdir/unittest.log - Change parameters passed to wait_for() Signed-off-by: Michael Goldish <mgoldish@xxxxxxxxxx> --- client/tests/kvm/tests/unittest.py | 65 ++++++++++++++++++++++++++++++++++++ 1 files changed, 65 insertions(+), 0 deletions(-) create mode 100644 client/tests/kvm/tests/unittest.py diff --git a/client/tests/kvm/tests/unittest.py b/client/tests/kvm/tests/unittest.py new file mode 100644 index 0000000..4570096 --- /dev/null +++ b/client/tests/kvm/tests/unittest.py @@ -0,0 +1,65 @@ +import logging, time, os, shutil +from autotest_lib.client.common_lib import error +import kvm_subprocess, kvm_test_utils, kvm_utils + + +def run_unittest(test, params, env): + """ + KVM RHEL-6 style unit test: + 1) Resume a stopped VM + 2) Wait for VM to terminate + 3) Make sure qemu's exit status is 0 + + @param test: kvm test object + @param params: Dictionary with the test parameters + @param env: Dictionary with test environment + """ + # Get VM + vm = kvm_test_utils.get_living_vm(env, params.get("main_vm")) + # Resume VM if stopped + vm.send_monitor_cmd("cont") + + timeout = float(params.get("unittest_timeout", 60)) + + try: + if params.get("log_output") == "yes": + # Log test output + f = open(vm.testlog_file_name) + logging.info("-------- Test output --------") + try: + end_time = time.time() + timeout + while time.time() < end_time: + line = f.readline() + if line: + logging.info(line.rstrip()) + elif vm.is_dead(): + break + else: + time.sleep(1) + else: + raise error.TestFail("Timeout elapsed (%ss)" % timeout) + # Make sure everything has been read and logged + while True: + line = f.readline() + if line: + logging.info(line.rstrip()) + else: + break + finally: + logging.info("-------- End of test output --------") + f.close() + else: + # Just wait for the VM to terminate + logging.info("Waiting for VM to terminate...") + if not kvm_utils.wait_for(vm.is_dead, timeout): + raise error.TestFail("Timeout elapsed (%ss)" % timeout) + finally: + # Copy test log to debugdir/unittest.log + testlog_path = os.path.join(test.debugdir, "unittest.log") + shutil.copy(vm.testlog_file_name, testlog_path) + + # Check qemu's exit status + status = vm.process.get_status() + if status != 0: + raise error.TestFail("qemu exited with status %s (see unittest " + "output at %s)" % (status, testlog_path)) -- 1.5.4.1 -- 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