[elbe-devel] [PATCH 02/10] test: add special handling for ElbeTestException

Torben Hohn torben.hohn at linutronix.de
Thu Apr 1 13:15:24 CEST 2021


ElbeTestException saves the output of the failing command.
This output generally contains newlines which are not handled
properly when they end up in an xml attribute.

The output failure_output node is declared as the stacktrace in jenkins.

Put the backtrace there, and use the stdout attribute for the output.

Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
---
 elbepack/commands/test.py | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/elbepack/commands/test.py b/elbepack/commands/test.py
index c67f7c04a..8f19733ae 100644
--- a/elbepack/commands/test.py
+++ b/elbepack/commands/test.py
@@ -138,14 +138,29 @@ class ElbeTestResult(unittest.TestResult):
         """Called when an error has occurred. 'err' is a tuple of values as
            returned by sys.exc_info().
         """
-        self.current_case.add_error_info(self._exc_info_to_string(err, test))
+
+        message = str(err[1])
+        output = self._exc_info_to_string(err, test)
+
+        if err is not None:
+            if issubclass(err[0], ElbeTestException):
+                self.current_case.stdout = err[1].out
+
+        self.current_case.add_error_info(message, output)
         super().addError(test, err)
 
     def addFailure(self, test, err):
         """Called when an error has occurred. 'err' is a tuple of values as
            returned by sys.exc_info()."""
 
-        self.current_case.add_failure_info(self._exc_info_to_string(err, test))
+        message = str(err[1])
+        output = self._exc_info_to_string(err, test)
+
+        if err is not None:
+            if issubclass(err[0], ElbeTestException):
+                self.current_case.stdout = err[1].out
+
+        self.current_case.add_failure_info(message, output)
         super().addFailure(test, err)
 
     def addSubTest(self, test, subtest, err):
@@ -157,11 +172,17 @@ class ElbeTestResult(unittest.TestResult):
         self.current_case = junit.TestCase(name=str(subtest))
         self.cases.append(self.current_case)
 
+        message = str(err[1])
+        output = self._exc_info_to_string(err, test)
+
         if err is not None:
+            if issubclass(err[0], ElbeTestException):
+                self.current_case.stdout = err[1].out
+
             if issubclass(err[0], test.failureException):
-                self.current_case.add_failure_info(message=self._exc_info_to_string(err, test))
+                self.current_case.add_failure_info(message, output)
             else:
-                self.current_case.add_error_info(message=self._exc_info_to_string(err, test))
+                self.current_case.add_error_info(message, output)
 
         super().addSubTest(test, subtest, err)
 
-- 
2.20.1



More information about the elbe-devel mailing list