diff mbox

[1/2] KVM test: autotest subtest - avoid dependencies on symlinks

Message ID 1260300164-9916-1-git-send-email-lmr@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lucas Meneghel Rodrigues Dec. 8, 2009, 7:22 p.m. UTC
None
diff mbox

Patch

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