1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

r26596: Fixed upgrade.py.

Added blackbox tests for provision and upgrade Python scripts.
Clean up temporary files created by the Python tests.
(This used to be commit 2227fb6df6)
This commit is contained in:
Jelmer Vernooij 2007-12-25 16:36:44 -06:00 committed by Stefan Metzmacher
parent cea31e3216
commit 533cc583ed
11 changed files with 68 additions and 49 deletions

View File

@ -35,7 +35,12 @@ class HelperTests(unittest.TestCase):
class HiveTests(samba.tests.TestCaseInTempDir):
def setUp(self):
super(HiveTests, self).setUp()
self.hive = registry.open_ldb(os.path.join(self.tempdir, "ldb_new.ldb"))
self.hive_path = os.path.join(self.tempdir, "ldb_new.ldb")
self.hive = registry.open_ldb(self.hive_path)
def tearDown(self):
del self.hive
os.unlink(self.hive_path)
def test_ldb_new(self):
self.assertTrue(self.hive is not None)

View File

@ -59,6 +59,8 @@ typedef struct loadparm_context {
bool is_myname(const char *name) { return lp_is_myname($self, name); }
int use(struct param_context *param_ctx) { return param_use($self, param_ctx); }
bool set(const char *parm_name, const char *parm_value) {
if (parm_value == NULL)
return false;
return lp_set_cmdline($self, parm_name, parm_value);
}

View File

@ -2643,6 +2643,8 @@ SWIGINTERN bool loadparm_context_is_mydomain(loadparm_context *self,char const *
SWIGINTERN bool loadparm_context_is_myname(loadparm_context *self,char const *name){ return lp_is_myname(self, name); }
SWIGINTERN int loadparm_context_use(loadparm_context *self,struct param_context *param_ctx){ return param_use(self, param_ctx); }
SWIGINTERN bool loadparm_context_set(loadparm_context *self,char const *parm_name,char const *parm_value){
if (parm_value == NULL)
return false;
return lp_set_cmdline(self, parm_name, parm_value);
}
SWIGINTERN PyObject *loadparm_context_get(loadparm_context *self,char const *param_name,char const *service_name){

View File

@ -164,9 +164,9 @@ class Ldb(ldb.Ldb):
self.add(msg)
def modify_ldif(self, ldif):
for (changetype, msg) in ldb.parse_ldif(data):
assert changetype == CHANGETYPE_MODIFY
ldb.modify(msg)
for (changetype, msg) in self.parse_ldif(ldif):
assert changetype == ldb.CHANGETYPE_MODIFY
self.modify(msg)
def substitute_var(text, values):

View File

@ -95,7 +95,7 @@ def setup_add_ldif(ldb, ldif_path, subst_vars=None):
assert "${" not in data
ldb.load_ldif_add(data)
ldb.add_ldif(data)
def setup_modify_ldif(ldb, ldif_path, substvars=None):
@ -140,7 +140,7 @@ def setup_file(template, fname, substvars):
open(f, 'w').write(data)
def provision_default_paths(lp, dnsdomain):
def provision_paths_from_lp(lp, dnsdomain):
"""Set the default paths for provisioning.
:param lp: Loadparm context.
@ -605,7 +605,7 @@ def provision(lp, setup_dir, message, blank, paths, session_info,
realm = lp.get("realm")
else:
if lp.get("realm").upper() != realm.upper():
raise Error("realm '%s' in smb.conf must match chosen realm '%s'\n" %
raise Exception("realm '%s' in smb.conf must match chosen realm '%s'\n" %
(lp.get("realm"), realm))
assert realm is not None

View File

@ -67,7 +67,12 @@ class SubstituteVarTestCase(unittest.TestCase):
class LdbExtensionTests(TestCaseInTempDir):
def test_searchone(self):
l = samba.Ldb(self.tempdir + "/searchone.ldb")
l.add({"dn": "foo=dc", "bar": "bla"})
self.assertEquals("bla", l.searchone(ldb.Dn(l, "foo=dc"), "bar"))
path = self.tempdir + "/searchone.ldb"
l = samba.Ldb(path)
try:
l.add({"dn": "foo=dc", "bar": "bla"})
self.assertEquals("bla", l.searchone(ldb.Dn(l, "foo=dc"), "bar"))
finally:
del l
os.unlink(path)

View File

@ -29,10 +29,14 @@ def setup_path(file):
class ProvisionTestCase(samba.tests.TestCaseInTempDir):
def test_setup_secretsdb(self):
ldb = setup_secretsdb(os.path.join(self.tempdir, "secrets.ldb"),
setup_path, None, None, None)
self.assertEquals("LSA Secrets",
path = os.path.join(self.tempdir, "secrets.ldb")
ldb = setup_secretsdb(path, setup_path, None, None, None)
try:
self.assertEquals("LSA Secrets",
ldb.searchone(Dn(ldb, "CN=LSA Secrets"), "CN"))
finally:
del ldb
os.unlink(path)
class Disabled:

View File

@ -8,7 +8,6 @@
"""Support code for upgrading from Samba 3 to Samba 4."""
from provision import findnss, provision
import provision
import grp
import pwd
import uuid
@ -255,7 +254,7 @@ maxVersion: %llu
return ldif
def upgrade_provision(samba3, setup_dir, message, credentials, session_info, paths):
def upgrade_provision(samba3, setup_dir, message, credentials, session_info, lp, paths):
oldconf = samba3.get_conf()
if oldconf.get("domain logons") == "True":
@ -266,7 +265,11 @@ def upgrade_provision(samba3, setup_dir, message, credentials, session_info, pat
else:
serverrole = "member server"
lp.set("server role", serverrole)
domainname = oldconf.get("workgroup")
if domainname:
domainname = str(domainname)
lp.set("workgroup", domainname)
realm = oldconf.get("realm")
netbiosname = oldconf.get("netbios name")
@ -279,18 +282,19 @@ def upgrade_provision(samba3, setup_dir, message, credentials, session_info, pat
if realm is None:
realm = domainname.lower()
message("No realm specified in smb.conf file, assuming '%s'\n" % realm)
lp.set("realm", realm)
domainguid = secrets_db.get_domain_guid(domainname)
domainsid = secrets_db.get_sid(domainsid)
domainsid = secrets_db.get_sid(domainname)
if domainsid is None:
message("Can't find domain secrets for '%s'; using random SID\n" % domainname)
if netbiosname is not None:
machinepass = secrets_db.get_machine_password(netbiosname)
else:
netbiosname = None
machinepass = None
provision(lp, setup_dir, message, blank=True, paths=path, session_info=session_info,
provision(lp=lp, setup_dir=setup_dir, message=message, blank=True, ldapbackend=None, paths=paths, session_info=session_info,
credentials=credentials, realm=realm, domain=domainname,
domainsid=domainsid, domainguid=domainguid, machinepass=machinepass, serverrole=serverrole)
@ -500,18 +504,6 @@ data: %d
return ret
def upgrade_verify(subobj, samba3, paths, message):
message("Verifying account policies")
samldb = Ldb(paths.samdb)
for account in samba3.samaccounts:
msg = samldb.search("(&(sAMAccountName=" + account.nt_username + ")(objectclass=user))")
assert(len(msg) >= 1)
# FIXME
def enable_samba3sam(samdb):
samdb.modify("""

View File

@ -297,7 +297,11 @@ then
plantest "samba3.python" none PYTHONPATH=bin/python:scripting/python $PYTHON scripting/bin/subunitrun samba.tests.samba3
plantest "samba3sam.python" none PYTHONPATH=bin/python:scripting/python $PYTHON dsdb/samdb/ldb_modules/tests/samba3sam.py `pwd` $DATADIR/samba3/
plantest "ldap.python" dc $PYTHON $samba4srcdir/lib/ldb/tests/python/ldap.py \$SERVER -U\$USERNAME%\$PASSWORD
plantest "blackbox.samba3dump" none $PYTHON scripting/bin/samba3dump $samba4srcdir/../testdata/samba3
rm -rf $PREFIX/upgrade
mkdir -p $PREFIX/upgrade
plantest "blackbox.upgrade" none $PYTHON setup/upgrade.py $CONFIGURATION --verify --targetdir=$PREFIX ../testdata/samba3 ../testdata/samba3/smb.conf
plantest "blackbox.upgrade" none $PYTHON setup/upgrade.py $CONFIGURATION --targetdir=$PREFIX ../testdata/samba3 ../testdata/samba3/smb.conf
rm -rf $PREFIX/provision
mkdir -p $PREFIX/provision
plantest "blackbox.provision.py" none $PYTHON ./setup/provision.py $CONFIGURATION --domain=FOO --realm=foo --targetdir=$PREFIX/provision
fi

View File

@ -21,7 +21,7 @@
import getopt
import optparse
import sys
import os, sys
# Add path to the library for in-tree use
sys.path.append("scripting/python")
@ -32,7 +32,7 @@ from auth import system_session
import samba.getopt as options
import param
from samba.provision import (provision,
provision_default_paths, provision_ldapbase)
provision_paths_from_lp, provision_ldapbase)
parser = optparse.OptionParser("provision [options]")
parser.add_option_group(options.SambaOptions(parser))
@ -93,6 +93,8 @@ parser.add_option("--server-role", type="choice", metavar="ROLE",
help="Set server role to provision for (default standalone)")
parser.add_option("--partitions-only",
help="Configure Samba's partitions, but do not modify them (ie, join a BDC)", action="store_true")
parser.add_option("--targetdir", type="string", metavar="DIR",
help="Set target directory")
opts = parser.parse_args()[0]
@ -101,29 +103,29 @@ def message(text):
if not opts.quiet:
print text
hostname = opts.host_name
if opts.realm is None or opts.domain is None or opts.host_name is None:
if opts.realm is None or opts.domain is None:
if opts.realm is None:
print >>sys.stderr, "No realm set"
if opts.domain is None:
print >>sys.stderr, "No domain set"
if opts.host_name is None:
print >>sys.stderr, "No host name set"
parser.print_usage()
sys.exit(1)
# cope with an initially blank smb.conf
lp = param.LoadParm()
lp.load(opts.configfile)
if opts.configfile:
lp.load(opts.configfile)
if opts.targetdir is not None:
lp.set("private dir", os.path.abspath(opts.targetdir))
lp.set("lock dir", os.path.abspath(opts.targetdir))
lp.set("realm", opts.realm)
lp.set("workgroup", opts.domain)
lp.set("server role", opts.server_role)
lp.set("server role", opts.server_role or "domain controller")
if opts.aci is not None:
print "set ACI: %s" % opts.aci
paths = provision_default_paths(lp, opts.realm.lower())
paths = provision_paths_from_lp(lp, opts.realm.lower())
paths.smbconf = opts.configfile
if opts.ldap_backend:

View File

@ -11,7 +11,7 @@ sys.path.append("scripting/python")
import param
import samba
import samba.getopt as options
from samba.provision import provision_default_paths
from auth import system_session
parser = optparse.OptionParser("upgrade [options] <libdir> <smbconf>")
parser.add_option_group(options.SambaOptions(parser))
@ -22,7 +22,6 @@ parser.add_option("--setupdir", type="string", metavar="DIR",
help="directory with setup files")
parser.add_option("--realm", type="string", metavar="REALM", help="set realm")
parser.add_option("--quiet", help="Be quiet")
parser.add_option("--verify", help="Verify resulting configuration")
parser.add_option("--blank",
help="do not add users or groups, just the structure")
parser.add_option("--targetdir", type="string", metavar="DIR",
@ -51,6 +50,7 @@ else:
samba3 = Samba3(libdir, smbconf)
from samba.upgrade import upgrade_provision
from samba.provision import provision_paths_from_lp
message("Provisioning\n")
@ -60,9 +60,12 @@ if setup_dir is None:
creds = credopts.get_credentials()
lp = param.LoadParm()
lp.load(opts.configfile)
upgrade_provision(samba3, setup_dir, message, credentials=creds, session_info=system_session())
if opts.verify:
message("Verifying...\n")
ret = upgrade_verify(subobj, samba3, paths, message)
if opts.configfile:
lp.load(opts.configfile)
if opts.targetdir is not None:
lp.set("private dir", os.path.abspath(opts.targetdir))
lp.set("lock dir", os.path.abspath(opts.targetdir))
paths = provision_paths_from_lp(lp, "")
paths.smbconf = opts.configfile
upgrade_provision(samba3, setup_dir, message, credentials=creds, session_info=system_session(),
lp=lp, paths=paths)