The branch, master has been updated via 58f6a37 s4-test/repl_schema: Refactor the test a little bit to via 1b58074 s4-tests: Make all DRS python tests to start with samba4.drs.* prefix via 9e24db1 s4-pfm_verify: Explicitly pass LoadParm() instance to system_session() function from ff82220 s4-tests: Modified sec_descriptor.py to use samdb.newuser instead of custom methods.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 58f6a37f645c8c025923aa38cd9445ae2e0d8d0e Author: Kamen Mazdrashki <kame...@samba.org> Date: Tue Nov 23 17:15:21 2010 +0200 s4-test/repl_schema: Refactor the test a little bit to - Cleanup imports - make sure we have testtools and subunit imported - use dictionaries instead of LDIFs for schema modification so now callers for _make_class can easily add new attributes for created class - simplify a little bit classSchema creation - test attributeSchema replication Autobuild-User: Kamen Mazdrashki <kame...@samba.org> Autobuild-Date: Tue Nov 23 18:44:46 CET 2010 on sn-devel-104 commit 1b5807455783653ca5dd1ae715f9cef455545407 Author: Kamen Mazdrashki <kame...@samba.org> Date: Wed Nov 10 06:15:19 2010 +0200 s4-tests: Make all DRS python tests to start with samba4.drs.* prefix commit 9e24db1f2b8ba0cbef0ac9bda587a754ee2ab254 Author: Kamen Mazdrashki <kame...@samba.org> Date: Tue Nov 23 17:19:29 2010 +0200 s4-pfm_verify: Explicitly pass LoadParm() instance to system_session() function Otherwise system_session() creates a LoadParm() instance wich resets certain params to their defaults from smb.conf ("log level" for instance) ----------------------------------------------------------------------- Summary of changes: source4/scripting/devel/pfm_verify.py | 2 +- source4/selftest/tests.py | 6 +- source4/torture/drs/python/repl_schema.py | 90 +++++++++++++++++++---------- 3 files changed, 63 insertions(+), 35 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/scripting/devel/pfm_verify.py b/source4/scripting/devel/pfm_verify.py index 2f7be2b..a7314d9 100755 --- a/source4/scripting/devel/pfm_verify.py +++ b/source4/scripting/devel/pfm_verify.py @@ -134,7 +134,7 @@ if __name__ == "__main__": server = args[0] samdb = SamDB(url="ldap://%s" % server, - session_info=system_session(), + session_info=system_session(lp), credentials=creds, lp=lp) drs_pfm = _drs_fetch_pfm(server, samdb, creds, lp) diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 1d1d517..bd743d2 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -512,9 +512,9 @@ plantestsuite("samba4.blackbox.spn.py(dc:local)", "dc:local", ["PYTHON=%s" % pyt plantestsuite("samba4.ldap.bind(dc)", "dc", [python, os.path.join(samba4srcdir, "auth/credentials/tests/bind.py"), '$SERVER', '-U"$USERNAME%$PASSWORD"']) # DRS python tests -plantestsuite("samba4.drs_delete_object.python(vampire_dc)", "vampire_dc", ['PYTHONPATH="$PYTHONPATH:%s"' % os.path.join(samba4srcdir, 'torture/drs/python'), 'DC1=$DC_SERVER', 'DC2=$VAMPIRE_DC_SERVER', subunitrun, 'delete_object', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD']) -plantestsuite("samba4.drs_fsmo.python(vampire_dc)", "vampire_dc", ['PYTHONPATH="$PYTHONPATH:%s"' % os.path.join(samba4srcdir, 'torture/drs/python'), 'DC1=$DC_SERVER', 'DC2=$VAMPIRE_DC_SERVER', subunitrun, 'fsmo', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD']) -plantestsuite("samba4.drs_repl_schema.python(vampire_dc)", "vampire_dc", ['PYTHONPATH="$PYTHONPATH:%s"' % os.path.join(samba4srcdir, 'torture/drs/python'), 'DC1=$DC_SERVER', 'DC2=$VAMPIRE_DC_SERVER', subunitrun, 'repl_schema', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD']) +plantestsuite("samba4.drs.delete_object.python(vampire_dc)", "vampire_dc", ['PYTHONPATH="$PYTHONPATH:%s"' % os.path.join(samba4srcdir, 'torture/drs/python'), 'DC1=$DC_SERVER', 'DC2=$VAMPIRE_DC_SERVER', subunitrun, 'delete_object', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD']) +plantestsuite("samba4.drs.fsmo.python(vampire_dc)", "vampire_dc", ['PYTHONPATH="$PYTHONPATH:%s"' % os.path.join(samba4srcdir, 'torture/drs/python'), 'DC1=$DC_SERVER', 'DC2=$VAMPIRE_DC_SERVER', subunitrun, 'fsmo', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD']) +plantestsuite("samba4.drs.repl_schema.python(vampire_dc)", "vampire_dc", ['PYTHONPATH="$PYTHONPATH:%s"' % os.path.join(samba4srcdir, 'torture/drs/python'), 'DC1=$DC_SERVER', 'DC2=$VAMPIRE_DC_SERVER', subunitrun, 'repl_schema', '-U$DOMAIN/$DC_USERNAME%$DC_PASSWORD']) # This makes sure we test the rid allocation code t = "RPC-SAMR-LARGE-DC" diff --git a/source4/torture/drs/python/repl_schema.py b/source4/torture/drs/python/repl_schema.py index 4016ed2..16f00ac 100644 --- a/source4/torture/drs/python/repl_schema.py +++ b/source4/torture/drs/python/repl_schema.py @@ -33,11 +33,14 @@ import random import os sys.path.append("bin/python") +import samba +samba.ensure_external_module("testtools", "testtools") +samba.ensure_external_module("subunit", "subunit/python") -from samba.auth import system_session from ldb import LdbError, ERR_NO_SUCH_OBJECT -from ldb import SCOPE_BASE, SCOPE_SUBTREE -from samba.samdb import SamDB +from ldb import SCOPE_BASE +from ldb import Message +from ldb import FLAG_MOD_REPLACE import samba.tests @@ -96,34 +99,57 @@ class DrsReplSchemaTestCase(samba.tests.TestCase): return self.ldb_dc1.schema_format_value("objectGUID", guid) def _ldap_schemaUpdateNow(self, sam_db): - ldif = """ -dn: -changetype: modify -add: schemaUpdateNow -schemaUpdateNow: 1 -""" - sam_db.modify_ldif(ldif) + rec = {"dn": "", + "schemaUpdateNow": "1"} + m = Message.from_dict(sam_db, rec, FLAG_MOD_REPLACE) + sam_db.modify(m) def _make_obj_names(self, base_name): '''Try to create a unique name for an object that is to be added to schema''' obj_name = self.obj_prefix + base_name + obj_ldn = obj_name.replace("-", "") obj_dn = "CN=%s,%s" % (obj_name, self.schema_dn) - return (obj_name, obj_dn) - - def _make_class_ldif(self, class_name, class_dn, attrs=None): - ldif = """ -dn: """ + class_dn + """ -objectClass: top -objectClass: classSchema -cn: """ + class_name + """ -governsId: 1.2.840.""" + str(random.randint(1,100000)) + """.1.5.13 -instanceType: 4 -objectClassCategory: 1 -subClassOf: organizationalPerson -systemOnly: FALSE -""" - return ldif + return (obj_dn, obj_name, obj_ldn) + + def _schema_new_class(self, ldb_ctx, base_name, attrs=None): + (class_dn, class_name, class_ldn) = self._make_obj_names(base_name) + rec = {"dn": class_dn, + "objectClass": ["top", "classSchema"], + "cn": class_name, + "lDAPDisplayName": class_ldn, + "governsId": "1.2.840." + str(random.randint(1,100000)) + ".1.5.13", + "instanceType": "4", + "objectClassCategory": "1", + "subClassOf": "organizationalPerson", + "systemOnly": "FALSE"} + # allow overriding/adding attributes + if not attrs is None: + rec.update(attrs) + # add it to the Schema + ldb_ctx.add(rec) + self._ldap_schemaUpdateNow(ldb_ctx) + return (rec["lDAPDisplayName"], rec["dn"]) + + def _schema_new_attr(self, ldb_ctx, base_name, attrs=None): + (attr_dn, attr_name, attr_ldn) = self._make_obj_names(base_name) + rec = {"dn": attr_dn, + "objectClass": ["top", "attributeSchema"], + "cn": attr_name, + "lDAPDisplayName": attr_ldn, + "attributeId": "1.2.841." + str(random.randint(1,100000)) + ".1.5.13", + "attributeSyntax": "2.5.5.12", + "omSyntax": "64", + "instanceType": "4", + "isSingleValued": "TRUE", + "systemOnly": "FALSE"} + # allow overriding/adding attributes + if not attrs is None: + rec.update(attrs) + # add it to the Schema + ldb_ctx.add(rec) + self._ldap_schemaUpdateNow(ldb_ctx) + return (rec["lDAPDisplayName"], rec["dn"]) def _check_object(self, obj_dn): '''Check if object obj_dn exists on both DCs''' @@ -146,12 +172,14 @@ systemOnly: FALSE and attributeSchema objects, replicate Schema NC and then check all objects are replicated correctly""" + # add new attributeSchema object + (a_ldn, a_dn) = self._schema_new_attr(self.ldb_dc1, "attr-A") # add new classSchema object - (class_name, class_dn) = self._make_obj_names("cls-A") - ldif = self._make_class_ldif(class_name, class_dn) - self.ldb_dc1.add_ldif(ldif) - self._ldap_schemaUpdateNow(self.ldb_dc1) + (c_ldn, c_dn) = self._schema_new_class(self.ldb_dc1, "cls-A") + # force replication from DC1 to DC2 self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, nc_dn=self.schema_dn) - # check object is replicated - self._check_object(class_dn) + + # check objects are replicated + self._check_object(c_dn) + self._check_object(a_dn) -- Samba Shared Repository