Currently the autotest subtest relies on symbolic
links placed in the kvm test. During the control
file cleanup discussions, we decided we don't want
to rely on symlinks too heavily, then make the
autotest subtest a bit more robust, avoiding such
dependencies.

Note: If the control file cleanup is accepted, the
autotest test won't work without this patch.

Signed-off-by: Lucas Meneghel Rodrigues <l...@redhat.com>
---
 client/tests/kvm/tests/autotest.py |   75 +++++++++++++++++++++++-------------
 1 files changed, 48 insertions(+), 27 deletions(-)

diff --git a/client/tests/kvm/tests/autotest.py 
b/client/tests/kvm/tests/autotest.py
index 798217d..f19a2ec 100644
--- a/client/tests/kvm/tests/autotest.py
+++ b/client/tests/kvm/tests/autotest.py
@@ -1,5 +1,6 @@
 import os, logging
 from autotest_lib.client.common_lib import error
+from autotest_lib.client.bin import utils
 import kvm_subprocess, kvm_utils, kvm_test_utils, scan_results
 
 
@@ -21,14 +22,26 @@ def run_autotest(test, params, env):
         @param remote_path: Remote path
         """
         copy = False
+        basename = os.path.basename(local_path)
         output = session.get_command_output("ls -l %s" % remote_path)
-        if ("such file" in output or
-            int(output.split()[4]) != os.path.getsize(local_path)):
-            basename = os.path.basename(local_path)
-            logging.info("Copying %s to guest (file is missing or has a "
-                         "different size)..." % basename)
+        local_size = os.path.getsize(local_path)
+        if "such file" in output:
+            logging.info("Copying %s to guest (remote file is missing)" %
+                         basename)
+            copy = True
+        else:
+            remote_size = int(output.split()[4])
+            if remote_size != local_size:
+                logging.info("Copying %s to guest due to size mismatch"
+                             "(remote size %s, local size %s)" % (basename,
+                                                                  remote_size,
+                                                                  local_size))
+                copy = True
+
+        if copy:
             if not vm.copy_files_to(local_path, remote_path):
-                raise error.TestFail("Could not copy %s to guest" % basename)
+                raise error.TestFail("Could not copy %s to guest" % local_path)
+
 
     def extract(vm, remote_path, dest_dir="."):
         """
@@ -40,10 +53,11 @@ def run_autotest(test, params, env):
         """
         basename = os.path.basename(remote_path)
         logging.info("Extracting %s..." % basename)
-        status = session.get_command_status("tar xfj %s -C %s" %
-                                            (remote_path, dest_dir))
+        (status, output) = session.get_command_status_output(
+                                  "tar xjvf %s -C %s" % (remote_path, 
dest_dir))
         if status != 0:
-            raise error.TestFail("Could not extract %s" % basename)
+            raise error.TestFail("Could not extract %s, command output: %s" %
+                                 (basename, output))
 
     vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
     session = kvm_test_utils.wait_for_login(vm)
@@ -52,54 +66,60 @@ def run_autotest(test, params, env):
     test_name = params.get("test_name")
     test_timeout = int(params.get("test_timeout", 300))
     test_control_file = params.get("test_control_file", "control")
+
     tarred_autotest_path = "/tmp/autotest.tar.bz2"
     tarred_test_path = "/tmp/%s.tar.bz2" % test_name
 
+    # To avoid problems, let's make the test use the current AUTODIR
+    # (autotest client path) location
+    autotest_path = os.environ['AUTODIR']
+    tests_path = os.path.join(autotest_path, 'tests')
+    test_path = os.path.join(tests_path, test_name)
+
     # tar the contents of bindir/autotest
-    cmd = "cd %s; tar cvjf %s autotest/*"
-    cmd += " --exclude=autotest/tests"
-    cmd += " --exclude=autotest/results"
-    cmd += " --exclude=autotest/tmp"
-    cmd += " --exclude=autotest/control"
+    cmd = "tar cvjf %s %s/*" % (tarred_autotest_path, autotest_path)
+    cmd += " --exclude=%s/tests" % autotest_path
+    cmd += " --exclude=%s/results" % autotest_path
+    cmd += " --exclude=%s/tmp" % autotest_path
+    cmd += " --exclude=%s/control" % autotest_path
     cmd += " --exclude=*.pyc"
     cmd += " --exclude=*.svn"
     cmd += " --exclude=*.git"
-    kvm_subprocess.run_fg(cmd % (test.bindir, tarred_autotest_path), 
timeout=30)
+    utils.run(cmd)
 
     # tar the contents of bindir/autotest/tests/<test_name>
-    cmd = "cd %s; tar cvjf %s %s/*"
+    cmd = "tar cvjf %s %s/*" % (tarred_test_path, test_path)
     cmd += " --exclude=*.pyc"
     cmd += " --exclude=*.svn"
     cmd += " --exclude=*.git"
-    kvm_subprocess.run_fg(cmd %
-                          (os.path.join(test.bindir, "autotest", "tests"),
-                           tarred_test_path, test_name), timeout=30)
+    utils.run(cmd)
 
     # Copy autotest.tar.bz2
-    copy_if_size_differs(vm, tarred_autotest_path, "autotest.tar.bz2")
+    copy_if_size_differs(vm, tarred_autotest_path, tarred_autotest_path)
 
     # Copy <test_name>.tar.bz2
-    copy_if_size_differs(vm, tarred_test_path, test_name + ".tar.bz2")
+    copy_if_size_differs(vm, tarred_test_path, tarred_test_path)
 
     # Extract autotest.tar.bz2
-    extract(vm, "autotest.tar.bz2")
+    extract(vm, tarred_autotest_path, "/")
 
     # mkdir autotest/tests
-    session.get_command_output("mkdir autotest/tests")
+    session.get_command_output("mkdir -p %s" % tests_path)
 
     # Extract <test_name>.tar.bz2 into autotest/tests
-    extract(vm, test_name + ".tar.bz2", "autotest/tests")
+    extract(vm, tarred_test_path, "/")
 
     # Copy the selected control file (located inside
     # test.bindir/autotest_control) to the autotest dir
     control_file_path = os.path.join(test.bindir, "autotest_control",
                                      test_control_file)
-    if not vm.copy_files_to(control_file_path, "autotest/control"):
+    if not vm.copy_files_to(control_file_path,
+                            os.path.join(autotest_path, 'control')):
         raise error.TestFail("Could not copy the test control file to guest")
 
     # Run the test
     logging.info("Running test '%s'..." % test_name)
-    session.get_command_output("cd autotest")
+    session.get_command_output("cd %s" % autotest_path)
     session.get_command_output("rm -f control.state")
     session.get_command_output("rm -rf results/*")
     logging.info("---------------- Test output ----------------")
@@ -121,7 +141,8 @@ def run_autotest(test, params, env):
     guest_results_dir = os.path.join(test.outputdir, "guest_results")
     if not os.path.exists(guest_results_dir):
         os.mkdir(guest_results_dir)
-    if not vm.copy_files_from("autotest/results/default/*", guest_results_dir):
+    if not vm.copy_files_from("%s/results/default/*" % autotest_path,
+                              guest_results_dir):
         logging.error("Could not copy results back from guest")
 
     # Report test results
-- 
1.6.5.2

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to