TODO python linked attribute tests...
authorStefan Metzmacher <metze@samba.org>
Mon, 6 Oct 2008 07:22:45 +0000 (09:22 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 7 Oct 2008 06:22:01 +0000 (08:22 +0200)
metze

source4/lib/ldb/tests/python/ldap.py

index 6c910b63f1b450e1de9c63ae7561d9120241ec55..72ec372e107c574dd9f4c48c1211399cb5e66859 100755 (executable)
@@ -1001,6 +1001,223 @@ class SchemaTests(unittest.TestCase):
         self.assertFalse("dITContentRules" in res[0])
         self.assertFalse("objectClasses" in res[0])
         self.assertFalse("attributeTypes" in res[0])
+
+class LinkedAttributesTests(unittest.TestCase):
+    def delete_force(self, ldb, dn):
+        try:
+            ldb.delete(dn)
+        except LdbError, (num, _): 
+            self.assertEquals(num, LDB_ERR_NO_SUCH_OBJECT)
+
+    def setUp(self):
+        self.ldb = ldb
+        res = ldb.search(base="", expression="", scope=SCOPE_BASE, attrs=["*"])
+        self.assertEquals(len(res), 1)
+        self.default_dn = res[0]["defaultNamingContext"][0]
+        self.config_dn = res[0]["configurationNamingContext"][0]
+        self.schema_dn = res[0]["schemaNamingContext"][0]
+        self.testdn = "cn=torturetests," + self.default_dn
+
+    def test_generated_linked1(self):
+        """Testing we can add reference (skip)"""
+        if 1: return
+        self.delete_force(self.ldb, self.testdn)
+
+        self.ldb.add({"dn": "" + self.testdn,
+            "objectclass": "container"})
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+replace: msDS-ObjectReference
+msDs-ObjectReference: """ + self.default_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 1)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.default_dn)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+replace: msDS-ObjectReference
+msDs-ObjectReference: """ + self.config_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 1)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.config_dn)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+replace: msDS-ObjectReference
+msDs-ObjectReference: """ + self.default_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 1)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.default_dn)
+
+        try:
+            self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.default_dn + """
+""")
+            self.fail()
+        except LdbError, (num, msg):
+            self.assertEquals(num, LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.config_dn + """
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.schema_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 3)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.schema_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][1], self.config_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][2], self.default_dn)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+delete: msDS-ObjectReference
+msDs-ObjectReference: """ + self.config_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 2)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.schema_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][1], self.default_dn)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+delete: msDS-ObjectReference
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertTrue("msDs-ObjectReference" not in res[0])
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.default_dn + """
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.config_dn + """
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.schema_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 3)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.schema_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][1], self.config_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][2], self.default_dn)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+delete: msDS-ObjectReference
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertTrue("msDs-ObjectReference" not in res[0])
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.default_dn + """
+msDs-ObjectReference: """ + self.config_dn + """
+msDs-ObjectReference: """ + self.schema_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 3)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.schema_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][1], self.config_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][2], self.default_dn)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+delete: msDS-ObjectReference
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertTrue("msDs-ObjectReference" not in res[0])
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.schema_dn + """
+msDs-ObjectReference: """ + self.config_dn + """
+msDs-ObjectReference: """ + self.default_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 3)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.schema_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][1], self.config_dn)
+        self.assertEquals(res[0]["msDs-ObjectReference"][2], self.default_dn)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+delete: msDS-ObjectReference
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertTrue("msDs-ObjectReference" not in res[0])
+
+        self.delete_force(self.ldb, self.testdn)
+
+    def test_generated_linked2(self):
+        """Testing we can add reference2"""
+
+        self.delete_force(self.ldb, self.testdn)
+
+        self.ldb.add({"dn": "" + self.testdn,
+            "objectclass": "container",
+            "msDs-ObjectReference": "" + self.default_dn})
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 1)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.default_dn)
+
+        try:
+            self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+add: msDS-ObjectReference
+msDs-ObjectReference: """ + self.default_dn + """
+""")
+            self.fail()
+        except LdbError, (num, msg):
+            self.assertEquals(num, LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS)
+
+        self.ldb.modify_ldif("""
+dn: """ + self.testdn + """
+changetype: modify
+replace: msDS-ObjectReference
+msDs-ObjectReference: """ + self.default_dn + """
+""")
+        res = self.ldb.search(base=self.testdn, expression="", scope=SCOPE_BASE, attrs=["msDs-ObjectReference"])
+        self.assertEquals(len(res), 1)
+        self.assertEquals(len(res[0]["msDs-ObjectReference"]), 1)
+        self.assertEquals(res[0]["msDs-ObjectReference"][0], self.default_dn)
+
+        self.delete_force(self.ldb, self.testdn)
  
 if not "://" in host:
     host = "ldap://%s" % host
@@ -1011,10 +1228,12 @@ gc_ldb = Ldb("%s:3268" % host, credentials=creds,
 
 runner = SubunitTestRunner()
 rc = 0
-if not runner.run(unittest.makeSuite(BaseDnTests)).wasSuccessful():
-    rc = 1
-if not runner.run(unittest.makeSuite(BasicTests)).wasSuccessful():
-    rc = 1
-if not runner.run(unittest.makeSuite(SchemaTests)).wasSuccessful():
+#if not runner.run(unittest.makeSuite(BaseDnTests)).wasSuccessful():
+#    rc = 1
+#if not runner.run(unittest.makeSuite(BasicTests)).wasSuccessful():
+#    rc = 1
+#if not runner.run(unittest.makeSuite(SchemaTests)).wasSuccessful():
+#    rc = 1
+if not runner.run(unittest.makeSuite(LinkedAttributesTests)).wasSuccessful():
     rc = 1
 sys.exit(rc)