[SCM] Samba Shared Repository - branch master updated

Andrew Tridgell tridge at samba.org
Thu Jan 28 00:45:20 MST 2010


The branch, master has been updated
       via  2fdff7f... s4-ldbtest: fixed python import
       via  882feb3... s4-drs: implementation of some delete test cases
      from  61a4ab3... cleanup: remove trailing spaces and tabs

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 2fdff7f596268b53084f3fc15102c9e000966f02
Author: Andrew Tridgell <tridge at samba.org>
Date:   Thu Jan 28 18:02:39 2010 +1100

    s4-ldbtest: fixed python import

commit 882feb39a28c1a130a38c5406bdebd3eaff0d06c
Author: Eduardo Lima <eduardoll at gmail.com>
Date:   Mon Jan 18 15:03:48 2010 -0200

    s4-drs: implementation of some delete test cases
    
    Signed-off-by: Andrew Tridgell <tridge at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source4/lib/ldb/tests/python/deletetest.py |  200 ++++++++++++++++++++++++++++
 source4/selftest/tests.sh                  |    1 +
 2 files changed, 201 insertions(+), 0 deletions(-)
 create mode 100755 source4/lib/ldb/tests/python/deletetest.py


Changeset truncated at 500 lines:

diff --git a/source4/lib/ldb/tests/python/deletetest.py b/source4/lib/ldb/tests/python/deletetest.py
new file mode 100755
index 0000000..3fe28a3
--- /dev/null
+++ b/source4/lib/ldb/tests/python/deletetest.py
@@ -0,0 +1,200 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import getopt
+import optparse
+import sys
+import os
+
+sys.path.append("bin/python")
+sys.path.append("../lib/subunit/python")
+
+import samba.getopt as options
+
+from samba.auth import system_session
+from ldb import SCOPE_BASE, LdbError
+from ldb import ERR_NO_SUCH_OBJECT
+from samba import Ldb
+
+from subunit.run import SubunitTestRunner
+import unittest
+
+parser = optparse.OptionParser("deletetest.py [options] <host|file>")
+sambaopts = options.SambaOptions(parser)
+parser.add_option_group(sambaopts)
+parser.add_option_group(options.VersionOptions(parser))
+# use command line creds if available
+credopts = options.CredentialsOptions(parser)
+parser.add_option_group(credopts)
+opts, args = parser.parse_args()
+
+if len(args) < 1:
+    parser.print_usage()
+    sys.exit(1)
+
+host = args[0]
+
+lp = sambaopts.get_loadparm()
+creds = credopts.get_credentials(lp)
+
+class BasicDeleteTests(unittest.TestCase):
+
+    def delete_force(self, ldb, dn):
+        try:
+            ldb.delete(dn)
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_NO_SUCH_OBJECT)
+
+    def GUID_string(self, guid):
+        return self.ldb.schema_format_value("objectGUID", guid)
+
+    def find_basedn(self, ldb):
+        res = ldb.search(base="", expression="", scope=SCOPE_BASE,
+                         attrs=["defaultNamingContext"])
+        self.assertEquals(len(res), 1)
+        return res[0]["defaultNamingContext"][0]
+
+    def setUp(self):
+        self.ldb = ldb
+        self.base_dn = self.find_basedn(ldb)
+
+    def search_guid(self,guid):
+        print "SEARCH by GUID %s" % self.GUID_string(guid)
+
+        expression = "(objectGUID=%s)" % self.GUID_string(guid)
+        res = ldb.search(expression=expression,
+                         controls=["show_deleted:1"])
+        self.assertEquals(len(res), 1)
+        return res[0]
+
+    def search_dn(self,dn):
+        print "SEARCH by DN %s" % dn
+
+        res = ldb.search(expression="(objectClass=*)",
+                         base=dn,
+                         scope=SCOPE_BASE,
+                         controls=["show_deleted:1"])
+        self.assertEquals(len(res), 1)
+        return res[0]
+
+    def del_attr_values(self, delObj):
+        print "Checking attributes for %s" % delObj["dn"]
+
+        self.assertEquals(delObj["isDeleted"][0],"TRUE")
+        self.assertTrue(not("objectCategory" in delObj))
+        self.assertTrue(not("sAMAccountType" in delObj))
+
+    def preserved_attributes_list(self, liveObj, delObj):
+        print "Checking for preserved attributes list"
+
+        preserved_list = ["nTSecurityDescriptor", "attributeID", "attributeSyntax", "dNReferenceUpdate", "dNSHostName",
+        "flatName", "governsID", "groupType", "instanceType", "lDAPDisplayName", "legacyExchangeDN",
+        "isDeleted", "isRecycled", "lastKnownParent", "msDS-LastKnownRDN", "mS-DS-CreatorSID",
+        "mSMQOwnerID", "nCName", "objectClass", "distinguishedName", "objectGUID", "objectSid",
+        "oMSyntax", "proxiedObjectName", "name", "replPropertyMetaData", "sAMAccountName",
+        "securityIdentifier", "sIDHistory", "subClassOf", "systemFlags", "trustPartner", "trustDirection",
+        "trustType", "trustAttributes", "userAccountControl", "uSNChanged", "uSNCreated", "whenCreated"]
+
+        for a in liveObj:
+            if a in preserved_list:
+                self.assertTrue(a in delObj)
+
+    def check_rdn(self, liveObj, delObj, rdnName):
+        print "Checking for correct rDN"
+        rdn=liveObj[rdnName][0]
+        rdn2=delObj[rdnName][0]
+        name2=delObj[rdnName][0]
+        guid=liveObj["objectGUID"][0]
+        self.assertEquals(rdn2, rdn + "\nDEL:" + self.GUID_string(guid))
+        self.assertEquals(name2, rdn + "\nDEL:" + self.GUID_string(guid))
+
+    def delete_deleted(self, ldb, dn):
+        print "Testing the deletion of the already deleted dn %s" % dn
+
+        try:
+            ldb.delete(dn)
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_NO_SUCH_OBJECT)
+
+    def test_all(self):
+        """Basic delete tests"""
+
+        print self.base_dn
+
+        dn1="cn=testuser,cn=users," + self.base_dn
+        dn2="cn=testuser2,cn=users," + self.base_dn
+        grp1="cn=testdelgroup1,cn=users," + self.base_dn
+
+        self.delete_force(self.ldb, dn1)
+        self.delete_force(self.ldb, dn2)
+        self.delete_force(self.ldb, grp1)
+
+        ldb.add({
+            "dn": dn1,
+            "objectclass": "user",
+            "cn": "testuser",
+            "description": "test user description",
+            "samaccountname": "testuser"})
+
+        ldb.add({
+            "dn": dn2,
+            "objectclass": "user",
+            "cn": "testuser2",
+            "description": "test user 2 description",
+            "samaccountname": "testuser2"})
+
+        ldb.add({
+            "dn": grp1,
+            "objectclass": "group",
+            "cn": "testdelgroup1",
+            "description": "test group",
+            "samaccountname": "testdelgroup1",
+            "member": [ dn1, dn2 ] })
+
+        objLive1 = self.search_dn(dn1)
+        guid1=objLive1["objectGUID"][0]
+
+        objLive2 = self.search_dn(dn2)
+        guid2=objLive2["objectGUID"][0]
+
+        objLive3 = self.search_dn(grp1)
+        guid3=objLive3["objectGUID"][0]
+
+        ldb.delete(dn1)
+        ldb.delete(dn2)
+        ldb.delete(grp1)
+
+        objDeleted1 = self.search_guid(guid1)
+        objDeleted2 = self.search_guid(guid2)
+        objDeleted3 = self.search_guid(guid3)
+
+        self.del_attr_values(objDeleted1)
+        self.del_attr_values(objDeleted2)
+        self.del_attr_values(objDeleted3)
+
+        self.preserved_attributes_list(objLive1, objDeleted1)
+        self.preserved_attributes_list(objLive2, objDeleted2)
+
+        self.check_rdn(objLive1, objDeleted1, "cn")
+        self.check_rdn(objLive2, objDeleted2, "cn")
+        self.check_rdn(objLive3, objDeleted3, "cn")
+
+        self.delete_deleted(ldb, dn1)
+        self.delete_deleted(ldb, dn2)
+        self.delete_deleted(ldb, grp1)
+
+if not "://" in host:
+    if os.path.isfile(host):
+        host = "tdb://%s" % host
+    else:
+        host = "ldap://%s" % host
+
+ldb = Ldb(host, credentials=creds, session_info=system_session(), lp=lp)
+
+runner = SubunitTestRunner()
+rc = 0
+if not runner.run(unittest.makeSuite(BasicDeleteTests)).wasSuccessful():
+    rc = 1
+
+sys.exit(rc)
diff --git a/source4/selftest/tests.sh b/source4/selftest/tests.sh
index 753163c..dd5ffe2 100755
--- a/source4/selftest/tests.sh
+++ b/source4/selftest/tests.sh
@@ -467,6 +467,7 @@ plantest "ldap.secdesc.python" dc PYTHONPATH="$PYTHONPATH:../lib/subunit/python"
 plantest "ldap.acl.python" dc PYTHONPATH="$PYTHONPATH:../lib/subunit/python" $PYTHON $samba4srcdir/lib/ldb/tests/python/acl.py $CONFIGURATION \$SERVER -U\$USERNAME%\$PASSWORD -W \$DOMAIN
 plantest "xattr.python" none $SUBUNITRUN samba.tests.xattr
 plantest "ntacls.python" none $SUBUNITRUN samba.tests.ntacls
+plantest "deletetest.python" dc PYTHONPATH="$PYTHONPATH:../lib/subunit/python" $PYTHON $samba4srcdir/lib/ldb/tests/python/deletetest.py $CONFIGURATION \$SERVER -U\$USERNAME%\$PASSWORD -W \$DOMAIN
 plantest "blackbox.samba3dump" none $PYTHON $samba4srcdir/scripting/bin/samba3dump $samba4srcdir/../testdata/samba3
 rm -rf $PREFIX/upgrade
 plantest "blackbox.upgrade" none $PYTHON $samba4srcdir/setup/upgrade_from_s3 $CONFIGURATION --targetdir=$PREFIX/upgrade $samba4srcdir/../testdata/samba3 ../testdata/samba3/smb.conf


-- 
Samba Shared Repository


More information about the samba-cvs mailing list