python/samba/tests: make sure samba-tool is called with ${PYTHON}
[amitay/samba.git] / python / samba / tests / __init__.py
index 75f5e98ca068f14d7fcc0dbab0f776a657f1400e..ca278b5d1c7a0b8a84ebead62f3d4ff1767d466f 100644 (file)
@@ -38,6 +38,8 @@ import samba.dcerpc.base
 from samba.compat import PY3, text_type
 from samba.compat import string_types
 from random import randint
+from random import SystemRandom
+import string
 try:
     from samba.samdb import SamDB
 except ImportError:
@@ -135,8 +137,6 @@ class TestCase(unittest.TestCase):
         c.set_kerberos_state(kerberos_state)
         return c
 
-
-
     # These functions didn't exist before Python2.7:
     if sys.version_info < (2, 7):
         import warnings
@@ -196,7 +196,8 @@ class TestCase(unittest.TestCase):
                 result.addSuccess(self)
 
         def run(self, result=None):
-            if result is None: result = self.defaultTestResult()
+            if result is None:
+                result = self.defaultTestResult()
             result.startTest(self)
             testMethod = getattr(self, self._testMethodName)
             try:
@@ -237,7 +238,8 @@ class TestCase(unittest.TestCase):
 
                 for (fn, args, kwargs) in reversed(getattr(self, "_cleanups", [])):
                     fn(*args, **kwargs)
-                if ok: result.addSuccess(self)
+                if ok:
+                    result.addSuccess(self)
             finally:
                 result.stopTest(self)
 
@@ -369,7 +371,10 @@ class BlackboxTestCase(TestCaseInTempDir):
         bindir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../../bin"))
         parts = line.split(" ")
         if os.path.exists(os.path.join(bindir, parts[0])):
+            cmd = parts[0]
             parts[0] = os.path.join(bindir, parts[0])
+            if cmd == "samba-tool" and os.getenv("PYTHON", None):
+                parts = [os.environ["PYTHON"]] + parts
         line = " ".join(parts)
         return line
 
@@ -400,6 +405,17 @@ class BlackboxTestCase(TestCaseInTempDir):
             raise BlackboxProcessError(retcode, line, stdoutdata, stderrdata)
         return stdoutdata
 
+    # Generate a random password that can be safely  passed on the command line
+    # i.e. it does not contain any shell meta characters.
+    def random_password(self, count=32):
+        password = SystemRandom().choice(string.ascii_uppercase)
+        password += SystemRandom().choice(string.digits)
+        password += SystemRandom().choice(string.ascii_lowercase)
+        password += ''.join(SystemRandom().choice(string.ascii_uppercase +
+                    string.ascii_lowercase +
+                    string.digits) for x in range(count - 3))
+        return password
+
 
 def connect_samdb(samdb_url, lp=None, session_info=None, credentials=None,
                   flags=0, ldb_options=None, ldap_only=False, global_schema=True):
@@ -417,7 +433,7 @@ def connect_samdb(samdb_url, lp=None, session_info=None, credentials=None,
     to make proper URL for ldb.connect() while using default
     parameters for connection based on test environment
     """
-    if not "://" in samdb_url:
+    if "://" not in samdb_url:
         if not ldap_only and os.path.isfile(samdb_url):
             samdb_url = "tdb://%s" % samdb_url
         else: