Return-Path: X-Original-To: apmail-directory-commits-archive@www.apache.org Delivered-To: apmail-directory-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9DD3010D4F for ; Fri, 2 Aug 2013 11:27:35 +0000 (UTC) Received: (qmail 30801 invoked by uid 500); 2 Aug 2013 11:27:29 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 30709 invoked by uid 500); 2 Aug 2013 11:27:29 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 30644 invoked by uid 99); 2 Aug 2013 11:27:28 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Aug 2013 11:27:28 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Aug 2013 11:27:11 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id C54432388A02; Fri, 2 Aug 2013 11:26:48 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1509635 [2/5] - in /directory/apacheds/trunk: ldap-client-test/src/test/java/org/apache/directory/shared/client/api/operations/ server-integ/src/test/java/org/apache/directory/server/operations/add/ server-integ/src/test/java/org/apache/di... Date: Fri, 02 Aug 2013 11:26:46 -0000 To: commits@directory.apache.org From: elecharny@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130802112648.C54432388A02@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyAddIT.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyAddIT.java?rev=1509635&r1=1509634&r2=1509635&view=diff ============================================================================== --- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyAddIT.java (original) +++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyAddIT.java Fri Aug 2 11:26:45 2013 @@ -55,7 +55,6 @@ import org.apache.directory.api.ldap.mod import org.apache.directory.api.ldap.model.ldif.LdifUtils; import org.apache.directory.api.ldap.model.name.Dn; import org.apache.directory.api.util.Strings; -import org.apache.directory.junit.tools.MultiThreadedMultiInvoker; import org.apache.directory.ldap.client.api.LdapConnection; import org.apache.directory.ldap.client.api.LdapNetworkConnection; import org.apache.directory.server.annotations.CreateLdapServer; @@ -63,7 +62,6 @@ import org.apache.directory.server.annot import org.apache.directory.server.core.annotations.ApplyLdifs; import org.apache.directory.server.core.integ.AbstractLdapTestUnit; import org.apache.directory.server.core.integ.FrameworkRunner; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -94,579 +92,536 @@ import org.junit.runner.RunWith; "objectClass: person", "objectClass: top", "cn: Debbie Harry", - "sn: Harry" -}) + "sn: Harry" }) //@CreateDS( allowAnonAccess=true, name="BindIT-class") @CreateLdapServer( -transports = - { - @CreateTransport(protocol = "LDAP") -}) + transports = + { + @CreateTransport(protocol = "LDAP") }) public class ModifyAddIT extends AbstractLdapTestUnit { -@Rule -public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE ); -private static final String BASE = "ou=system"; -private static final String RDN_TORI_AMOS = "cn=Tori Amos"; -private static final String PERSON_DESCRIPTION = "an American singer-songwriter"; -private static final String RDN_DEBBIE_HARRY = "cn=Debbie Harry"; + private static final String BASE = "ou=system"; + private static final String RDN_TORI_AMOS = "cn=Tori Amos"; + private static final String PERSON_DESCRIPTION = "an American singer-songwriter"; + private static final String RDN_DEBBIE_HARRY = "cn=Debbie Harry"; -/** - * Creation of required attributes of a person entry. - */ -protected Attributes getPersonAttributes( String sn, String cn ) throws LdapException -{ - Attributes attributes = LdifUtils.createJndiAttributes( - "objectClass: top", - "objectClass: person", - "objectClass: organizationalperson", - "objectClass: inetorgperson", - "cn", cn, - "sn", sn ); - - return attributes; -} - + /** + * Creation of required attributes of a person entry. + */ + protected Attributes getPersonAttributes( String sn, String cn ) throws LdapException + { + Attributes attributes = LdifUtils.createJndiAttributes( + "objectClass: top", + "objectClass: person", + "objectClass: organizationalperson", + "objectClass: inetorgperson", + "cn", cn, + "sn", sn ); -/** - * Add a new attribute to a person entry. - */ -@Test -public void testAddNewAttributeValue() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + return attributes; + } - // Add telephoneNumber attribute - String newValue = "1234567890"; - Attributes attrs = new BasicAttributes( "telephoneNumber", newValue, true ); - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Verify, that - // - case of attribute description is correct - // - attribute value is added - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - Attribute attr = attrs.get( "telephoneNumber" ); - assertNotNull( attr ); - assertEquals( "telephoneNumber", attr.getID() ); - assertTrue( attr.contains( newValue ) ); - assertEquals( 1, attr.size() ); -} + /** + * Add a new attribute to a person entry. + */ + @Test + public void testAddNewAttributeValue() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); -/** - * Add a new attribute with two values. - */ -@Test -public void testAddNewAttributeValues() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + // Add telephoneNumber attribute + String newValue = "1234567890"; + Attributes attrs = new BasicAttributes( "telephoneNumber", newValue, true ); + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - // Add telephoneNumber attribute - String[] newValues = - { "1234567890", "999999999" }; - Attribute attr = new BasicAttribute( "telephoneNumber" ); - attr.add( newValues[0] ); - attr.add( newValues[1] ); - Attributes attrs = new BasicAttributes( true ); - attrs.put( attr ); - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Verify, that - // - case of attribute description is correct - // - attribute values are present - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - attr = attrs.get( "telephoneNumber" ); - assertNotNull( attr ); - assertEquals( "telephoneNumber", attr.getID() ); - assertTrue( attr.contains( newValues[0] ) ); - assertTrue( attr.contains( newValues[1] ) ); - assertEquals( newValues.length, attr.size() ); -} + // Verify, that + // - case of attribute description is correct + // - attribute value is added + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + Attribute attr = attrs.get( "telephoneNumber" ); + assertNotNull( attr ); + assertEquals( "telephoneNumber", attr.getID() ); + assertTrue( attr.contains( newValue ) ); + assertEquals( 1, attr.size() ); + } -/** - * Add an additional value. - */ -@Test -public void testAddAdditionalAttributeValue() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + /** + * Add a new attribute with two values. + */ + @Test + public void testAddNewAttributeValues() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // Add telephoneNumber attribute + String[] newValues = + { "1234567890", "999999999" }; + Attribute attr = new BasicAttribute( "telephoneNumber" ); + attr.add( newValues[0] ); + attr.add( newValues[1] ); + Attributes attrs = new BasicAttributes( true ); + attrs.put( attr ); + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - // A new description attribute value - String newValue = "A new description for this person"; - assertFalse( newValue.equals( PERSON_DESCRIPTION ) ); - Attributes attrs = new BasicAttributes( "description", newValue, true ); - - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Verify, that attribute value is added - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - Attribute attr = attrs.get( "description" ); - assertNotNull( attr ); - assertTrue( attr.contains( newValue ) ); - assertTrue( attr.contains( PERSON_DESCRIPTION ) ); - assertEquals( 2, attr.size() ); -} + // Verify, that + // - case of attribute description is correct + // - attribute values are present + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + attr = attrs.get( "telephoneNumber" ); + assertNotNull( attr ); + assertEquals( "telephoneNumber", attr.getID() ); + assertTrue( attr.contains( newValues[0] ) ); + assertTrue( attr.contains( newValues[1] ) ); + assertEquals( newValues.length, attr.size() ); + } -/** - * Try to add an already existing attribute value. - * - * Expected behaviour: Modify operation fails with an - * AttributeInUseException. Original LDAP Error code: 20 (Indicates that the - * attribute value specified in a modify or add operation already exists as - * a value for that attribute). - */ -@Test -public void testAddExistingAttributeValue() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + /** + * Add an additional value. + */ + @Test + public void testAddAdditionalAttributeValue() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - // Change description attribute - Attributes attrs = new BasicAttributes( "description", PERSON_DESCRIPTION, true ); + // A new description attribute value + String newValue = "A new description for this person"; + assertFalse( newValue.equals( PERSON_DESCRIPTION ) ); + Attributes attrs = new BasicAttributes( "description", newValue, true ); - try - { ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - fail( "Adding an already existing atribute value should fail." ); - } - catch ( AttributeInUseException e ) - { - // expected behaviour - } - // Verify, that attribute is still there, and is the only one - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - Attribute attr = attrs.get( "description" ); - assertNotNull( attr ); - assertTrue( attr.contains( PERSON_DESCRIPTION ) ); - assertEquals( 1, attr.size() ); -} + // Verify, that attribute value is added + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + Attribute attr = attrs.get( "description" ); + assertNotNull( attr ); + assertTrue( attr.contains( newValue ) ); + assertTrue( attr.contains( PERSON_DESCRIPTION ) ); + assertEquals( 2, attr.size() ); + } -/** - * Try to add an already existing attribute value. - * - * Expected behaviour: Modify operation fails with an - * AttributeInUseException. Original LDAP Error code: 20 (Indicates that the - * attribute value specified in a modify or add operation already exists as - * a value for that attribute). - * - * Check for bug DIR_SERVER664 - */ -@Test -public void testAddExistingNthAttributesDirServer664() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - - // Change description attribute - Attributes attrs = new BasicAttributes( true ); - attrs.put( new BasicAttribute( "telephoneNumber", "1" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "2" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "3" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "4" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "5" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "6" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "7" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "8" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "9" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "10" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "11" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "12" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "13" ) ); - attrs.put( new BasicAttribute( "telephoneNumber", "14" ) ); + /** + * Try to add an already existing attribute value. + * + * Expected behaviour: Modify operation fails with an + * AttributeInUseException. Original LDAP Error code: 20 (Indicates that the + * attribute value specified in a modify or add operation already exists as + * a value for that attribute). + */ + @Test + public void testAddExistingAttributeValue() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - Attribute attr = new BasicAttribute( "description", PERSON_DESCRIPTION ); + // Change description attribute + Attributes attrs = new BasicAttributes( "description", PERSON_DESCRIPTION, true ); - attrs.put( attr ); + try + { + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); + fail( "Adding an already existing atribute value should fail." ); + } + catch ( AttributeInUseException e ) + { + // expected behaviour + } - try - { - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - fail( "Adding an already existing atribute value should fail." ); - } - catch ( AttributeInUseException e ) - { - // expected behaviour + // Verify, that attribute is still there, and is the only one + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + Attribute attr = attrs.get( "description" ); + assertNotNull( attr ); + assertTrue( attr.contains( PERSON_DESCRIPTION ) ); + assertEquals( 1, attr.size() ); } - // Verify, that attribute is still there, and is the only one - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - attr = attrs.get( "description" ); - assertNotNull( attr ); - assertTrue( attr.contains( PERSON_DESCRIPTION ) ); - assertEquals( 1, attr.size() ); -} + /** + * Try to add an already existing attribute value. + * + * Expected behaviour: Modify operation fails with an + * AttributeInUseException. Original LDAP Error code: 20 (Indicates that the + * attribute value specified in a modify or add operation already exists as + * a value for that attribute). + * + * Check for bug DIR_SERVER664 + */ + @Test + public void testAddExistingNthAttributesDirServer664() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // Change description attribute + Attributes attrs = new BasicAttributes( true ); + attrs.put( new BasicAttribute( "telephoneNumber", "1" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "2" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "3" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "4" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "5" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "6" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "7" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "8" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "9" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "10" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "11" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "12" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "13" ) ); + attrs.put( new BasicAttribute( "telephoneNumber", "14" ) ); -/** - * Check for DIR_SERVER_643 - */ -@Test -public void testTwoDescriptionDirServer643() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - - // Change description attribute - Attributes attrs = new BasicAttributes( true ); - Attribute attr = new BasicAttribute( "description", - "a British singer-songwriter with an expressive four-octave voice" ); - attr.add( "one of the most influential female artists of the twentieth century" ); - attrs.put( attr ); - - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Verify, that attribute is still there, and is the only one - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - attr = attrs.get( "description" ); - assertNotNull( attr ); - assertEquals( 3, attr.size() ); - assertTrue( attr.contains( "a British singer-songwriter with an expressive four-octave voice" ) ); - assertTrue( attr.contains( "one of the most influential female artists of the twentieth century" ) ); - assertTrue( attr.contains( PERSON_DESCRIPTION ) ); -} + Attribute attr = new BasicAttribute( "description", PERSON_DESCRIPTION ); + attrs.put( attr ); -/** - * Try to add a duplicate attribute value to an entry, where this attribute - * is already present (objectclass in this case). Expected behaviour is that - * the modify operation causes an error (error code 20, "Attribute or value - * exists"). - */ -@Test -public void testAddDuplicateValueToExistingAttribute() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + try + { + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); + fail( "Adding an already existing atribute value should fail." ); + } + catch ( AttributeInUseException e ) + { + // expected behaviour + } - // modify object classes, add a new value twice - Attribute ocls = new BasicAttribute( "objectClass", "organizationalPerson" ); - ModificationItem[] modItems = new ModificationItem[2]; - modItems[0] = new ModificationItem( DirContext.ADD_ATTRIBUTE, ocls ); - modItems[1] = new ModificationItem( DirContext.ADD_ATTRIBUTE, ocls ); - try - { - ctx.modifyAttributes( RDN_TORI_AMOS, modItems ); - fail( "Adding a duplicate attribute value should cause an error." ); - } - catch ( AttributeInUseException ex ) - { + // Verify, that attribute is still there, and is the only one + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + attr = attrs.get( "description" ); + assertNotNull( attr ); + assertTrue( attr.contains( PERSON_DESCRIPTION ) ); + assertEquals( 1, attr.size() ); } - // Check, whether attribute objectClass is unchanged - Attributes attrs = ctx.getAttributes( RDN_TORI_AMOS ); - ocls = attrs.get( "objectClass" ); - assertEquals( ocls.size(), 4 ); - assertTrue( ocls.contains( "top" ) ); - assertTrue( ocls.contains( "person" ) ); -} + /** + * Check for DIR_SERVER_643 + */ + @Test + public void testTwoDescriptionDirServer643() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // Change description attribute + Attributes attrs = new BasicAttributes( true ); + Attribute attr = new BasicAttribute( "description", + "a British singer-songwriter with an expressive four-octave voice" ); + attr.add( "one of the most influential female artists of the twentieth century" ); + attrs.put( attr ); -/** - * Try to add a duplicate attribute value to an entry, where this attribute - * is not present. Expected behaviour is that the modify operation causes an - * error (error code 20, "Attribute or value exists"). - */ -@Test -public void testAddDuplicateValueToNewAttribute() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - // add the same description value twice - Attribute desc = new BasicAttribute( "description", "another description value besides songwriter" ); - ModificationItem[] modItems = new ModificationItem[2]; - modItems[0] = new ModificationItem( DirContext.ADD_ATTRIBUTE, desc ); - modItems[1] = new ModificationItem( DirContext.ADD_ATTRIBUTE, desc ); - try - { - ctx.modifyAttributes( RDN_TORI_AMOS, modItems ); - fail( "Adding a duplicate attribute value should cause an error." ); - } - catch ( AttributeInUseException ex ) - { + // Verify, that attribute is still there, and is the only one + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + attr = attrs.get( "description" ); + assertNotNull( attr ); + assertEquals( 3, attr.size() ); + assertTrue( attr.contains( "a British singer-songwriter with an expressive four-octave voice" ) ); + assertTrue( attr.contains( "one of the most influential female artists of the twentieth century" ) ); + assertTrue( attr.contains( PERSON_DESCRIPTION ) ); } - // Check, whether attribute description is still not present - Attributes attrs = ctx.getAttributes( RDN_TORI_AMOS ); - assertEquals( 1, attrs.get( "description" ).size() ); -} + /** + * Try to add a duplicate attribute value to an entry, where this attribute + * is already present (objectclass in this case). Expected behaviour is that + * the modify operation causes an error (error code 20, "Attribute or value + * exists"). + */ + @Test + public void testAddDuplicateValueToExistingAttribute() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // modify object classes, add a new value twice + Attribute ocls = new BasicAttribute( "objectClass", "organizationalPerson" ); + ModificationItem[] modItems = new ModificationItem[2]; + modItems[0] = new ModificationItem( DirContext.ADD_ATTRIBUTE, ocls ); + modItems[1] = new ModificationItem( DirContext.ADD_ATTRIBUTE, ocls ); + try + { + ctx.modifyAttributes( RDN_TORI_AMOS, modItems ); + fail( "Adding a duplicate attribute value should cause an error." ); + } + catch ( AttributeInUseException ex ) + { + } -/** - * Modify the entry with a bad attribute : this should fail - */ -@Test -public void testSearchBadAttribute() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + // Check, whether attribute objectClass is unchanged + Attributes attrs = ctx.getAttributes( RDN_TORI_AMOS ); + ocls = attrs.get( "objectClass" ); + assertEquals( ocls.size(), 4 ); + assertTrue( ocls.contains( "top" ) ); + assertTrue( ocls.contains( "person" ) ); + } - // Add a not existing attribute - String newValue = "unbelievable"; - Attributes attrs = new BasicAttributes( "voice", newValue, true ); - try - { - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - } - catch ( NoSuchAttributeException nsae ) - { - // We have a failure : the attribute is unknown in the schema - assertTrue( true ); - return; + /** + * Try to add a duplicate attribute value to an entry, where this attribute + * is not present. Expected behaviour is that the modify operation causes an + * error (error code 20, "Attribute or value exists"). + */ + @Test + public void testAddDuplicateValueToNewAttribute() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // add the same description value twice + Attribute desc = new BasicAttribute( "description", "another description value besides songwriter" ); + ModificationItem[] modItems = new ModificationItem[2]; + modItems[0] = new ModificationItem( DirContext.ADD_ATTRIBUTE, desc ); + modItems[1] = new ModificationItem( DirContext.ADD_ATTRIBUTE, desc ); + try + { + ctx.modifyAttributes( RDN_TORI_AMOS, modItems ); + fail( "Adding a duplicate attribute value should cause an error." ); + } + catch ( AttributeInUseException ex ) + { + } + + // Check, whether attribute description is still not present + Attributes attrs = ctx.getAttributes( RDN_TORI_AMOS ); + assertEquals( 1, attrs.get( "description" ).size() ); } - fail( "Cannot reach this point" ); -} + /** + * Modify the entry with a bad attribute : this should fail + */ + @Test + public void testSearchBadAttribute() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); -/** - * Create a person entry and perform a modify op, in which - * we modify an attribute two times. - */ -@Test -public void testAttributeValueMultiMofificationDIRSERVER_636() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + // Add a not existing attribute + String newValue = "unbelievable"; + Attributes attrs = new BasicAttributes( "voice", newValue, true ); - // Create a person entry - Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); - String rdn = "cn=Kate Bush"; - ctx.createSubcontext( rdn, attrs ); - - // Add a description with two values - String[] descriptions = - { - "Kate Bush is a British singer-songwriter.", - "She has become one of the most influential female artists of the twentieth century." }; - Attribute desc1 = new BasicAttribute( "description" ); - desc1.add( descriptions[0] ); - desc1.add( descriptions[1] ); - - ModificationItem addModOp = new ModificationItem( - DirContext.ADD_ATTRIBUTE, desc1 ); - - Attribute desc2 = new BasicAttribute( "description" ); - desc2.add( descriptions[1] ); - ModificationItem delModOp = new ModificationItem( - DirContext.REMOVE_ATTRIBUTE, desc2 ); - - ctx.modifyAttributes( rdn, new ModificationItem[] - { addModOp, - delModOp } ); - - SearchControls sctls = new SearchControls(); - sctls.setSearchScope( SearchControls.SUBTREE_SCOPE ); - String filter = "(cn=*Bush)"; - String base = ""; - - // Check entry - NamingEnumeration enm = ctx.search( base, filter, sctls ); - assertTrue( enm.hasMore() ); - - while ( enm.hasMore() ) - { - SearchResult sr = enm.next(); - attrs = sr.getAttributes(); - Attribute desc = sr.getAttributes().get( "description" ); - assertEquals( 1, desc.size() ); - assertTrue( desc.contains( descriptions[0] ) ); + try + { + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); + } + catch ( NoSuchAttributeException nsae ) + { + // We have a failure : the attribute is unknown in the schema + assertTrue( true ); + return; + } + + fail( "Cannot reach this point" ); } - // Remove the person entry - ctx.destroySubcontext( rdn ); -} + /** + * Create a person entry and perform a modify op, in which + * we modify an attribute two times. + */ + @Test + public void testAttributeValueMultiMofificationDIRSERVER_636() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // Create a person entry + Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); + String rdn = "cn=Kate Bush"; + ctx.createSubcontext( rdn, attrs ); + + // Add a description with two values + String[] descriptions = + { + "Kate Bush is a British singer-songwriter.", + "She has become one of the most influential female artists of the twentieth century." }; + Attribute desc1 = new BasicAttribute( "description" ); + desc1.add( descriptions[0] ); + desc1.add( descriptions[1] ); + + ModificationItem addModOp = new ModificationItem( + DirContext.ADD_ATTRIBUTE, desc1 ); + + Attribute desc2 = new BasicAttribute( "description" ); + desc2.add( descriptions[1] ); + ModificationItem delModOp = new ModificationItem( + DirContext.REMOVE_ATTRIBUTE, desc2 ); -/** - * Try to add subschemaSubentry attribute to an entry - */ -@Test -public void testModifyOperationalAttributeAdd() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + ctx.modifyAttributes( rdn, new ModificationItem[] + { addModOp, + delModOp } ); - ModificationItem modifyOp = new ModificationItem( DirContext.ADD_ATTRIBUTE, new BasicAttribute( - "subschemaSubentry", "cn=anotherSchema" ) ); + SearchControls sctls = new SearchControls(); + sctls.setSearchScope( SearchControls.SUBTREE_SCOPE ); + String filter = "(cn=*Bush)"; + String base = ""; + + // Check entry + NamingEnumeration enm = ctx.search( base, filter, sctls ); + assertTrue( enm.hasMore() ); - try - { - ctx.modifyAttributes( RDN_DEBBIE_HARRY, new ModificationItem[] - { modifyOp } ); + while ( enm.hasMore() ) + { + SearchResult sr = enm.next(); + attrs = sr.getAttributes(); + Attribute desc = sr.getAttributes().get( "description" ); + assertEquals( 1, desc.size() ); + assertTrue( desc.contains( descriptions[0] ) ); + } - fail( "modification of entry should fail" ); - } - catch ( InvalidAttributeValueException e ) - { - // Expected result - } - catch ( NoPermissionException e ) - { - // Expected result + // Remove the person entry + ctx.destroySubcontext( rdn ); } -} -/** - * Create a person entry and perform a modify op on an - * attribute which is part of the Dn. This is not allowed. - * - * A JIRA has been created for this bug : DIRSERVER_687 - */ -@Test -public void testDNAttributeMemberModificationDIRSERVER_687() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - - // Create a person entry - Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); - String rdn = "cn=Kate Bush"; - ctx.createSubcontext( rdn, attrs ); + /** + * Try to add subschemaSubentry attribute to an entry + */ + @Test + public void testModifyOperationalAttributeAdd() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - // Try to modify the cn attribute - Attribute desc1 = new BasicAttribute( "cn", "Georges Bush" ); + ModificationItem modifyOp = new ModificationItem( DirContext.ADD_ATTRIBUTE, new BasicAttribute( + "subschemaSubentry", "cn=anotherSchema" ) ); - ModificationItem addModOp = new ModificationItem( - DirContext.REPLACE_ATTRIBUTE, desc1 ); + try + { + ctx.modifyAttributes( RDN_DEBBIE_HARRY, new ModificationItem[] + { modifyOp } ); - try - { - ctx.modifyAttributes( rdn, new ModificationItem[] - { addModOp } ); - fail(); - } - catch ( AttributeModificationException ame ) - { - assertTrue( true ); - // Remove the person entry - ctx.destroySubcontext( rdn ); + fail( "modification of entry should fail" ); + } + catch ( InvalidAttributeValueException e ) + { + // Expected result + } + catch ( NoPermissionException e ) + { + // Expected result + } } - catch ( NamingException ne ) + + + /** + * Create a person entry and perform a modify op on an + * attribute which is part of the Dn. This is not allowed. + * + * A JIRA has been created for this bug : DIRSERVER_687 + */ + @Test + public void testDNAttributeMemberModificationDIRSERVER_687() throws Exception { - assertTrue( true ); - // Remove the person entry - ctx.destroySubcontext( rdn ); - } -} + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + // Create a person entry + Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); + String rdn = "cn=Kate Bush"; + ctx.createSubcontext( rdn, attrs ); -/** - * Try to modify an entry adding invalid number of values for a single-valued atribute - * - * @see DIRSERVER-614 - */ -@Test -public void testModifyAddWithInvalidNumberOfAttributeValues() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + // Try to modify the cn attribute + Attribute desc1 = new BasicAttribute( "cn", "Georges Bush" ); - Attributes attrs = new BasicAttributes( true ); - Attribute ocls = new BasicAttribute( "objectClass" ); - ocls.add( "top" ); - ocls.add( "inetOrgPerson" ); - attrs.put( ocls ); - attrs.put( "cn", "Fiona Apple" ); - attrs.put( "sn", "Apple" ); - ctx.createSubcontext( "cn=Fiona Apple", attrs ); - - // add two displayNames to an inetOrgPerson - attrs = new BasicAttributes( true ); - Attribute displayName = new BasicAttribute( "displayName" ); - displayName.add( "Fiona" ); - displayName.add( "Fiona A." ); - attrs.put( displayName ); + ModificationItem addModOp = new ModificationItem( + DirContext.REPLACE_ATTRIBUTE, desc1 ); - try - { - ctx.modifyAttributes( "cn=Fiona Apple", DirContext.ADD_ATTRIBUTE, attrs ); - fail( "modification of entry should fail" ); + try + { + ctx.modifyAttributes( rdn, new ModificationItem[] + { addModOp } ); + fail(); + } + catch ( AttributeModificationException ame ) + { + assertTrue( true ); + // Remove the person entry + ctx.destroySubcontext( rdn ); + } + catch ( NamingException ne ) + { + assertTrue( true ); + // Remove the person entry + ctx.destroySubcontext( rdn ); + } } - catch ( InvalidAttributeValueException e ) - { - } -} + /** + * Try to modify an entry adding invalid number of values for a single-valued atribute + * + * @see DIRSERVER-614 + */ + @Test + public void testModifyAddWithInvalidNumberOfAttributeValues() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + Attributes attrs = new BasicAttributes( true ); + Attribute ocls = new BasicAttribute( "objectClass" ); + ocls.add( "top" ); + ocls.add( "inetOrgPerson" ); + attrs.put( ocls ); + attrs.put( "cn", "Fiona Apple" ); + attrs.put( "sn", "Apple" ); + ctx.createSubcontext( "cn=Fiona Apple", attrs ); + + // add two displayNames to an inetOrgPerson + attrs = new BasicAttributes( true ); + Attribute displayName = new BasicAttribute( "displayName" ); + displayName.add( "Fiona" ); + displayName.add( "Fiona A." ); + attrs.put( displayName ); -/** - * Add a new binary attribute to a person entry. - */ -@Test -public void testAddNewBinaryAttributeValue() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + try + { + ctx.modifyAttributes( "cn=Fiona Apple", DirContext.ADD_ATTRIBUTE, attrs ); + fail( "modification of entry should fail" ); + } + catch ( InvalidAttributeValueException e ) + { - // Add a binary attribute - byte[] newValue = new byte[] - { 0x00, 0x01, 0x02, 0x03 }; - Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue, true ); - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Verify, that attribute value is added - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - Attribute attr = attrs.get( "userCertificate" ); - assertNotNull( attr ); - assertTrue( attr.contains( newValue ) ); - byte[] certificate = ( byte[] ) attr.get(); - assertTrue( Arrays.equals( newValue, certificate ) ); - assertEquals( 1, attr.size() ); -} + } + } -/** - * Add a new attribute to a person entry. - */ -@Test -public void testAddNewBinaryAttributeValueAbove0x80() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + /** + * Add a new binary attribute to a person entry. + */ + @Test + public void testAddNewBinaryAttributeValue() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - // Add a binary attribute - byte[] newValue = new byte[] - { ( byte ) 0x80, ( byte ) 0x81, ( byte ) 0x82, ( byte ) 0x83 }; - Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue, true ); - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Verify, that attribute value is added - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - Attribute attr = attrs.get( "userCertificate" ); - assertNotNull( attr ); - assertTrue( attr.contains( newValue ) ); - byte[] certificate = ( byte[] ) attr.get(); - assertTrue( Arrays.equals( newValue, certificate ) ); - assertEquals( 1, attr.size() ); -} + // Add a binary attribute + byte[] newValue = new byte[] + { 0x00, 0x01, 0x02, 0x03 }; + Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue, true ); + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); + // Verify, that attribute value is added + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + Attribute attr = attrs.get( "userCertificate" ); + assertNotNull( attr ); + assertTrue( attr.contains( newValue ) ); + byte[] certificate = ( byte[] ) attr.get(); + assertTrue( Arrays.equals( newValue, certificate ) ); + assertEquals( 1, attr.size() ); + } -/** - * Add a new binary attribute to a person entry. - */ -@Test -public void testRetrieveEntryWithBinaryAttributeValue() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - // Add a ;binary attribute - byte[] newValue = new byte[] - { 0x00, 0x01, 0x02, 0x03 }; - Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue ); - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Search entry an request ;binary attribute - SearchControls sctls = new SearchControls(); - sctls.setSearchScope( SearchControls.OBJECT_SCOPE ); - sctls.setReturningAttributes( new String[] - { "userCertificate;binary" } ); - String filter = "(objectClass=*)"; - String base = RDN_TORI_AMOS; - - // Test that ;binary attribute is present - NamingEnumeration enm = ctx.search( base, filter, sctls ); - assertTrue( enm.hasMore() ); + /** + * Add a new attribute to a person entry. + */ + @Test + public void testAddNewBinaryAttributeValueAbove0x80() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // Add a binary attribute + byte[] newValue = new byte[] + { ( byte ) 0x80, ( byte ) 0x81, ( byte ) 0x82, ( byte ) 0x83 }; + Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue, true ); + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - while ( enm.hasMore() ) - { - SearchResult sr = enm.next(); - attrs = sr.getAttributes(); + // Verify, that attribute value is added + attrs = ctx.getAttributes( RDN_TORI_AMOS ); Attribute attr = attrs.get( "userCertificate" ); assertNotNull( attr ); assertTrue( attr.contains( newValue ) ); @@ -675,134 +630,173 @@ public void testRetrieveEntryWithBinaryA assertEquals( 1, attr.size() ); } -} - -/** - * Add a new ;binary attribute with bytes greater than 0x80 - * to a person entry. - * Test for DIRSERVER-1146 - * - * @throws NamingException - */ -public void testAddNewBinaryAttributeValue0x80() throws Exception -{ - DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + /** + * Add a new binary attribute to a person entry. + */ + @Test + public void testRetrieveEntryWithBinaryAttributeValue() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // Add a ;binary attribute + byte[] newValue = new byte[] + { 0x00, 0x01, 0x02, 0x03 }; + Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue ); + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - // Add a ;binary attribute with high-bytes - byte[] newValue = new byte[] - { ( byte ) 0x80, ( byte ) 0x81, ( byte ) 0x82, ( byte ) 0x83 }; - Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue ); - ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - - // Verify, that attribute value is added - attrs = ctx.getAttributes( RDN_TORI_AMOS ); - Attribute attr = attrs.get( "userCertificate" ); - assertNotNull( attr ); - assertTrue( attr.contains( newValue ) ); - byte[] certificate = ( byte[] ) attr.get(); - assertTrue( Arrays.equals( newValue, certificate ) ); - assertEquals( 1, attr.size() ); -} + // Search entry an request ;binary attribute + SearchControls sctls = new SearchControls(); + sctls.setSearchScope( SearchControls.OBJECT_SCOPE ); + sctls.setReturningAttributes( new String[] + { "userCertificate;binary" } ); + String filter = "(objectClass=*)"; + String base = RDN_TORI_AMOS; + + // Test that ;binary attribute is present + NamingEnumeration enm = ctx.search( base, filter, sctls ); + assertTrue( enm.hasMore() ); + while ( enm.hasMore() ) + { + SearchResult sr = enm.next(); + attrs = sr.getAttributes(); + Attribute attr = attrs.get( "userCertificate" ); + assertNotNull( attr ); + assertTrue( attr.contains( newValue ) ); + byte[] certificate = ( byte[] ) attr.get(); + assertTrue( Arrays.equals( newValue, certificate ) ); + assertEquals( 1, attr.size() ); + } -@Test -public void testModifyAddWithNullValues() throws LdapException, IOException -{ - LdapConnection connection = new LdapNetworkConnection( "localhost", getLdapServer().getPort() ); - connection.setTimeOut( 0L ); + } - // Use the client API - connection.bind( "uid=admin,ou=system", "secret" ); - // Add a new entry with some null values - Entry entry = new DefaultEntry( "uid=12345,ou=system", - "ObjectClass: top", - "ObjectClass: person", - "ObjectClass: person", - "ObjectClass: OrganizationalPerson", - "ObjectClass: inetOrgPerson", - "uid: 12345", - "cn: test", - "sn: Test", - "userPassword: 12345" ); - - connection.add( entry ); - - // Now modify the entry : we should add two null values - connection.modify( new Dn( "uid=12345,ou=system" ), - new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "userPassword", Strings.EMPTY_BYTES ), - new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "mail", ( String ) null ) - ); - - // Get back the entry - Entry found = connection.lookup( "uid=12345,ou=system" ); - - assertNotNull( found ); - assertNotNull( found.get( "mail" ) ); - assertNotNull( found.get( "userPassword" ) ); - assertTrue( found.contains( "mail", Strings.EMPTY_BYTES ) ); - assertTrue( found.contains( "userPassword", "12345", "" ) ); + /** + * Add a new ;binary attribute with bytes greater than 0x80 + * to a person entry. + * Test for DIRSERVER-1146 + * + * @throws NamingException + */ + public void testAddNewBinaryAttributeValue0x80() throws Exception + { + DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); + + // Add a ;binary attribute with high-bytes + byte[] newValue = new byte[] + { ( byte ) 0x80, ( byte ) 0x81, ( byte ) 0x82, ( byte ) 0x83 }; + Attributes attrs = new BasicAttributes( "userCertificate;binary", newValue ); + ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - connection.close(); -} + // Verify, that attribute value is added + attrs = ctx.getAttributes( RDN_TORI_AMOS ); + Attribute attr = attrs.get( "userCertificate" ); + assertNotNull( attr ); + assertTrue( attr.contains( newValue ) ); + byte[] certificate = ( byte[] ) attr.get(); + assertTrue( Arrays.equals( newValue, certificate ) ); + assertEquals( 1, attr.size() ); + } -@Test -public void testModifyReplaceWithNullValues() throws LdapException, IOException -{ - LdapConnection connection = new LdapNetworkConnection( "localhost", getLdapServer().getPort() ); - connection.setTimeOut( 0L ); + @Test + public void testModifyAddWithNullValues() throws LdapException, IOException + { + LdapConnection connection = new LdapNetworkConnection( "localhost", getLdapServer().getPort() ); + connection.setTimeOut( 0L ); - // Use the client API - connection.bind( "uid=admin,ou=system", "secret" ); + // Use the client API + connection.bind( "uid=admin,ou=system", "secret" ); - // Add a new entry with some null values - Entry entry = new DefaultEntry( "uid=12345,ou=system", - "ObjectClass: top", - "ObjectClass: person", - "ObjectClass: person", - "ObjectClass: OrganizationalPerson", - "ObjectClass: inetOrgPerson", - "uid: 12345", - "cn: test", - "sn: Test", - "userPassword: 12345" ); - - connection.add( entry ); - - // Now modify the entry : we should replace the password with a null value - // and add a mail Attribute with a null value - connection.modify( new Dn( "uid=12345,ou=system" ), - new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, "userPassword", Strings.EMPTY_BYTES ), - new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "mail", ( String ) null ) - ); - - // Get back the entry - Entry found = connection.lookup( "uid=12345,ou=system" ); - - assertNotNull( found ); - assertNotNull( found.get( "mail" ) ); - assertNotNull( found.get( "userPassword" ) ); - assertEquals( 1, found.get( "mail" ).size() ); - assertEquals( 1, found.get( "userPassword" ).size() ); - assertTrue( found.contains( "mail", Strings.EMPTY_BYTES ) ); - assertTrue( found.contains( "userPassword", "" ) ); - - // Now, do a replace with no value. We should not anymore have a mail - connection.modify( new Dn( "uid=12345,ou=system" ), - new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, "mail" ) - ); - - // Get back the entry - found = connection.lookup( "uid=12345,ou=system" ); - - assertNotNull( found ); - assertNull( found.get( "mail" ) ); - assertNotNull( found.get( "userPassword" ) ); - assertEquals( 1, found.get( "userPassword" ).size() ); - assertTrue( found.contains( "userPassword", "" ) ); + // Add a new entry with some null values + Entry entry = new DefaultEntry( "uid=12345,ou=system", + "ObjectClass: top", + "ObjectClass: person", + "ObjectClass: person", + "ObjectClass: OrganizationalPerson", + "ObjectClass: inetOrgPerson", + "uid: 12345", + "cn: test", + "sn: Test", + "userPassword: 12345" ); + + connection.add( entry ); + + // Now modify the entry : we should add two null values + connection.modify( new Dn( "uid=12345,ou=system" ), + new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "userPassword", Strings.EMPTY_BYTES ), + new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "mail", ( String ) null ) + ); + + // Get back the entry + Entry found = connection.lookup( "uid=12345,ou=system" ); + + assertNotNull( found ); + assertNotNull( found.get( "mail" ) ); + assertNotNull( found.get( "userPassword" ) ); + assertTrue( found.contains( "mail", Strings.EMPTY_BYTES ) ); + assertTrue( found.contains( "userPassword", "12345", "" ) ); + + connection.close(); + } + + + @Test + public void testModifyReplaceWithNullValues() throws LdapException, IOException + { + LdapConnection connection = new LdapNetworkConnection( "localhost", getLdapServer().getPort() ); + connection.setTimeOut( 0L ); + + // Use the client API + connection.bind( "uid=admin,ou=system", "secret" ); + + // Add a new entry with some null values + Entry entry = new DefaultEntry( "uid=12345,ou=system", + "ObjectClass: top", + "ObjectClass: person", + "ObjectClass: person", + "ObjectClass: OrganizationalPerson", + "ObjectClass: inetOrgPerson", + "uid: 12345", + "cn: test", + "sn: Test", + "userPassword: 12345" ); + + connection.add( entry ); + + // Now modify the entry : we should replace the password with a null value + // and add a mail Attribute with a null value + connection.modify( new Dn( "uid=12345,ou=system" ), + new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, "userPassword", Strings.EMPTY_BYTES ), + new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "mail", ( String ) null ) + ); + + // Get back the entry + Entry found = connection.lookup( "uid=12345,ou=system" ); + + assertNotNull( found ); + assertNotNull( found.get( "mail" ) ); + assertNotNull( found.get( "userPassword" ) ); + assertEquals( 1, found.get( "mail" ).size() ); + assertEquals( 1, found.get( "userPassword" ).size() ); + assertTrue( found.contains( "mail", Strings.EMPTY_BYTES ) ); + assertTrue( found.contains( "userPassword", "" ) ); + + // Now, do a replace with no value. We should not anymore have a mail + connection.modify( new Dn( "uid=12345,ou=system" ), + new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, "mail" ) + ); + + // Get back the entry + found = connection.lookup( "uid=12345,ou=system" ); + + assertNotNull( found ); + assertNull( found.get( "mail" ) ); + assertNotNull( found.get( "userPassword" ) ); + assertEquals( 1, found.get( "userPassword" ).size() ); + assertTrue( found.contains( "userPassword", "" ) ); - connection.close(); -} + connection.close(); + } } Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyMultipleChangesIT.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyMultipleChangesIT.java?rev=1509635&r1=1509634&r2=1509635&view=diff ============================================================================== --- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyMultipleChangesIT.java (original) +++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyMultipleChangesIT.java Fri Aug 2 11:26:45 2013 @@ -23,7 +23,6 @@ package org.apache.directory.server.oper import static org.apache.directory.server.integ.ServerIntegrationUtils.getWiredContext; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import javax.naming.NamingEnumeration; @@ -36,19 +35,11 @@ import javax.naming.directory.Modificati import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; -import org.apache.directory.api.ldap.model.entry.DefaultEntry; -import org.apache.directory.api.ldap.model.entry.Entry; -import org.apache.directory.api.ldap.model.exception.LdapException; -import org.apache.directory.api.util.Strings; -import org.apache.directory.junit.tools.MultiThreadedMultiInvoker; -import org.apache.directory.ldap.client.api.LdapConnection; -import org.apache.directory.ldap.client.api.LdapNetworkConnection; import org.apache.directory.server.annotations.CreateLdapServer; import org.apache.directory.server.annotations.CreateTransport; import org.apache.directory.server.core.annotations.ApplyLdifs; import org.apache.directory.server.core.integ.AbstractLdapTestUnit; import org.apache.directory.server.core.integ.FrameworkRunner; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -83,16 +74,13 @@ import org.junit.runner.RunWith; "objectClass: person", "objectClass: top", "cn: Debbie Harry", - "sn: Harry" -}) + "sn: Harry" }) public class ModifyMultipleChangesIT extends AbstractLdapTestUnit { - @Rule - public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE ); private static final String BASE = "ou=system"; private static final String RDN_TORI_AMOS = "cn=Tori Amos"; - - + + /** * Creation of required attributes of a person entry. */ @@ -107,11 +95,11 @@ public class ModifyMultipleChangesIT ext attributes.put( attribute ); attributes.put( "cn", cn ); attributes.put( "sn", sn ); - + return attributes; } - - + + /** * Add a new attribute with two values. */ @@ -119,7 +107,7 @@ public class ModifyMultipleChangesIT ext public void testAddNewAttributeValues() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Add telephoneNumber attribute String[] newValues = { "1234567890", "999999999" }; @@ -129,7 +117,7 @@ public class ModifyMultipleChangesIT ext Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); ctx.modifyAttributes( RDN_TORI_AMOS, DirContext.ADD_ATTRIBUTE, attrs ); - + // Verify, that // - case of attribute description is correct // - attribute values are present @@ -141,8 +129,8 @@ public class ModifyMultipleChangesIT ext assertTrue( attr.contains( newValues[1] ) ); assertEquals( newValues.length, attr.size() ); } - - + + /** * Create a person entry and perform a modify op, in which * we modify an attribute two times. @@ -151,12 +139,12 @@ public class ModifyMultipleChangesIT ext public void testAttributeValueMultiMofificationDIRSERVER_636() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Create a person entry Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); String rdn = "cn=Kate Bush"; ctx.createSubcontext( rdn, attrs ); - + // Add a description with two values String[] descriptions = { @@ -165,28 +153,28 @@ public class ModifyMultipleChangesIT ext Attribute desc1 = new BasicAttribute( "description" ); desc1.add( descriptions[0] ); desc1.add( descriptions[1] ); - + ModificationItem addModOp = new ModificationItem( DirContext.ADD_ATTRIBUTE, desc1 ); - + Attribute desc2 = new BasicAttribute( "description" ); desc2.add( descriptions[1] ); ModificationItem delModOp = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, desc2 ); - + ctx.modifyAttributes( rdn, new ModificationItem[] { addModOp, delModOp } ); - + SearchControls sctls = new SearchControls(); sctls.setSearchScope( SearchControls.SUBTREE_SCOPE ); String filter = "(cn=*Bush)"; String base = ""; - + // Check entry NamingEnumeration enm = ctx.search( base, filter, sctls ); assertTrue( enm.hasMore() ); - + while ( enm.hasMore() ) { SearchResult sr = enm.next(); @@ -195,7 +183,7 @@ public class ModifyMultipleChangesIT ext assertEquals( 1, desc.size() ); assertTrue( desc.contains( descriptions[0] ) ); } - + // Remove the person entry ctx.destroySubcontext( rdn ); } Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReferralIT.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReferralIT.java?rev=1509635&r1=1509634&r2=1509635&view=diff ============================================================================== --- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReferralIT.java (original) +++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReferralIT.java Fri Aug 2 11:26:45 2013 @@ -39,7 +39,6 @@ import org.apache.directory.api.ldap.mod import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT; import org.apache.directory.api.ldap.model.message.controls.ManageDsaITImpl; import org.apache.directory.api.ldap.model.name.Dn; -import org.apache.directory.junit.tools.MultiThreadedMultiInvoker; import org.apache.directory.ldap.client.api.LdapConnection; import org.apache.directory.server.annotations.CreateLdapServer; import org.apache.directory.server.annotations.CreateTransport; @@ -47,7 +46,6 @@ import org.apache.directory.server.core. import org.apache.directory.server.core.integ.AbstractLdapTestUnit; import org.apache.directory.server.core.integ.FrameworkRunner; import org.apache.directory.server.operations.compare.CompareIT; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; @@ -106,15 +104,12 @@ import org.slf4j.LoggerFactory; "uid: akarasuluref", "ref: ldap://localhost:10389/uid=akarasulu,ou=users,ou=system", "ref: ldap://foo:10389/uid=akarasulu,ou=users,ou=system", - "ref: ldap://bar:10389/uid=akarasulu,ou=users,ou=system" -}) + "ref: ldap://bar:10389/uid=akarasulu,ou=users,ou=system" }) public class ModifyReferralIT extends AbstractLdapTestUnit { - @Rule - public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE ); private static final Logger LOG = LoggerFactory.getLogger( CompareIT.class ); - - + + /** * Tests modify operation on referral entry with the ManageDsaIT control. */ @@ -122,24 +117,24 @@ public class ModifyReferralIT extends Ab public void testOnReferralWithManageDsaITControl() throws Exception { LdapConnection conn = getWiredConnection( getLdapServer() ); - + ManageDsaIT manageDSAIT = new ManageDsaITImpl(); manageDSAIT.setCritical( true ); - + // modify success ModifyRequest modifyRequest = new ModifyRequestImpl(); modifyRequest.setName( new Dn( "uid=akarasuluref,ou=users,ou=system" ) ); modifyRequest.add( "description", "referral to akarasulu" ); modifyRequest.addControl( manageDSAIT ); - + conn.modify( modifyRequest ); - + assertTrue( conn.compare( "uid=akarasuluref,ou=users,ou=system", "description", "referral to akarasulu" ) ); - + conn.close(); } - - + + /** * Tests modify operation on referral entries without the * ManageDsaIT control. Referrals are sent back to the client with a @@ -149,28 +144,28 @@ public class ModifyReferralIT extends Ab public void testOnReferral() throws Exception { LdapConnection conn = getWiredConnection( getLdapServer() ); - + // referrals failure // modify success ModifyRequest modifyRequest = new ModifyRequestImpl(); modifyRequest.setName( new Dn( "uid=akarasuluref,ou=users,ou=system" ) ); modifyRequest.add( "description", "referral to akarasulu" ); - + ModifyResponse modifyResponse = conn.modify( modifyRequest ); - + assertEquals( ResultCodeEnum.REFERRAL, modifyResponse.getLdapResult().getResultCode() ); - + assertTrue( modifyResponse.getLdapResult().getReferral().getLdapUrls() .contains( "ldap://localhost:10389/uid=akarasulu,ou=users,ou=system" ) ); assertTrue( modifyResponse.getLdapResult().getReferral().getLdapUrls() .contains( "ldap://foo:10389/uid=akarasulu,ou=users,ou=system" ) ); assertTrue( modifyResponse.getLdapResult().getReferral().getLdapUrls() .contains( "ldap://bar:10389/uid=akarasulu,ou=users,ou=system" ) ); - + conn.close(); } - - + + /** * Tests modify operation on normal and referral entries without the * ManageDsaIT control using JNDI instead of the Netscape API. Referrals @@ -180,11 +175,11 @@ public class ModifyReferralIT extends Ab public void testThrowOnReferralWithJndi() throws Exception { LdapContext ctx = getWiredContextThrowOnRefferal( getLdapServer() ); - + // modify failure Attribute attr = new BasicAttribute( "description", "referral to akarasulu" ); ModificationItem mod = new ModificationItem( DirContext.ADD_ATTRIBUTE, attr ); - + try { ctx.modifyAttributes( "uid=akarasuluref,ou=users,ou=system", new ModificationItem[] @@ -195,11 +190,11 @@ public class ModifyReferralIT extends Ab // seems JNDI only returns the first referral URL and not all so we test for it assertEquals( "ldap://localhost:10389/uid=akarasulu,ou=users,ou=system", e.getReferralInfo() ); } - + ctx.close(); } - - + + /** * Tests referral handling when an ancestor is a referral. */ @@ -207,25 +202,25 @@ public class ModifyReferralIT extends Ab public void testAncestorReferral() throws Exception { LOG.debug( "" ); - + LdapConnection conn = getWiredConnection( getLdapServer() ); - + // referrals failure ModifyRequest modifyRequest = new ModifyRequestImpl(); modifyRequest.setName( new Dn( "ou=Computers,uid=akarasuluref,ou=users,ou=system" ) ); modifyRequest.add( "ou", "Machines" ); - + ModifyResponse modifyResponse = conn.modify( modifyRequest ); - + assertEquals( ResultCodeEnum.REFERRAL, modifyResponse.getLdapResult().getResultCode() ); - + assertTrue( modifyResponse.getLdapResult().getReferral().getLdapUrls() .contains( "ldap://localhost:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) ); assertTrue( modifyResponse.getLdapResult().getReferral().getLdapUrls() .contains( "ldap://foo:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) ); assertTrue( modifyResponse.getLdapResult().getReferral().getLdapUrls() .contains( "ldap://bar:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) ); - + conn.close(); } } Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyRemoveIT.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyRemoveIT.java?rev=1509635&r1=1509634&r2=1509635&view=diff ============================================================================== --- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyRemoveIT.java (original) +++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyRemoveIT.java Fri Aug 2 11:26:45 2013 @@ -42,14 +42,12 @@ import javax.naming.directory.SchemaViol import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; -import org.apache.directory.junit.tools.MultiThreadedMultiInvoker; import org.apache.directory.server.annotations.CreateLdapServer; import org.apache.directory.server.annotations.CreateTransport; import org.apache.directory.server.core.annotations.ApplyLdifs; import org.apache.directory.server.core.integ.AbstractLdapTestUnit; import org.apache.directory.server.core.integ.FrameworkRunner; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -75,16 +73,13 @@ import org.junit.runner.RunWith; "objectClass: top", "description: an American singer-songwriter", "cn: Tori Amos", - "sn: Amos" -}) + "sn: Amos" }) public class ModifyRemoveIT extends AbstractLdapTestUnit { - @Rule - public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE ); private static final String BASE = "ou=system"; private static final String RDN = "cn=Tori Amos"; - - + + /** * Enable the krb5kdc schema. */ @@ -92,20 +87,20 @@ public class ModifyRemoveIT extends Abst public void setUp() throws Exception { DirContext schemaRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( "ou=schema" ); - + // ------------------------------------------------------------------- // Enable the krb5kdc schema // ------------------------------------------------------------------- - + // check if krb5kdc is disabled Attributes krb5kdcAttrs = schemaRoot.getAttributes( "cn=Krb5kdc" ); boolean isKrb5KdcDisabled = false; - + if ( krb5kdcAttrs.get( "m-disabled" ) != null ) { isKrb5KdcDisabled = ( ( String ) krb5kdcAttrs.get( "m-disabled" ).get() ).equalsIgnoreCase( "TRUE" ); } - + // if krb5kdc is disabled then enable it if ( isKrb5KdcDisabled ) { @@ -115,8 +110,8 @@ public class ModifyRemoveIT extends Abst schemaRoot.modifyAttributes( "cn=Krb5kdc", mods ); } } - - + + /** * Creation of required attributes of a person entry. */ @@ -129,11 +124,11 @@ public class ModifyRemoveIT extends Abst attributes.put( attribute ); attributes.put( "cn", cn ); attributes.put( "sn", sn ); - + return attributes; } - - + + /** * Creation of required attributes of an inetOrgPerson entry. */ @@ -148,11 +143,11 @@ public class ModifyRemoveIT extends Abst attrs.put( ocls ); attrs.put( "cn", cn ); attrs.put( "sn", sn ); - + return attrs; } - - + + /** * Remove a value which does not exist in an attribute making sure * it does not remove other values in that attribute. Tests if the @@ -164,7 +159,7 @@ public class ModifyRemoveIT extends Abst public void testRemoveAttemptWithoutChange() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Get the attributes and check the contents Attributes tori = ctx.getAttributes( RDN ); assertNotNull( tori.get( "objectClass" ) ); @@ -172,7 +167,7 @@ public class ModifyRemoveIT extends Abst assertEquals( 1, tori.get( "cn" ).size() ); assertEquals( "Tori Amos", tori.get( "cn" ).get() ); assertNotNull( tori.get( "sn" ) ); - + // Test an add operation first ModificationItem mod = new ModificationItem( DirContext.ADD_ATTRIBUTE, new BasicAttribute( "cn", "foo" ) ); ctx.modifyAttributes( RDN, new ModificationItem[] @@ -184,7 +179,7 @@ public class ModifyRemoveIT extends Abst assertEquals( "Tori Amos", tori.get( "cn" ).get( 0 ) ); assertEquals( "foo", tori.get( "cn" ).get( 1 ) ); assertNotNull( tori.get( "sn" ) ); - + // Now test remove of value ( bar ) that does not exist in cn mod = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, new BasicAttribute( "cn", "bar" ) ); try @@ -197,7 +192,7 @@ public class ModifyRemoveIT extends Abst { assertTrue( true ); } - + tori = ctx.getAttributes( RDN ); assertNotNull( tori.get( "objectClass" ) ); assertNotNull( tori.get( "cn" ) ); @@ -206,8 +201,8 @@ public class ModifyRemoveIT extends Abst assertEquals( "foo", tori.get( "cn" ).get( 1 ) ); assertNotNull( tori.get( "sn" ) ); } - - + + /** * Remove an attribute, which is not required. * @@ -218,20 +213,20 @@ public class ModifyRemoveIT extends Abst public void testRemoveNotRequiredAttribute() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Remove description Attribute Attribute attr = new BasicAttribute( "description" ); Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs ); - + // Verify, that attribute is deleted attrs = ctx.getAttributes( RDN ); attr = attrs.get( "description" ); assertNull( attr ); } - - + + /** * Remove two not required attributes. * @@ -242,17 +237,17 @@ public class ModifyRemoveIT extends Abst public void testRemoveTwoNotRequiredAttributes() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // add telephoneNumber to entry Attributes tn = new BasicAttributes( "telephoneNumber", "12345678", true ); ctx.modifyAttributes( RDN, DirContext.ADD_ATTRIBUTE, tn ); - + // Remove description and telephoneNumber to Attribute Attributes attrs = new BasicAttributes( true ); attrs.put( new BasicAttribute( "description" ) ); attrs.put( new BasicAttribute( "telephoneNumber" ) ); ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs ); - + // Verify, that attributes are deleted attrs = ctx.getAttributes( RDN ); assertNull( attrs.get( "description" ) ); @@ -260,8 +255,8 @@ public class ModifyRemoveIT extends Abst assertNotNull( attrs.get( "cn" ) ); assertNotNull( attrs.get( "sn" ) ); } - - + + /** * Remove a required attribute. The sn attribute of the person entry is used * here. @@ -272,12 +267,12 @@ public class ModifyRemoveIT extends Abst public void testRemoveRequiredAttribute() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Remove sn attribute Attribute attr = new BasicAttribute( "sn" ); Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); - + try { ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs ); @@ -288,8 +283,8 @@ public class ModifyRemoveIT extends Abst // expected behaviour } } - - + + /** * Remove a required attribute from Rdn. * @@ -299,12 +294,12 @@ public class ModifyRemoveIT extends Abst public void testRemovePartOfRdn() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Remove sn attribute Attribute attr = new BasicAttribute( "cn" ); Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); - + try { ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs ); @@ -315,8 +310,8 @@ public class ModifyRemoveIT extends Abst // expected behaviour } } - - + + /** * Remove a not required attribute from Rdn. * @@ -326,17 +321,17 @@ public class ModifyRemoveIT extends Abst public void testRemovePartOfRdnNotRequired() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Change Rdn to another attribute String newRdn = "description=an American singer-songwriter"; ctx.addToEnvironment( "java.naming.ldap.deleteRDN", "false" ); ctx.rename( RDN, newRdn ); - + // Remove description, which is now Rdn attribute Attribute attr = new BasicAttribute( "description" ); Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); - + try { ctx.modifyAttributes( newRdn, DirContext.REMOVE_ATTRIBUTE, attrs ); @@ -346,13 +341,13 @@ public class ModifyRemoveIT extends Abst { // expected behaviour } - + // Change Rdn back to original ctx.addToEnvironment( "java.naming.ldap.deleteRDN", "false" ); ctx.rename( newRdn, RDN ); } - - + + /** * Remove a an attribute which is not present on the entry, but in the * schema. @@ -363,12 +358,12 @@ public class ModifyRemoveIT extends Abst public void testRemoveAttributeNotPresent() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Remove telephoneNumber Attribute Attribute attr = new BasicAttribute( "telephoneNumber" ); Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); - + try { ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs ); @@ -380,8 +375,8 @@ public class ModifyRemoveIT extends Abst // expected behaviour } } - - + + /** * Remove a an attribute value which is not present in the entry * @@ -391,20 +386,20 @@ public class ModifyRemoveIT extends Abst public void testRemoveAttributeValueNotPresent() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Remove telephoneNumber Attribute Attribute attr = new BasicAttribute( "telephoneNumber", "12345" ); Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); - + // Inject the new attribute ctx.modifyAttributes( RDN, DirContext.ADD_ATTRIBUTE, attrs ); - + // Now try to remove a value which is not present Attribute attr2 = new BasicAttribute( "telephoneNumber", "7890" ); Attributes attrs2 = new BasicAttributes( true ); attrs2.put( attr2 ); - + try { ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs2 ); @@ -416,8 +411,8 @@ public class ModifyRemoveIT extends Abst assertTrue( true ); } } - - + + /** * Remove a an attribute which is not present in the schema. * @@ -427,12 +422,12 @@ public class ModifyRemoveIT extends Abst public void testRemoveAttributeNotValid() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Remove phantasy attribute Attribute attr = new BasicAttribute( "XXX" ); Attributes attrs = new BasicAttributes( true ); attrs.put( attr ); - + try { ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs ); @@ -447,8 +442,8 @@ public class ModifyRemoveIT extends Abst // expected behaviour } } - - + + /** * Create a person entry and try to remove an attribute value */ @@ -456,19 +451,19 @@ public class ModifyRemoveIT extends Abst public void testReplaceNonExistingAttribute() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Create an entry Attributes attrs = getInetOrgPersonAttributes( "Bush", "Kate Bush" ); attrs.put( "givenname", "Kate" ); String rdn = "cn=Kate Bush"; ctx.createSubcontext( rdn, attrs ); - + // replace attribute givenName with empty value (=> deletion) Attribute attr = new BasicAttribute( "givenname" ); ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr ); ctx.modifyAttributes( rdn, new ModificationItem[] { item } ); - + SearchControls sctls = new SearchControls(); sctls.setSearchScope( SearchControls.ONELEVEL_SCOPE ); String filter = "(cn=Kate Bush)"; @@ -481,7 +476,7 @@ public class ModifyRemoveIT extends Abst Attribute cn = sr.getAttributes().get( "cn" ); assertNotNull( cn ); assertTrue( cn.contains( "Kate Bush" ) ); - + // Check whether attribute has been removed Attribute givenName = sr.getAttributes().get( "givenname" ); assertNull( givenName ); @@ -490,11 +485,11 @@ public class ModifyRemoveIT extends Abst { fail( "entry not found" ); } - + ctx.destroySubcontext( rdn ); } - - + + /** * Create a person entry and try to remove an attribute value from the Rdn * by Replacement @@ -503,16 +498,16 @@ public class ModifyRemoveIT extends Abst public void testReplaceRdnByEmptyValueAttribute() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Create an entry Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); String rdn = "cn=Kate Bush"; ctx.createSubcontext( rdn, attrs ); - + // replace attribute cn with empty value (=> deletion) Attribute attr = new BasicAttribute( "cn" ); ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr ); - + try { ctx.modifyAttributes( rdn, new ModificationItem[] @@ -523,11 +518,11 @@ public class ModifyRemoveIT extends Abst { // Expected behaviour } - + ctx.destroySubcontext( rdn ); } - - + + /** * Create a person entry and try to remove an attribute from the Rdn */ @@ -535,16 +530,16 @@ public class ModifyRemoveIT extends Abst public void testRemoveRdnAttribute() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Create an entry Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); String rdn = "cn=Kate Bush"; ctx.createSubcontext( rdn, attrs ); - + // replace attribute cn with empty value (=> deletion) Attribute attr = new BasicAttribute( "cn" ); ModificationItem item = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, attr ); - + try { ctx.modifyAttributes( rdn, new ModificationItem[] @@ -555,11 +550,11 @@ public class ModifyRemoveIT extends Abst { // Expected behaviour } - + ctx.destroySubcontext( rdn ); } - - + + /** * Create a person entry and try to remove an attribute from the Rdn */ @@ -567,16 +562,16 @@ public class ModifyRemoveIT extends Abst public void testRemoveRdnAttributeValue() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Create an entry Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" ); String rdn = "cn=Kate Bush"; ctx.createSubcontext( rdn, attrs ); - + // replace attribute cn with empty value (=> deletion) Attribute attr = new BasicAttribute( "cn", "Kate Bush" ); ModificationItem item = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, attr ); - + try { ctx.modifyAttributes( rdn, new ModificationItem[] @@ -587,11 +582,11 @@ public class ModifyRemoveIT extends Abst { // Expected behaviour } - + ctx.destroySubcontext( rdn ); } - - + + /** * Create a person entry and try to remove objectClass attribute */ @@ -599,15 +594,16 @@ public class ModifyRemoveIT extends Abst public void testDeleteOclAttrWithTopPersonOrganizationalpersonInetorgperson() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Create an entry Attributes attrs = getInetOrgPersonAttributes( "Bush", "Kate Bush" ); String rdn = "cn=Kate Bush"; ctx.createSubcontext( rdn, attrs ); - - ModificationItem delModOp = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, new BasicAttribute( "objectclass", + + ModificationItem delModOp = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, new BasicAttribute( + "objectclass", "" ) ); - + try { ctx.modifyAttributes( rdn, new ModificationItem[] @@ -630,11 +626,11 @@ public class ModifyRemoveIT extends Abst { e.printStackTrace(); } - + ctx.destroySubcontext( rdn ); } - - + + /** * Create a person entry and try to remove objectClass attribute. A variant * which works. @@ -643,14 +639,15 @@ public class ModifyRemoveIT extends Abst public void testDeleteOclAttrWithTopPersonOrganizationalpersonInetorgpersonVariant() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // Create an entry Attributes attrs = getInetOrgPersonAttributes( "Bush", "Kate Bush" ); String rdn = "cn=Kate Bush"; ctx.createSubcontext( rdn, attrs ); - - ModificationItem delModOp = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, new BasicAttribute( "objectclass" ) ); - + + ModificationItem delModOp = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, new BasicAttribute( + "objectclass" ) ); + try { ctx.modifyAttributes( rdn, new ModificationItem[] @@ -661,11 +658,11 @@ public class ModifyRemoveIT extends Abst { // expected } - + ctx.destroySubcontext( rdn ); } - - + + /** * Test for DIRSERVER-1308: * Remove an objectClass and a mandatory attribute. @@ -677,19 +674,19 @@ public class ModifyRemoveIT extends Abst public void testRemoveObjectClassAndMandatoryAttribute() throws Exception { DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE ); - + // add objectClass:krb5Principal and krb5PrincipalName:test to entry Attributes tn = new BasicAttributes( true ); tn.put( new BasicAttribute( "objectClass", "krb5Principal", true ) ); tn.put( new BasicAttribute( "krb5PrincipalName", "test", true ) ); ctx.modifyAttributes( RDN, DirContext.ADD_ATTRIBUTE, tn ); - + // remove objectClass:krb5Principal and krb5PrincipalName Attributes attrs = new BasicAttributes( true ); attrs.put( new BasicAttribute( "objectClass", "krb5Principal", true ) ); attrs.put( new BasicAttribute( "krb5PrincipalName" ) ); ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, attrs ); - + // Verify, that attributes are deleted attrs = ctx.getAttributes( RDN ); assertNotNull( attrs.get( "objectClass" ) );