[Lldb-commits] [PATCH] D22404: [test] Report error when inferior test processes exit with a non-zero code

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Fri Jul 15 03:09:46 PDT 2016

labath created this revision.
labath added reviewers: tfiala, zturner.
labath added a subscriber: lldb-commits.

We've run into this problem when the test errored out so early (because it could not connect to
the remote device), that the code in D20193 did not catch the error. This resulted in the test
suite reporting success with 0 tests being run.

This patch makes sure that any non-zero exit code from the inferior process gets reported as an
error. Basically I expand the concept of "exceptional exits", which was previously being used for
signals to cover these cases as well.



Index: packages/Python/lldbsuite/test/test_runner/process_control.py
--- packages/Python/lldbsuite/test/test_runner/process_control.py
+++ packages/Python/lldbsuite/test/test_runner/process_control.py
@@ -246,33 +246,25 @@
     def is_exceptional_exit(self, popen_status):
         """Returns whether the program exit status is exceptional.
-        Returns whether the return code from a Popen process is exceptional
-        (e.g. signals on POSIX systems).
-        Derived classes should override this if they can detect exceptional
-        program exit.
+        Returns whether the return code from a Popen process is exceptional.
         @return True if the given popen_status represents an exceptional
         program exit; False otherwise.
-        return False
+        return popen_status != 0
     def exceptional_exit_details(self, popen_status):
         """Returns the normalized exceptional exit code and a description.
         Given an exceptional exit code, returns the integral value of the
-        exception (e.g. signal number for POSIX) and a description (e.g.
-        signal name on POSIX) for the result.
-        Derived classes should override this if they can detect exceptional
-        program exit.
+        exception and a description for the result.
-        It is fine to not implement this so long as is_exceptional_exit()
-        always returns False.
+        Derived classes can override this if they want to want custom
+        exceptional exit code handling.
         @return (normalized exception code, symbolic exception description)
-        raise Exception("exception_exit_details() called on unsupported class")
+        return (popen_status, "exit")
 class UnixProcessHelper(ProcessHelper):
@@ -397,16 +389,15 @@
     def soft_terminate_signals(self):
         return [signal.SIGQUIT, signal.SIGTERM]
-    def is_exceptional_exit(self, popen_status):
-        return popen_status < 0
     def _signal_names_by_number(cls):
         return dict(
             (k, v) for v, k in reversed(sorted(signal.__dict__.items()))
             if v.startswith('SIG') and not v.startswith('SIG_'))
     def exceptional_exit_details(self, popen_status):
+        if popen_status >= 0:
+            return (popen_status, "exit")
         signo = -popen_status
         signal_names_by_number = self._signal_names_by_number()
         signal_name = signal_names_by_number.get(signo, "")
Index: packages/Python/lldbsuite/test/dosep.py
--- packages/Python/lldbsuite/test/dosep.py
+++ packages/Python/lldbsuite/test/dosep.py
@@ -109,13 +109,14 @@
     with output_lock:
         if not (RESULTS_FORMATTER and RESULTS_FORMATTER.is_using_terminal()):
-            print(output, file=sys.stderr)
             if timeout:
                 timeout_str = " (TIMEOUT)"
                 timeout_str = ""
             print("[%s FAILED]%s" % (name, timeout_str), file=sys.stderr)
             print("Command invoked: %s" % ' '.join(command), file=sys.stderr)
+            print("Command stderr:\n", output[1], file=sys.stderr)
+            print("Command stdout:\n", output[0], file=sys.stderr)
@@ -210,7 +211,7 @@
             # only stderr does.
             report_test_pass(self.file_name, output[1])
-            report_test_failure(self.file_name, command, output[1], was_timeout)
+            report_test_failure(self.file_name, command, output, was_timeout)
         # Save off the results for the caller.
         self.results = (

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D22404.64115.patch
Type: text/x-patch
Size: 3778 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20160715/0a7bf2a3/attachment.bin>

More information about the lldb-commits mailing list