selftest: Avoid accessing deprecated BaseException.message.
[samba.git] / selftest / subunithelper.py
index 2a5d9ecc2025167806874cf7fa763730496283bf..5128d4a63ae09d0a2e31c5722faf6632ed59edbb 100644 (file)
@@ -222,6 +222,13 @@ def find_in_list(regexes, fullname):
     return None
 
 
+class ImmediateFail(Exception):
+    """Raised to abort immediately."""
+
+    def __init__(self):
+        super(ImmediateFail, self).__init__("test failed and fail_immediately set")
+
+
 class FilterOps(testtools.testresult.TestResult):
 
     def control_msg(self, msg):
@@ -258,6 +265,8 @@ class FilterOps(testtools.testresult.TestResult):
         self.total_error+=1
         self._ops.addError(test, details)
         self.output = None
+        if self.fail_immediately:
+            raise ImmediateFail()
 
     def addSkip(self, test, details=None):
         test = self._add_prefix(test)
@@ -276,7 +285,7 @@ class FilterOps(testtools.testresult.TestResult):
             self.xfail_added+=1
             self.total_xfail+=1
             if details is not None:
-                details = subunit.RemoteError(details[1].message + xfail_reason.decode("utf-8"))
+                details = subunit.RemoteError(unicode(details[1]) + xfail_reason.decode("utf-8"))
             else:
                 details = subunit.RemoteError(xfail_reason.decode("utf-8"))
             self._ops.addExpectedFailure(test, details)
@@ -286,6 +295,8 @@ class FilterOps(testtools.testresult.TestResult):
             self._ops.addFailure(test, details)
             if self.output:
                 self._ops.output_msg(self.output)
+            if self.fail_immediately:
+                raise ImmediateFail()
         self.output = None
 
     def addSuccess(self, test, details=None):
@@ -327,7 +338,7 @@ class FilterOps(testtools.testresult.TestResult):
 
         self._ops.end_testsuite(name, result, reason)
 
-    def __init__(self, out, prefix, expected_failures, strip_ok_output):
+    def __init__(self, out, prefix, expected_failures, strip_ok_output, fail_immediately=False):
         self._ops = out
         self.output = None
         self.prefix = prefix
@@ -339,3 +350,5 @@ class FilterOps(testtools.testresult.TestResult):
         self.total_error = 0
         self.total_fail = 0
         self.error_added = 0
+        self.fail_immediately = fail_immediately
+