[KVM-AUTOTEST PATCH 02/18] KVM test: kvm.py: suppress exceptions during postprocessing if the test fails

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



We don't want an exception during postprocessing to mask the exception that
caused the failure.

Also, move abort-on-error handling from kvm_preprocessing.py to kvm.py, and
modify some debug messages.

Signed-off-by: Michael Goldish <mgoldish@xxxxxxxxxx>
---
 client/tests/kvm/kvm.py               |  100 +++++++++++++++++++++-----------
 client/tests/kvm/kvm_preprocessing.py |   14 -----
 2 files changed, 65 insertions(+), 49 deletions(-)

diff --git a/client/tests/kvm/kvm.py b/client/tests/kvm/kvm.py
index c6e146d..bab1e6f 100644
--- a/client/tests/kvm/kvm.py
+++ b/client/tests/kvm/kvm.py
@@ -32,49 +32,79 @@ class kvm(test.test):
             self.write_test_keyval({key: params[key]})
 
         # Open the environment file
+        logging.info("Unpickling env. You may see some harmless error "
+                     "messages.")
         env_filename = os.path.join(self.bindir, params.get("env", "env"))
         env = kvm_utils.load_env(env_filename, {})
-        logging.debug("Contents of environment: %s", str(env))
+        logging.debug("Contents of environment: %s", env)
+
+        test_passed = False
 
         try:
             try:
-                # Get the test routine corresponding to the specified test type
-                t_type = params.get("type")
-                # Verify if we have the correspondent source file for it
-                subtest_dir = os.path.join(self.bindir, "tests")
-                module_path = os.path.join(subtest_dir, "%s.py" % t_type)
-                if not os.path.isfile(module_path):
-                    raise error.TestError("No %s.py test file found" % t_type)
-                # Load the test module
-                f, p, d = imp.find_module(t_type, [subtest_dir])
-                test_module = imp.load_module(t_type, f, p, d)
-                f.close()
-
-                # Preprocess
                 try:
-                    kvm_preprocessing.preprocess(self, params, env)
-                finally:
-                    kvm_utils.dump_env(env, env_filename)
-                # Run the test function
-                run_func = getattr(test_module, "run_%s" % t_type)
-                try:
-                    run_func(self, params, env)
-                finally:
-                    kvm_utils.dump_env(env, env_filename)
+                    # Get the test routine corresponding to the specified
+                    # test type
+                    t_type = params.get("type")
+                    # Verify if we have the correspondent source file for it
+                    subtest_dir = os.path.join(self.bindir, "tests")
+                    module_path = os.path.join(subtest_dir, "%s.py" % t_type)
+                    if not os.path.isfile(module_path):
+                        raise error.TestError("No %s.py test file found" %
+                                              t_type)
+                    # Load the test module
+                    f, p, d = imp.find_module(t_type, [subtest_dir])
+                    test_module = imp.load_module(t_type, f, p, d)
+                    f.close()
 
-            except Exception, e:
-                logging.error("Test failed: %s", e)
-                logging.debug("Postprocessing on error...")
+                    # Preprocess
+                    try:
+                        kvm_preprocessing.preprocess(self, params, env)
+                    finally:
+                        kvm_utils.dump_env(env, env_filename)
+                    # Run the test function
+                    run_func = getattr(test_module, "run_%s" % t_type)
+                    try:
+                        run_func(self, params, env)
+                    finally:
+                        kvm_utils.dump_env(env, env_filename)
+                    test_passed = True
+
+                except Exception, e:
+                    logging.error("Test failed: %s", e)
+                    try:
+                        kvm_preprocessing.postprocess_on_error(
+                            self, params, env)
+                    finally:
+                        kvm_utils.dump_env(env, env_filename)
+                    raise
+
+            finally:
+                # Postprocess
                 try:
-                    kvm_preprocessing.postprocess_on_error(self, params, env)
+                    try:
+                        kvm_preprocessing.postprocess(self, params, env)
+                    except Exception, e:
+                        if test_passed:
+                            raise
+                        logging.error("Exception raised during "
+                                      "postprocessing: %s", e)
                 finally:
                     kvm_utils.dump_env(env, env_filename)
-                raise
+                    logging.debug("Contents of environment: %s", env)
 
-        finally:
-            # Postprocess
-            try:
-                kvm_preprocessing.postprocess(self, params, env)
-            finally:
-                kvm_utils.dump_env(env, env_filename)
-                logging.debug("Contents of environment: %s", str(env))
+        except Exception, e:
+            if params.get("abort_on_error") != "yes":
+                raise
+            # Abort on error
+            logging.info("Aborting job (%s)", e)
+            for vm in kvm_utils.env_get_all_vms(env):
+                if vm.is_dead():
+                    continue
+                logging.info("VM '%s' is alive.", vm.name)
+                for m in vm.monitors:
+                    logging.info("'%s' has a %s monitor unix socket at: %s",
+                                 vm.name, m.protocol, m.filename)
+                logging.info("The command line used to start '%s' was:\n%s",
+                             vm.name, vm.make_qemu_command())
+            raise error.JobError("Abort requested (%s)" % e)
diff --git a/client/tests/kvm/kvm_preprocessing.py b/client/tests/kvm/kvm_preprocessing.py
index 17f3a29..84ad7c5 100644
--- a/client/tests/kvm/kvm_preprocessing.py
+++ b/client/tests/kvm/kvm_preprocessing.py
@@ -362,20 +362,6 @@ def postprocess(test, params, env):
                         int(params.get("post_command_timeout", "600")),
                         params.get("post_command_noncritical") == "yes")
 
-    # Abort on error?
-    if params.get("abort") == "yes":
-        exc_string = str(sys.exc_info()[1])
-        logging.info("Aborting job (%s)", exc_string)
-        for vm in kvm_utils.env_get_all_vms(env):
-            if not vm.is_dead():
-                logging.info("VM '%s' is alive.", vm.name)
-                for m in vm.monitors:
-                    logging.info("'%s' has a %s monitor unix socket at: %s",
-                                 vm.name, m.protocol, m.filename)
-                logging.info("The command line used to start '%s' was:\n%s",
-                             vm.name, vm.make_qemu_command())
-        raise error.JobError("Abort requested (%s)" % exc_string)
-
 
 def postprocess_on_error(test, params, env):
     """
-- 
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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux