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):
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))
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):