]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
tests/samba-tool: optionally allow exception to be a failure in .run*()
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Wed, 4 Jun 2025 01:53:32 +0000 (13:53 +1200)
committerDouglas Bagnall <dbagnall@samba.org>
Thu, 5 Jun 2025 23:06:37 +0000 (23:06 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13613

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Jennifer Sutton <jennifersutton@catalyst.net.nz>
Reviewed-by: Rowland Penny <rpenny@samba.org>
python/samba/tests/samba_tool/base.py

index 689ab11dde27fb2d1340a1e6e7f50410c0029493..0fe450386c0c25ff3ff6c7fcf42b056ce9cf860e 100644 (file)
@@ -63,21 +63,34 @@ class SambaToolCmdTest(samba.tests.BlackboxTestCase):
                      credentials=creds, lp=lp)
 
     @classmethod
-    def _run(cls, *argv, verbose=False):
+    def _run(cls, *argv, verbose=False, catch_error=False):
         """run a samba-tool command.
 
         positional arguments are effectively what gets passed to
         bin/samba-tool.
 
+        Add catch_error=True to make samba-tool exceptions into
+        failures.
+
         Add verbose=True during development to see the expanded
         command and results.
+
         """
-        cmd, args = cmd_sambatool()._resolve('samba-tool', *argv,
-                                             outf=cls.stringIO(),
-                                             errf=cls.stringIO())
-        result = cmd._run(*args)
-        out = cmd.outf.getvalue()
-        err = cmd.errf.getvalue()
+        try:
+            cmd, args = cmd_sambatool()._resolve('samba-tool', *argv,
+                                                 outf=cls.stringIO(),
+                                                 errf=cls.stringIO())
+            result = cmd._run(*args)
+            out = cmd.outf.getvalue()
+            err = cmd.errf.getvalue()
+        except (Exception, SystemExit) as e:
+            # We need to catch SystemExit as well as Exception,
+            # because samba-tool will often convert exceptions into
+            # exits (SystemExit is a subclass of BaseException but not
+            # Exception).
+            if catch_error:
+                raise AssertionError(f"'samba-tool {' '.join(argv)}' raised {e}")
+            raise
 
         if verbose:
             print(f"bin/samba-tool {' '.join(argv)}\n\nstdout:\n"