You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2013/08/02 13:26:46 UTC

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

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<SearchResult> 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<SearchResult> 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 <a href="http://issues.apache.org/jira/browse/DIRSERVER-614">DIRSERVER-614</a>
- */
-@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 <a href="http://issues.apache.org/jira/browse/DIRSERVER-614">DIRSERVER-614</a>
+     */
+    @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<SearchResult> 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<SearchResult> 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<SearchResult> 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" ) );