3 # Unix SMB/CIFS implementation. Tests for SamDB
4 # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 from samba.auth import system_session
20 from samba.credentials import Credentials
22 from samba.provision import setup_samdb, guess_names, make_smbconf, find_setup_dir
23 from samba.samdb import SamDB
24 from samba.tests import TestCaseInTempDir
25 from samba.dcerpc import security
26 from unittest import TestCase
28 from samba import param
31 class SamDBTestCase(TestCaseInTempDir):
32 """Base-class for tests with a Sam Database.
34 This is used by the Samba SamDB-tests, but e.g. also by the OpenChange
35 provisioning tests (which need a Sam).
38 def setup_path(self, relpath):
39 return os.path.join(find_setup_dir(), relpath)
42 super(SamDBTestCase, self).setUp()
43 invocationid = str(uuid.uuid4())
44 domaindn = "DC=COM,DC=EXAMPLE"
45 self.domaindn = domaindn
46 configdn = "CN=Configuration," + domaindn
47 schemadn = "CN=Schema," + configdn
48 domainguid = str(uuid.uuid4())
49 policyguid = str(uuid.uuid4())
50 domainsid = security.random_sid()
51 hostguid = str(uuid.uuid4())
52 path = os.path.join(self.tempdir, "samdb.ldb")
53 session_info = system_session()
57 dnsdomain="example.com"
58 serverrole="domain controller"
60 smbconf = os.path.join(self.tempdir, "smb.conf")
61 make_smbconf(smbconf, self.setup_path, hostname, domain, dnsdomain,
62 serverrole, self.tempdir)
64 self.lp = param.LoadParm()
67 names = guess_names(lp=self.lp, hostname=hostname,
68 domain=domain, dnsdomain=dnsdomain,
69 serverrole=serverrole,
70 domaindn=self.domaindn, configdn=configdn,
73 paths = provision_paths_from_lp(self.lp, names.dnsdomain)
75 provision_backend = ProvisionBackend("ldb", backend_type,
76 paths=paths, setup_path=self.setup_path,
77 lp=self.lp, credentials=None,
79 message=message, hostname=hostname,
80 root=root, schema=schema,
83 self.samdb = setup_samdb(path, self.setup_path, session_info, provision_backend,
85 lambda x: None, domainsid,
87 policyguid, False, "secret",
88 "secret", "secret", invocationid,
89 "secret", "domain controller")
92 for f in ['schema.ldb', 'configuration.ldb',
93 'users.ldb', 'samdb.ldb', 'smb.conf']:
94 os.remove(os.path.join(self.tempdir, f))
95 super(SamDBTestCase, self).tearDown()
98 # disable this test till andrew works it out ...
99 class SamDBTests(SamDBTestCase):
100 """Tests for the SamDB implementation."""
102 print "samdb add_foreign disabled for now"
103 # def test_add_foreign(self):