PEP8: fix E225: missing whitespace around operator
[nivanova/samba-autobuild/.git] / python / samba / tests / samba_tool / base.py
index c57e9e94a1b90ba2ab629137bfc8b75707d5fe69..8e2e2457e126a0af8d8c314b0175576a55474847 100644 (file)
@@ -29,6 +29,13 @@ from cStringIO import StringIO
 from samba.netcmd.main import cmd_sambatool
 import samba.tests
 
+
+def truncate_string(s, cutoff=100):
+    if len(s) < cutoff + 15:
+        return s
+    return s[:cutoff] + '[%d more characters]' % (len(s) - cutoff)
+
+
 class SambaToolCmdTest(samba.tests.BlackboxTestCase):
 
     def getSamDB(self, *argv):
@@ -81,6 +88,23 @@ class SambaToolCmdTest(samba.tests.BlackboxTestCase):
         result = cmd._run("samba-tool %s %s" % (name, sub), *args)
         return (result, cmd.outf.getvalue(), cmd.errf.getvalue())
 
+    def runsublevelcmd(self, name, sublevels, *args):
+        """run a command with any number of sub command levels"""
+        # Same as runsubcmd, except this handles a varying number of sub-command
+        # levels, e.g. 'samba-tool domain passwordsettings pso set', whereas
+        # runsubcmd() only handles exactly one level of sub-commands.
+        # First, traverse the levels of sub-commands to get the actual cmd
+        # object we'll run, and construct the cmd string along the way
+        cmd = cmd_sambatool.subcommands[name]
+        cmd_str = "samba-tool %s" % name
+        for sub in sublevels:
+            cmd = cmd.subcommands[sub]
+            cmd_str += " %s" % sub
+        cmd.outf = StringIO()
+        cmd.errf = StringIO()
+        result = cmd._run(cmd_str, *args)
+        return (result, cmd.outf.getvalue(), cmd.errf.getvalue())
+
     def assertCmdSuccess(self, exit, out, err, msg=""):
         self.assertIsNone(exit, msg="exit[%s] stdout[%s] stderr[%s]: %s" % (
                           exit, out, err, msg))
@@ -88,20 +112,24 @@ class SambaToolCmdTest(samba.tests.BlackboxTestCase):
     def assertCmdFail(self, val, msg=""):
         self.assertIsNotNone(val, msg)
 
-    def assertMatch(self, base, string, msg=""):
-        self.assertTrue(string in base, msg)
+    def assertMatch(self, base, string, msg=None):
+        # Note: we should stop doing this and just use self.assertIn()
+        if msg is None:
+            msg = "%r is not in %r" % (truncate_string(string),
+                                       truncate_string(base))
+        self.assertIn(string, base, msg)
 
     def randomName(self, count=8):
         """Create a random name, cap letters and numbers, and always starting with a letter"""
         name = random.choice(string.ascii_uppercase)
-        name += ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase+ string.digits) for x in range(count - 1))
+        name += ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for x in range(count - 1))
         return name
 
     def randomPass(self, count=16):
         name = random.choice(string.ascii_uppercase)
         name += random.choice(string.digits)
         name += random.choice(string.ascii_lowercase)
-        name += ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase+ string.digits) for x in range(count - 3))
+        name += ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for x in range(count - 3))
         return name
 
     def randomXid(self):