from samba.compat import PY3, text_type
from samba.compat import string_types
from random import randint
-from samba.samdb import SamDB
+from random import SystemRandom
+import string
+try:
+ from samba.samdb import SamDB
+except ImportError:
+ # We are built without samdb support,
+ # imitate it so that connect_samdb() can recover
+ def SamDB(*args, **kwargs):
+ return None
+
import samba.ndr
import samba.dcerpc.dcerpc
import samba.dcerpc.epmapper
class SkipTest(Exception):
"""Test skipped."""
-HEXDUMP_FILTER=bytearray([x if ((len(repr(chr(x)))==3) and (x < 127)) else ord('.') for x in range(256)])
+HEXDUMP_FILTER = bytearray([x if ((len(repr(chr(x))) == 3) and (x < 127)) else ord('.') for x in range(256)])
+
class TestCase(unittest.TestCase):
"""A Samba test case."""
hr = ' '.join(["%02X" % x for x in lr])
ll = ll.translate(HEXDUMP_FILTER).decode('utf8')
lr = lr.translate(HEXDUMP_FILTER).decode('utf8')
- result += "[%04X] %-*s %-*s %s %s\n" % (N, 8*3, hl, 8*3, hr, ll, lr)
+ result += "[%04X] %-*s %-*s %s %s\n" % (N, 8 * 3, hl, 8 * 3, hr, ll, lr)
N += 16
return result
c.set_kerberos_state(kerberos_state)
return c
-
-
# These functions didn't exist before Python2.7:
if sys.version_info < (2, 7):
import warnings
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:
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)
"a diff follows\n"
% ('when stripped ' if strip else '',
len(a), len(b),
- ))
+ ))
from difflib import unified_diff
diff = unified_diff(a.splitlines(True),
cmdline_credentials = None
+
class RpcInterfaceTestCase(TestCase):
"""DCE/RPC Test case."""
self.assertTrue(samba.valid_netbios_name("FOO"))
def test_too_long(self):
- self.assertFalse(samba.valid_netbios_name("FOO"*10))
+ self.assertFalse(samba.valid_netbios_name("FOO" * 10))
def test_invalid_characters(self):
self.assertFalse(samba.valid_netbios_name("*BLA"))
return s
+
class BlackboxTestCase(TestCaseInTempDir):
"""Base test case for blackbox tests."""
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
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):
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:
(num, errstr) = error.args
assert num == ldb.ERR_NO_SUCH_OBJECT, "ldb.delete() failed: %s" % errstr
+
def create_test_ou(samdb, name):
"""Creates a unique OU for the test"""
# objects can be slow to replicate out. So the OU created by a previous
# testenv may still exist at the point that tests start on another testenv.
rand = randint(1, 10000000)
- dn = ldb.Dn(samdb, "OU=%s%d,%s" %(name, rand, samdb.get_default_basedn()))
- samdb.add({ "dn": dn, "objectclass": "organizationalUnit"})
+ dn = ldb.Dn(samdb, "OU=%s%d,%s" % (name, rand, samdb.get_default_basedn()))
+ samdb.add({"dn": dn, "objectclass": "organizationalUnit"})
return dn