/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive; import org.testng.AssertJUnit; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Parameters; import org.testng.annotations.Test; /** * Unit test for {@link ModifyOperation}. * * @author Middleware Services */ public class ModifyOperationTest extends AbstractTest { /** Entry created for ldap tests. */ private static LdapEntry testLdapEntry; /** * @param ldifFile to create. * * @throws Exception On test failure. */ @Parameters("createEntry4") @BeforeClass(groups = {"modify"}) public void createLdapEntry(final String ldifFile) throws Exception { final String ldif = TestUtils.readFileIntoString(ldifFile); testLdapEntry = TestUtils.convertLdifToResult(ldif).getEntry(); super.createLdapEntry(testLdapEntry); } /** @throws Exception On test failure. */ @AfterClass(groups = {"modify"}) public void deleteLdapEntry() throws Exception { super.deleteLdapEntry(testLdapEntry.getDn()); } /** * @param dn to modify. * @param attrs to add. * * @throws Exception On test failure. */ @Parameters({ "addAttributeDn", "addAttributeAttribute" }) @Test(groups = {"modify"}) public void addAttribute(final String dn, final String attrs) throws Exception { final LdapEntry expected = TestUtils.convertStringToEntry(dn, attrs); try (Connection conn = TestUtils.createConnection()) { conn.open(); final ModifyOperation modify = new ModifyOperation(conn); modify.execute( new ModifyRequest(dn, new AttributeModification(AttributeModificationType.ADD, expected.getAttribute()))); final SearchOperation search = new SearchOperation(conn); final SearchResult result = search.execute( SearchRequest.newObjectScopeSearchRequest(dn, new String[] {expected.getAttribute().getName()})).getResult(); AssertJUnit.assertEquals(expected.getAttribute(), result.getEntry().getAttribute()); } } /** * @param dn to modify. * @param attrs to add. * * @throws Exception On test failure. */ @Parameters({ "addAttributesDn", "addAttributesAttributes" }) @Test(groups = {"modify"}) public void addAttributes(final String dn, final String attrs) throws Exception { final LdapEntry expected = TestUtils.convertStringToEntry(dn, attrs); try (Connection conn = TestUtils.createConnection()) { conn.open(); final ModifyOperation modify = new ModifyOperation(conn); final AttributeModification[] mods = new AttributeModification[expected.size()]; int i = 0; for (LdapAttribute la : expected.getAttributes()) { mods[i] = new AttributeModification(AttributeModificationType.ADD, la); i++; } modify.execute(new ModifyRequest(dn, mods)); final SearchOperation search = new SearchOperation(conn); final SearchResult result = search.execute( SearchRequest.newObjectScopeSearchRequest(dn, expected.getAttributeNames())).getResult(); TestUtils.assertEquals(expected, result.getEntry()); } } /** * @param dn to modify. * @param attrs to replace. * * @throws Exception On test failure. */ @Parameters({ "replaceAttributeDn", "replaceAttributeAttribute" }) @Test(groups = {"modify"}, dependsOnMethods = {"addAttribute"}) public void replaceAttribute(final String dn, final String attrs) throws Exception { final LdapEntry expected = TestUtils.convertStringToEntry(dn, attrs); try (Connection conn = TestUtils.createConnection()) { conn.open(); final ModifyOperation modify = new ModifyOperation(conn); modify.execute( new ModifyRequest(dn, new AttributeModification(AttributeModificationType.REPLACE, expected.getAttribute()))); final SearchOperation search = new SearchOperation(conn); final SearchResult result = search.execute( SearchRequest.newObjectScopeSearchRequest(dn, new String[] {expected.getAttribute().getName()})).getResult(); TestUtils.assertEquals(expected, result.getEntry()); } } /** * @param dn to modify. * @param attrs to replace. * * @throws Exception On test failure. */ @Parameters({ "replaceAttributesDn", "replaceAttributesAttributes" }) @Test(groups = {"modify"}, dependsOnMethods = {"addAttributes"}) public void replaceAttributes(final String dn, final String attrs) throws Exception { final LdapEntry expected = TestUtils.convertStringToEntry(dn, attrs); try (Connection conn = TestUtils.createConnection()) { conn.open(); final ModifyOperation modify = new ModifyOperation(conn); final AttributeModification[] mods = new AttributeModification[expected.size()]; int i = 0; for (LdapAttribute la : expected.getAttributes()) { mods[i] = new AttributeModification(AttributeModificationType.REPLACE, la); i++; } modify.execute(new ModifyRequest(dn, mods)); final SearchOperation search = new SearchOperation(conn); final SearchResult result = search.execute( SearchRequest.newObjectScopeSearchRequest(dn, expected.getAttributeNames())).getResult(); TestUtils.assertEquals(expected, result.getEntry()); } } /** * @param dn to modify. * @param attrs to remove. * * @throws Exception On test failure. */ @Parameters({ "removeAttributeDn", "removeAttributeAttribute" }) @Test(groups = {"modify"}, dependsOnMethods = {"replaceAttribute"}) public void removeAttribute(final String dn, final String attrs) throws Exception { final LdapEntry expected = TestUtils.convertStringToEntry(dn, attrs); try (Connection conn = TestUtils.createConnection()) { conn.open(); final ModifyOperation modify = new ModifyOperation(conn); modify.execute( new ModifyRequest(dn, new AttributeModification(AttributeModificationType.REMOVE, expected.getAttribute()))); final SearchOperation search = new SearchOperation(conn); final SearchResult result = search.execute( SearchRequest.newObjectScopeSearchRequest(dn, new String[] {expected.getAttribute().getName()})).getResult(); AssertJUnit.assertEquals(0, result.getEntry().getAttributes().size()); } } /** * @param dn to modify. * @param attrs to remove. * * @throws Exception On test failure. */ @Parameters({ "removeAttributesDn", "removeAttributesAttributes" }) @Test(groups = {"modify"}, dependsOnMethods = {"replaceAttributes"}) public void removeAttributes(final String dn, final String attrs) throws Exception { final LdapEntry expected = TestUtils.convertStringToEntry(dn, attrs); final LdapEntry remove = TestUtils.convertStringToEntry(dn, attrs); final String[] attrsName = remove.getAttributeNames(); remove.getAttributes().remove(remove.getAttribute(attrsName[0])); expected.getAttributes().remove(expected.getAttribute(attrsName[1])); try (Connection conn = TestUtils.createConnection()) { conn.open(); final ModifyOperation modify = new ModifyOperation(conn); final AttributeModification[] mods = new AttributeModification[expected.size()]; int i = 0; for (LdapAttribute la : remove.getAttributes()) { mods[i++] = new AttributeModification(AttributeModificationType.REMOVE, la); } modify.execute(new ModifyRequest(dn, mods)); final SearchOperation search = new SearchOperation(conn); final SearchResult result = search.execute( SearchRequest.newObjectScopeSearchRequest(dn, expected.getAttributeNames())).getResult(); TestUtils.assertEquals(expected, result.getEntry()); } } }