def test_modify_and_rename(self): with self.client.connect(True) as conn: entry = LDAPEntry("cn=async_test,%s" % self.basedn) entry['objectclass'] = [ 'top', 'inetOrgPerson', 'person', 'organizationalPerson' ] entry['sn'] = "async_test" oldname = "cn=async_test,%s" % self.basedn newname = "cn=async_test2,%s" % self.basedn res = conn.search(newname, 0) if res: res[0].delete() try: conn.add(entry) except bonsai.errors.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: self.fail("Unexcepected error.") entry['sn'] = "async_test2" entry.modify() entry.rename(newname) res = conn.search(entry.dn, 0, attrlist=['sn']) self.assertEqual(entry['sn'], res[0]['sn']) res = conn.search(oldname, 0) self.assertEqual(res, []) conn.delete(entry.dn)
def test_modify_and_rename(gclient, basedn): """ Test modifying and renaming LDAP entry. """ with gclient.connect(True) as conn: entry = LDAPEntry("cn=async_test,%s" % basedn) entry["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] entry["sn"] = "async_test" oldname = "cn=async_test,%s" % basedn newname = "cn=async_test2,%s" % basedn res = conn.search(newname, 0) if res: res[0].delete() try: conn.add(entry) except bonsai.errors.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: pytest.fail("Unexpected error.") entry["sn"] = "async_test2" entry.modify() entry.rename(newname) res = conn.search(entry.dn, 0, attrlist=["sn"]) assert entry["sn"] == res[0]["sn"] res = conn.search(oldname, 0) assert res == [] conn.delete(entry.dn)
def test_sync_operations(self): """ Test LDAPEntry's add, modify and delete synchronous operations. """ entry = LDAPEntry("cn=test,%s" % self.basedn) self.client.set_credentials(*self.creds) with self.client.connect() as conn: entry['sn'] = 'test' self.assertRaises(bonsai.ObjectClassViolation, lambda: conn.add(entry)) entry['objectclass'] = ['top', 'inetOrgPerson', 'person', 'organizationalPerson'] try: conn.add(entry) except bonsai.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: self.fail("Adding LDAPEntry to the server is failed.") entry['sn'] = "Test_modify" try: entry.modify() except: self.fail("Modify failed.") obj = conn.search("cn=test,%s" % self.basedn, 0)[0] self.assertEqual(entry['sn'], obj['sn']) try: entry.delete() except: self.fail("Delete failed.")
def test_modify_and_rename(self): with self.client.connect(True) as conn: entry = LDAPEntry("cn=async_test,%s" % self.basedn) entry['objectclass'] = ['top', 'inetOrgPerson', 'person', 'organizationalPerson'] entry['sn'] = "async_test" oldname = "cn=async_test,%s" % self.basedn newname = "cn=async_test2,%s" % self.basedn res = conn.search(newname, 0) if res: res[0].delete() try: conn.add(entry) except bonsai.errors.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: self.fail("Unexcepected error.") entry['sn'] = "async_test2" entry.modify() entry.rename(newname) res = conn.search(entry.dn, 0, attrlist=['sn']) self.assertEqual(entry['sn'], res[0]['sn']) res = conn.search(oldname, 0) self.assertEqual(res, []) conn.delete(entry.dn)
def test_change_attribute(client): """ Test change_attribute method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" if sys.platform == "win32": multiattr = "otherTelephone" else: multiattr = "mail" with client.connect() as conn: entry = LDAPEntry(user_dn, conn) entry.change_attribute("mail", LDAPModOp.ADD, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() assert conn.search(user_dn, 0)[0]["mail"][0] == "*****@*****.**" entry.change_attribute("mail", 1, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() with pytest.raises(KeyError): _ = conn.search(user_dn, 0)[0]["mail"] entry.change_attribute( multiattr, LDAPModOp.REPLACE, "*****@*****.**", "*****@*****.**" ) assert entry[multiattr].status == 2 entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1, "*****@*****.**") entry.change_attribute(multiattr, 0, "*****@*****.**") entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1) entry.modify() assert multiattr not in conn.search(user_dn, 0)[0].keys()
def test_sync_operations(self): """ Test LDAPEntry's add, modify and delete synchronous operations. """ entry = LDAPEntry("cn=test,%s" % self.basedn) self.client.set_credentials(*self.creds) with self.client.connect() as conn: entry['objectclass'] = [ 'top', 'inetOrgPerson', 'person', 'organizationalPerson' ] self.assertRaises(bonsai.ObjectClassViolation, lambda: conn.add(entry)) entry['sn'] = 'test' try: conn.add(entry) except bonsai.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: self.fail("Adding LDAPEntry to the server is failed.") entry['sn'] = "Test_modify" try: entry.modify() except: self.fail("Modify failed.") obj = conn.search("cn=test,%s" % self.basedn, 0)[0] self.assertEqual(entry['sn'], obj['sn']) try: entry.delete() except: self.fail("Delete failed.")
def test_modify_and_rename(gclient, basedn): """ Test modifying and renaming LDAP entry. """ with gclient.connect(True) as conn: entry = LDAPEntry("cn=async_test,%s" % basedn) entry["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] entry["sn"] = "async_test" oldname = "cn=async_test,%s" % basedn newname = "cn=async_test2,%s" % basedn res = conn.search(newname, 0) if res: res[0].delete() try: conn.add(entry) except bonsai.errors.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: pytest.fail("Unexpected error.") entry["sn"] = "async_test2" entry.modify() entry.rename(newname) res = conn.search(entry.dn, 0, attrlist=["sn"]) assert entry["sn"] == res[0]["sn"] res = conn.search(oldname, 0) assert res == [] conn.delete(entry.dn)
def test_change_attribute(client): """ Test change_attribute method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" if sys.platform == "win32": multiattr = "otherTelephone" else: multiattr = "mail" with client.connect() as conn: entry = LDAPEntry(user_dn, conn) entry.change_attribute("mail", LDAPModOp.ADD, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() assert conn.search(user_dn, 0)[0]["mail"][0] == "*****@*****.**" entry.change_attribute("mail", 1, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() with pytest.raises(KeyError): _ = conn.search(user_dn, 0)[0]["mail"] entry.change_attribute(multiattr, LDAPModOp.REPLACE, "*****@*****.**", "*****@*****.**") assert entry[multiattr].status == 2 entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1, "*****@*****.**") entry.change_attribute(multiattr, 0, "*****@*****.**") entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1) entry.modify() assert multiattr not in conn.search(user_dn, 0)[0].keys()
def test_change_attribute_error(client): """ Test change_attribute method's error handling. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" with client.connect() as conn: entry = LDAPEntry(user_dn, conn) with pytest.raises(ValueError): entry.change_attribute("mail", 4, "t") entry.change_attribute("sn", 0, "Lembeck") with pytest.raises(bonsai.TypeOrValueExists): entry.modify() entry.clear_attribute_changes("sn") entry.change_attribute("description", LDAPModOp.DELETE, "sam") with pytest.raises(bonsai.NoSuchAttribute): entry.modify()
def test_change_attribute_error(client): """ Test change_attribute method's error handling. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" with client.connect() as conn: entry = LDAPEntry(user_dn, conn) with pytest.raises(ValueError): entry.change_attribute("mail", 4, "t") entry.change_attribute("sn", 0, "Lembeck") with pytest.raises(bonsai.TypeOrValueExists): entry.modify() entry.clear_attribute_changes("sn") entry.change_attribute("description", LDAPModOp.DELETE, "sam") with pytest.raises(bonsai.NoSuchAttribute): entry.modify()
def test_modify_referrals(self): """ Test modifying an LDAP referral with ManageDdsIT control. """ refdn = bonsai.LDAPDN("o=invalid-ref,ou=nerdherd,dc=bonsai,dc=test") newref = "ldap://invalid.host/cn=nobody" cli = LDAPClient(self.client.url) cli.set_credentials(*self.creds) cli.managedsait = True with cli.connect() as conn: entry = LDAPEntry(refdn, conn) entry.change_attribute("ref", LDAPModOp.ADD, newref) entry.modify() res = conn.search(refdn, 0, attrlist=['ref'])[0] self.assertEqual(len(res['ref']), 3) self.assertIn(newref, res['ref']) entry.change_attribute("ref", LDAPModOp.DELETE, newref) entry.modify()
def test_modify_referrals(client): """ Test modifying an LDAP referral with ManageDdsIT control. """ refdn = bonsai.LDAPDN("o=invalid-ref,ou=nerdherd,dc=bonsai,dc=test") newref = "ldap://invalid.host/cn=nobody" cli = LDAPClient(client.url) cli.set_credentials(client.mechanism, **client.credentials) cli.managedsait = True with cli.connect() as conn: entry = LDAPEntry(refdn, conn) entry.change_attribute("ref", LDAPModOp.ADD, newref) entry.modify() res = conn.search(refdn, 0, attrlist=["ref"])[0] assert len(res["ref"]) == 3 assert newref in res["ref"] entry.change_attribute("ref", LDAPModOp.DELETE, newref) entry.modify()
def test_modify_and_rename(self): """ Test modifying and renaming an LDAP entry. """ with (yield self.client.connect(True, ioloop=self.io_loop)) as conn: entry = LDAPEntry("cn=async_test,%s" % self.basedn) entry["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] entry["sn"] = "async_test" oldname = "cn=async_test,%s" % self.basedn newname = "cn=async_test2,%s" % self.basedn res = yield conn.search(newname, 0) if res: yield res[0].delete() try: yield conn.add(entry) except bonsai.errors.AlreadyExists: yield conn.delete(entry.dn) yield conn.add(entry) except: self.fail("Unexpected error.") entry["sn"] = "async_test2" yield entry.modify() yield entry.rename(newname) res = yield conn.search(entry.dn, 0, attrlist=["sn"]) assert entry["sn"] == res[0]["sn"] res = yield conn.search(oldname, 0) assert res == [] yield conn.delete(entry.dn)
def test_modify_and_rename(self): """ Test modifying and renaming an LDAP entry. """ with (yield self.client.connect(True, ioloop=self.io_loop)) as conn: entry = LDAPEntry("cn=async_test,%s" % self.basedn) entry['objectclass'] = [ 'top', 'inetOrgPerson', 'person', 'organizationalPerson' ] entry['sn'] = "async_test" oldname = "cn=async_test,%s" % self.basedn newname = "cn=async_test2,%s" % self.basedn res = yield conn.search(newname, 0) if res: yield res[0].delete() try: yield conn.add(entry) except bonsai.errors.AlreadyExists: yield conn.delete(entry.dn) yield conn.add(entry) except: self.fail("Unexpected error.") entry['sn'] = "async_test2" yield entry.modify() yield entry.rename(newname) res = yield conn.search(entry.dn, 0, attrlist=['sn']) self.assertEqual(entry['sn'], res[0]['sn']) res = yield conn.search(oldname, 0) self.assertEqual(res, []) yield conn.delete(entry.dn)
def test_modify_referrals(client): """ Test modifying an LDAP referral with ManageDdsIT control. """ refdn = bonsai.LDAPDN("o=invalid-ref,ou=nerdherd,dc=bonsai,dc=test") newref = "ldap://invalid.host/cn=nobody" cli = LDAPClient(client.url) cli.set_credentials(client.mechanism, **client.credentials) cli.managedsait = True with cli.connect() as conn: entry = LDAPEntry(refdn, conn) entry.change_attribute("ref", LDAPModOp.ADD, newref) entry.modify() res = conn.search(refdn, 0, attrlist=["ref"])[0] assert len(res["ref"]) == 3 assert newref in res["ref"] entry.change_attribute("ref", LDAPModOp.DELETE, newref) entry.modify()
def ldap(): result = ldap_image.run() LDAPCONFIG['host'] = result[0] LDAPCONFIG['port'] = result[1] client = LDAPClient(f"ldap://{LDAPCONFIG['host']}:{LDAPCONFIG['port']}") client.set_credentials("SIMPLE", user='******', password='******') conn = client.connect() anna = LDAPEntry("uid=anna,dc=my-company,dc=com") anna['objectClass'] = ['top', 'inetOrgPerson'] anna['sn'] = "Wu" anna['cn'] = "Wu" anna['uid'] = "anna" anna['displayName'] = "Anna" conn.add(anna) anna.change_attribute("userPassword", LDAPModOp.REPLACE, "newsecret") anna.modify() yield result ldap_image.stop()
def test_change_attribute(self): """ Test change_attribute method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" self.client.set_credentials(*self.creds) if sys.platform == "win32": multiattr = 'otherTelephone' else: multiattr = 'mail' with self.client.connect() as conn: entry = LDAPEntry(user_dn, conn) entry.change_attribute("mail", LDAPModOp.ADD, "*****@*****.**") self.assertEqual(entry['mail'].status, 1) entry.modify() self.assertEqual(conn.search(user_dn, 0)[0]['mail'][0], "*****@*****.**") entry.change_attribute("mail", 1, "*****@*****.**") self.assertEqual(entry['mail'].status, 1) entry.modify() self.assertRaises(KeyError, lambda: conn.search(user_dn, 0)[0]['mail']) entry.change_attribute(multiattr, LDAPModOp.REPLACE, "*****@*****.**", "*****@*****.**") self.assertEqual(entry[multiattr].status, 2) entry.modify() res = conn.search(user_dn, 0)[0][multiattr] self.assertIn("*****@*****.**", res) self.assertIn("*****@*****.**", res) entry.change_attribute(multiattr, 1, "*****@*****.**") entry.change_attribute(multiattr, 0, "*****@*****.**") entry.modify() res = conn.search(user_dn, 0)[0][multiattr] self.assertIn("*****@*****.**", res) self.assertIn("*****@*****.**", res) entry.change_attribute(multiattr, 1) entry.modify() self.assertNotIn(multiattr, conn.search(user_dn, 0)[0].keys())
def test_sync_operations(client, basedn): """ Test LDAPEntry's add, modify and delete synchronous operations. """ entry = LDAPEntry("cn=test,%s" % basedn) with pytest.raises(ValueError): entry.modify() with client.connect() as conn: entry["sn"] = "test" with pytest.raises(bonsai.ObjectClassViolation): conn.add(entry) entry["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] try: conn.add(entry) except bonsai.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: pytest.fail("Adding LDAPEntry to the server is failed.") entry["sn"] = "Test_modify" try: entry.modify() except: pytest.fail("Modify failed.") obj = conn.search("cn=test,%s" % basedn, 0)[0] assert entry["sn"] == obj["sn"] try: entry.delete() except: pytest.fail("Delete failed.") with pytest.raises(bonsai.errors.ClosedConnection): entry.modify()
def test_sync_operations(client, basedn): """ Test LDAPEntry's add, modify and delete synchronous operations. """ entry = LDAPEntry("cn=test,%s" % basedn) with pytest.raises(ValueError): entry.modify() with client.connect() as conn: entry["sn"] = "test" with pytest.raises(bonsai.ObjectClassViolation): conn.add(entry) entry["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] try: conn.add(entry) except bonsai.AlreadyExists: conn.delete(entry.dn) conn.add(entry) except: pytest.fail("Adding LDAPEntry to the server is failed.") entry["sn"] = "Test_modify" try: entry.modify() except: pytest.fail("Modify failed.") obj = conn.search("cn=test,%s" % basedn, 0)[0] assert entry["sn"] == obj["sn"] try: entry.delete() except: pytest.fail("Delete failed.") with pytest.raises(bonsai.errors.ClosedConnection): entry.modify()