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
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)