Based on Naphtali Sprei's patches. Signed-off-by: Michael Goldish <mgoldish@xxxxxxxxxx> --- client/tests/kvm/tests/unittest.py | 66 ++++++++++++++++++++++++++++++++++++ 1 files changed, 66 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..c073d04 --- /dev/null +++ b/client/tests/kvm/tests/unittest.py @@ -0,0 +1,66 @@ +import logging, time, select, os, difflib +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) Compare output with reference output + + @param test: kvm test object + @param params: Dictionary with the test parameters + @param env: Dictionary with test environment. + """ + # Get params + ref_output_filename = params.get("reference_output") + if not ref_output_filename: + raise error.TestError("reference_output not specified") + ref_output_filename = kvm_utils.get_path(test.bindir, ref_output_filename) + if not os.path.exists(ref_output_filename): + raise error.TestError("Reference file not found: %s" % + ref_output_filename) + timeout = float(params.get("unittest_timeout", 60)) + + # Get VM + vm = kvm_test_utils.get_living_vm(env, params.get("main_vm")) + # Resume VM if stopped + vm.send_monitor_cmd("cont") + + 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: + dead = vm.is_dead() + line = f.readline() + if line: + logging.info(line.rstrip()) + elif dead: + break + else: + time.sleep(1) + else: + raise error.TestFail("Timeout elapsed (%ss)" % timeout) + 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, 0, 1, timeout): + raise error.TestFail("Timeout elapsed (%ss)" % timeout) + + # Compare output with reference_output + logging.info("Comparing test output with reference output") + test_output = open(vm.testlog_file_name, "U").readlines() + ref_output = open(ref_output_filename, "U").readlines() + if test_output != ref_output: + logging.error("Difference between reference output and test output:") + for line in difflib.unified_diff(ref_output, test_output): + logging.error(line.rstrip()) + raise error.TestFail("Test output differs from reference output") -- 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