diff mbox

[KVM-AUTOTEST,3/4] KVM test: add wrapper for RHEL-6 style unittests

Message ID 1275562997-26311-3-git-send-email-mgoldish@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michael Goldish June 3, 2010, 11:03 a.m. UTC
None
diff mbox

Patch

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")