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 2012/05/06 16:25:20 UTC

svn commit: r1334639 [3/5] - in /directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server: operations/add/ operations/bind/ operations/compare/ operations/delete/ operations/extended/ operations/ldapsdk/ operations/lookup/ operat...

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=1334639&r1=1334638&r2=1334639&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 Sun May  6 14:25:18 2012
@@ -6,16 +6,16 @@
  *  to you under the Apache License, Version 2.0 (the
  *  "License"); you may not use this file except in compliance
  *  with the License.  You may obtain a copy of the License at
- *  
+ * 
  *    http://www.apache.org/licenses/LICENSE-2.0
- *  
+ * 
  *  Unless required by applicable law or agreed to in writing,
  *  software distributed under the License is distributed on an
  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
- *  under the License. 
- *  
+ *  under the License.
+ * 
  */
 package org.apache.directory.server.operations.modify;
 
@@ -42,12 +42,14 @@ 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;
 
@@ -77,621 +79,623 @@ import org.junit.runner.RunWith;
 })
 public class ModifyRemoveIT extends AbstractLdapTestUnit
 {
-private static final String BASE = "ou=system";
-private static final String RDN = "cn=Tori Amos";
-
-
-/**
- * Enable the krb5kdc schema.
- */
-@Before
-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 )
-    {
-        Attribute disabled = new BasicAttribute( "m-disabled" );
-        ModificationItem[] mods = new ModificationItem[]
-            { new ModificationItem( DirContext.REMOVE_ATTRIBUTE, disabled ) };
-        schemaRoot.modifyAttributes( "cn=Krb5kdc", mods );
-    }
-}
-
-
-/**
- * Creation of required attributes of a person entry.
- */
-protected Attributes getPersonAttributes( String sn, String cn )
-{
-    Attributes attributes = new BasicAttributes( true );
-    Attribute attribute = new BasicAttribute( "objectClass" );
-    attribute.add( "top" );
-    attribute.add( "person" );
-    attributes.put( attribute );
-    attributes.put( "cn", cn );
-    attributes.put( "sn", sn );
-
-    return attributes;
-}
-
-
-/**
- * Creation of required attributes of an inetOrgPerson entry.
- */
-protected Attributes getInetOrgPersonAttributes( String sn, String cn )
-{
-    Attributes attrs = new BasicAttributes( true );
-    Attribute ocls = new BasicAttribute( "objectClass" );
-    ocls.add( "top" );
-    ocls.add( "person" );
-    ocls.add( "organizationalPerson" );
-    ocls.add( "inetOrgPerson" );
-    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 
- * following JIRA issue is still valid:
- * 
- *    https://issues.apache.org/jira/browse/DIRSERVER-1149
- */
-@Test
-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" ) );
-    assertNotNull( tori.get( "cn" ) );
-    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[]
-        { mod } );
-    tori = ctx.getAttributes( RDN );
-    assertNotNull( tori.get( "objectClass" ) );
-    assertNotNull( tori.get( "cn" ) );
-    assertEquals( 2, tori.get( "cn" ).size() );
-    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
-    {
+    @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.
+     */
+    @Before
+    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 )
+        {
+            Attribute disabled = new BasicAttribute( "m-disabled" );
+            ModificationItem[] mods = new ModificationItem[]
+                { new ModificationItem( DirContext.REMOVE_ATTRIBUTE, disabled ) };
+            schemaRoot.modifyAttributes( "cn=Krb5kdc", mods );
+        }
+    }
+    
+    
+    /**
+     * Creation of required attributes of a person entry.
+     */
+    protected Attributes getPersonAttributes( String sn, String cn )
+    {
+        Attributes attributes = new BasicAttributes( true );
+        Attribute attribute = new BasicAttribute( "objectClass" );
+        attribute.add( "top" );
+        attribute.add( "person" );
+        attributes.put( attribute );
+        attributes.put( "cn", cn );
+        attributes.put( "sn", sn );
+    
+        return attributes;
+    }
+    
+    
+    /**
+     * Creation of required attributes of an inetOrgPerson entry.
+     */
+    protected Attributes getInetOrgPersonAttributes( String sn, String cn )
+    {
+        Attributes attrs = new BasicAttributes( true );
+        Attribute ocls = new BasicAttribute( "objectClass" );
+        ocls.add( "top" );
+        ocls.add( "person" );
+        ocls.add( "organizationalPerson" );
+        ocls.add( "inetOrgPerson" );
+        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
+     * following JIRA issue is still valid:
+     * 
+     *    https://issues.apache.org/jira/browse/DIRSERVER-1149
+     */
+    @Test
+    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" ) );
+        assertNotNull( tori.get( "cn" ) );
+        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[]
             { mod } );
-        fail();
-    }
-    catch ( NoSuchAttributeException nsae )
-    {
-        assertTrue( true );
-    }
-
-    tori = ctx.getAttributes( RDN );
-    assertNotNull( tori.get( "objectClass" ) );
-    assertNotNull( tori.get( "cn" ) );
-    assertEquals( 2, tori.get( "cn" ).size() );
-    assertEquals( "Tori Amos", tori.get( "cn" ).get( 0 ) );
-    assertEquals( "foo", tori.get( "cn" ).get( 1 ) );
-    assertNotNull( tori.get( "sn" ) );
-}
-
-
-/**
- * Remove an attribute, which is not required.
- * 
- * Expected result: After successful deletion, attribute is not present in
- * entry.
- */
-@Test
-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.
- * 
- * Expected result: After successful deletion, both attributes ar not
- * present in entry.
- */
-@Test
-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" ) );
-    assertNull( attrs.get( "telephoneNumber" ) );
-    assertNotNull( attrs.get( "cn" ) );
-    assertNotNull( attrs.get( "sn" ) );
-}
-
-
-/**
- * Remove a required attribute. The sn attribute of the person entry is used
- * here.
- * 
- * Expected Result: Deletion fails with NamingException (Schema Violation).
- */
-@Test
-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
-    {
+        tori = ctx.getAttributes( RDN );
+        assertNotNull( tori.get( "objectClass" ) );
+        assertNotNull( tori.get( "cn" ) );
+        assertEquals( 2, tori.get( "cn" ).size() );
+        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
+        {
+            ctx.modifyAttributes( RDN, new ModificationItem[]
+                { mod } );
+            fail();
+        }
+        catch ( NoSuchAttributeException nsae )
+        {
+            assertTrue( true );
+        }
+    
+        tori = ctx.getAttributes( RDN );
+        assertNotNull( tori.get( "objectClass" ) );
+        assertNotNull( tori.get( "cn" ) );
+        assertEquals( 2, tori.get( "cn" ).size() );
+        assertEquals( "Tori Amos", tori.get( "cn" ).get( 0 ) );
+        assertEquals( "foo", tori.get( "cn" ).get( 1 ) );
+        assertNotNull( tori.get( "sn" ) );
+    }
+    
+    
+    /**
+     * Remove an attribute, which is not required.
+     * 
+     * Expected result: After successful deletion, attribute is not present in
+     * entry.
+     */
+    @Test
+    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 );
-        fail( "Deletion of required attribute should fail." );
-    }
-    catch ( SchemaViolationException e )
-    {
-        // expected behaviour
-    }
-}
-
-
-/**
- * Remove a required attribute from Rdn.
- * 
- * Expected Result: Deletion fails with SchemaViolationException.
- */
-@Test
-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
-    {
+    
+        // Verify, that attribute is deleted
+        attrs = ctx.getAttributes( RDN );
+        attr = attrs.get( "description" );
+        assertNull( attr );
+    }
+    
+    
+    /**
+     * Remove two not required attributes.
+     * 
+     * Expected result: After successful deletion, both attributes ar not
+     * present in entry.
+     */
+    @Test
+    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 );
-        fail( "Deletion of Rdn attribute should fail." );
-    }
-    catch ( SchemaViolationException e )
-    {
-        // expected behaviour
-    }
-}
-
-
-/**
- * Remove a not required attribute from Rdn.
- * 
- * Expected Result: Deletion fails with SchemaViolationException.
- */
-@Test
-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 );
-        fail( "Deletion of Rdn attribute should fail." );
-    }
-    catch ( SchemaViolationException e )
-    {
-        // 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.
- * 
- * Expected result: Deletion fails with NoSuchAttributeException
- */
-@Test
-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 );
-        fail( "Deletion of attribute, which is not present in the entry, should fail." );
-    }
-    catch ( NoSuchAttributeException e )
-    {
-        assertTrue( true );
-        // expected behaviour
-    }
-}
-
-
-/**
- * Remove a an attribute value which is not present in the entry
- * 
- * Expected result: Deletion fails with NoSuchAttributeException
- */
-@Test
-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 );
-        // We should get an exception
-        fail();
-    }
-    catch ( NoSuchAttributeException nsae )
-    {
-        assertTrue( true );
-    }
-}
-
-
-/**
- * Remove a an attribute which is not present in the schema.
- * 
- * Expected result: Deletion fails with NoSuchAttributeException
- */
-@Test
-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 );
-        fail( "Deletion of an invalid attribute should fail." );
-    }
-    catch ( NoSuchAttributeException e )
-    {
-        // expected behaviour
-    }
-    catch ( InvalidAttributeIdentifierException e )
-    {
-        // expected behaviour
-    }
-}
-
-
-/**
- * Create a person entry and try to remove an attribute value
- */
-@Test
-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)";
-    String base = "";
-    NamingEnumeration<SearchResult> enm = ctx.search( base, filter, sctls );
-    if ( enm.hasMore() )
-    {
-        SearchResult sr = enm.next();
-        attrs = sr.getAttributes();
-        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 );
-    }
-    else
-    {
-        fail( "entry not found" );
-    }
-
-    ctx.destroySubcontext( rdn );
-}
-
-
-/**
- * Create a person entry and try to remove an attribute value from the Rdn
- * by Replacement
- */
-@Test
-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[]
-            { item } );
-        fail( "modify should fail" );
+    
+        // Verify, that attributes are deleted
+        attrs = ctx.getAttributes( RDN );
+        assertNull( attrs.get( "description" ) );
+        assertNull( attrs.get( "telephoneNumber" ) );
+        assertNotNull( attrs.get( "cn" ) );
+        assertNotNull( attrs.get( "sn" ) );
+    }
+    
+    
+    /**
+     * Remove a required attribute. The sn attribute of the person entry is used
+     * here.
+     * 
+     * Expected Result: Deletion fails with NamingException (Schema Violation).
+     */
+    @Test
+    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 );
+            fail( "Deletion of required attribute should fail." );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // expected behaviour
+        }
     }
-    catch ( SchemaViolationException e )
-    {
-        // Expected behaviour
+    
+    
+    /**
+     * Remove a required attribute from Rdn.
+     * 
+     * Expected Result: Deletion fails with SchemaViolationException.
+     */
+    @Test
+    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 );
+            fail( "Deletion of Rdn attribute should fail." );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // expected behaviour
+        }
     }
-
-    ctx.destroySubcontext( rdn );
-}
-
-
-/**
- * Create a person entry and try to remove an attribute from the Rdn
- */
-@Test
-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[]
-            { item } );
-        fail( "modify should fail" );
+    
+    
+    /**
+     * Remove a not required attribute from Rdn.
+     * 
+     * Expected Result: Deletion fails with SchemaViolationException.
+     */
+    @Test
+    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 );
+            fail( "Deletion of Rdn attribute should fail." );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // 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.
+     * 
+     * Expected result: Deletion fails with NoSuchAttributeException
+     */
+    @Test
+    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 );
+            fail( "Deletion of attribute, which is not present in the entry, should fail." );
+        }
+        catch ( NoSuchAttributeException e )
+        {
+            assertTrue( true );
+            // expected behaviour
+        }
+    }
+    
+    
+    /**
+     * Remove a an attribute value which is not present in the entry
+     * 
+     * Expected result: Deletion fails with NoSuchAttributeException
+     */
+    @Test
+    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 );
+            // We should get an exception
+            fail();
+        }
+        catch ( NoSuchAttributeException nsae )
+        {
+            assertTrue( true );
+        }
     }
-    catch ( SchemaViolationException e )
-    {
-        // Expected behaviour
+    
+    
+    /**
+     * Remove a an attribute which is not present in the schema.
+     * 
+     * Expected result: Deletion fails with NoSuchAttributeException
+     */
+    @Test
+    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 );
+            fail( "Deletion of an invalid attribute should fail." );
+        }
+        catch ( NoSuchAttributeException e )
+        {
+            // expected behaviour
+        }
+        catch ( InvalidAttributeIdentifierException e )
+        {
+            // expected behaviour
+        }
     }
-
-    ctx.destroySubcontext( rdn );
-}
-
-
-/**
- * Create a person entry and try to remove an attribute from the Rdn
- */
-@Test
-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
-    {
+    
+    
+    /**
+     * Create a person entry and try to remove an attribute value
+     */
+    @Test
+    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 } );
-        fail( "modify should fail" );
-    }
-    catch ( SchemaViolationException e )
-    {
-        // Expected behaviour
-    }
-
-    ctx.destroySubcontext( rdn );
-}
-
-
-/**
- * Create a person entry and try to remove objectClass attribute
- */
-@Test
-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",
-        "" ) );
-
-    try
-    {
-        ctx.modifyAttributes( rdn, new ModificationItem[]
-            { delModOp } );
-        fail( "deletion of objectclass should fail" );
-    }
-    catch ( SchemaViolationException e )
-    {
-        // expected
-    }
-    catch ( NoSuchAttributeException e )
-    {
-        // expected
-    }
-    catch ( InvalidAttributeValueException e )
-    {
-        // expected
-    }
-    catch ( Exception e )
-    {
-        e.printStackTrace();
-    }
-
-    ctx.destroySubcontext( rdn );
-}
-
-
-/**
- * Create a person entry and try to remove objectClass attribute. A variant
- * which works.
- */
-@Test
-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" ) );
-
-    try
-    {
-        ctx.modifyAttributes( rdn, new ModificationItem[]
-            { delModOp } );
-        fail( "deletion of objectclass should fail" );
-    }
-    catch ( SchemaViolationException e )
-    {
-        // expected
+    
+        SearchControls sctls = new SearchControls();
+        sctls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
+        String filter = "(cn=Kate Bush)";
+        String base = "";
+        NamingEnumeration<SearchResult> enm = ctx.search( base, filter, sctls );
+        if ( enm.hasMore() )
+        {
+            SearchResult sr = enm.next();
+            attrs = sr.getAttributes();
+            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 );
+        }
+        else
+        {
+            fail( "entry not found" );
+        }
+    
+        ctx.destroySubcontext( rdn );
+    }
+    
+    
+    /**
+     * Create a person entry and try to remove an attribute value from the Rdn
+     * by Replacement
+     */
+    @Test
+    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[]
+                { item } );
+            fail( "modify should fail" );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // Expected behaviour
+        }
+    
+        ctx.destroySubcontext( rdn );
+    }
+    
+    
+    /**
+     * Create a person entry and try to remove an attribute from the Rdn
+     */
+    @Test
+    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[]
+                { item } );
+            fail( "modify should fail" );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // Expected behaviour
+        }
+    
+        ctx.destroySubcontext( rdn );
+    }
+    
+    
+    /**
+     * Create a person entry and try to remove an attribute from the Rdn
+     */
+    @Test
+    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[]
+                { item } );
+            fail( "modify should fail" );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // Expected behaviour
+        }
+    
+        ctx.destroySubcontext( rdn );
+    }
+    
+    
+    /**
+     * Create a person entry and try to remove objectClass attribute
+     */
+    @Test
+    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",
+            "" ) );
+    
+        try
+        {
+            ctx.modifyAttributes( rdn, new ModificationItem[]
+                { delModOp } );
+            fail( "deletion of objectclass should fail" );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // expected
+        }
+        catch ( NoSuchAttributeException e )
+        {
+            // expected
+        }
+        catch ( InvalidAttributeValueException e )
+        {
+            // expected
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();
+        }
+    
+        ctx.destroySubcontext( rdn );
+    }
+    
+    
+    /**
+     * Create a person entry and try to remove objectClass attribute. A variant
+     * which works.
+     */
+    @Test
+    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" ) );
+    
+        try
+        {
+            ctx.modifyAttributes( rdn, new ModificationItem[]
+                { delModOp } );
+            fail( "deletion of objectclass should fail" );
+        }
+        catch ( SchemaViolationException e )
+        {
+            // expected
+        }
+    
+        ctx.destroySubcontext( rdn );
+    }
+    
+    
+    /**
+     * Test for DIRSERVER-1308:
+     * Remove an objectClass and a mandatory attribute.
+     * 
+     * Expected result: After successful deletion, both the objectClass
+     * and the attribute are not present in entry.
+     */
+    @Test
+    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" ) );
+        assertFalse( attrs.get( "objectClass" ).contains( "krb5Principal" ) );
+        assertNull( attrs.get( "krb5PrincipalName" ) );
+        assertNotNull( attrs.get( "cn" ) );
+        assertNotNull( attrs.get( "sn" ) );
     }
-
-    ctx.destroySubcontext( rdn );
-}
-
-
-/**
- * Test for DIRSERVER-1308:
- * Remove an objectClass and a mandatory attribute.
- * 
- * Expected result: After successful deletion, both the objectClass
- * and the attribute are not present in entry.
- */
-@Test
-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" ) );
-    assertFalse( attrs.get( "objectClass" ).contains( "krb5Principal" ) );
-    assertNull( attrs.get( "krb5PrincipalName" ) );
-    assertNotNull( attrs.get( "cn" ) );
-    assertNotNull( attrs.get( "sn" ) );
-}
 }

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReplaceIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReplaceIT.java?rev=1334639&r1=1334638&r2=1334639&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReplaceIT.java (original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modify/ModifyReplaceIT.java Sun May  6 14:25:18 2012
@@ -6,16 +6,16 @@
  *  to you under the Apache License, Version 2.0 (the
  *  "License"); you may not use this file except in compliance
  *  with the License.  You may obtain a copy of the License at
- *  
+ * 
  *    http://www.apache.org/licenses/LICENSE-2.0
- *  
+ * 
  *  Unless required by applicable law or agreed to in writing,
  *  software distributed under the License is distributed on an
  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
- *  under the License. 
- *  
+ *  under the License.
+ * 
  */
 package org.apache.directory.server.operations.modify;
 
@@ -39,12 +39,14 @@ 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.annotations.CreateDS;
 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,245 +85,247 @@ import org.junit.runner.RunWith;
 })
 public class ModifyReplaceIT extends AbstractLdapTestUnit
 {
-private static final String BASE = "ou=system";
-
-
-/**
- * Create a person entry and try to remove a not present attribute
- */
-@Test
-public void testReplaceToRemoveNotPresentAttribute() throws Exception
-{
-    DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
-
-    String rdn = "cn=Kate Bush";
-
-    Attribute attr = new BasicAttribute( "description" );
-    ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
-
-    sysRoot.modifyAttributes( rdn, new ModificationItem[]
-        { item } );
-
-    SearchControls sctls = new SearchControls();
-    sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-    String filter = "(sn=Bush)";
-    String base = "";
-
-    NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
-
-    while ( enm.hasMore() )
-    {
-        SearchResult sr = ( SearchResult ) enm.next();
-        Attribute cn = sr.getAttributes().get( "cn" );
-        assertNotNull( cn );
-        assertTrue( cn.contains( "Kate Bush" ) );
-        Attribute desc = sr.getAttributes().get( "description" );
-        assertNull( desc );
-    }
-}
-
-
-/**
- * Create a person entry and try to add a not present attribute via a REPLACE
- */
-@Test
-public void testReplaceToAddNotPresentAttribute() throws Exception
-{
-    DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
-
-    String rdn = "cn=Kate Bush";
-
-    Attribute attr = new BasicAttribute( "description", "added description" );
-    ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
-
-    sysRoot.modifyAttributes( rdn, new ModificationItem[]
-        { item } );
-
-    SearchControls sctls = new SearchControls();
-    sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-    String filter = "(sn=Bush)";
-    String base = "";
-
-    NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
-
-    while ( enm.hasMore() )
-    {
-        SearchResult sr = ( SearchResult ) enm.next();
-        Attribute cn = sr.getAttributes().get( "cn" );
-        assertNotNull( cn );
-        assertTrue( cn.contains( "Kate Bush" ) );
-        Attribute desc = sr.getAttributes().get( "description" );
-        assertNotNull( desc );
-        assertTrue( desc.contains( "added description" ) );
-        assertEquals( 1, desc.size() );
-    }
-}
-
-
-/**
- * Create a person entry and try to remove a non existing attribute
- */
-@Test
-public void testReplaceNonExistingAttribute() throws Exception
-{
-    DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
-
-    String rdn = "cn=Kate Bush";
-
-    Attribute attr = new BasicAttribute( "numberOfOctaves" );
-    ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
-
-    try
-    {
+    @Rule
+    public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE );
+    private static final String BASE = "ou=system";
+    
+    
+    /**
+     * Create a person entry and try to remove a not present attribute
+     */
+    @Test
+    public void testReplaceToRemoveNotPresentAttribute() throws Exception
+    {
+        DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
+    
+        String rdn = "cn=Kate Bush";
+    
+        Attribute attr = new BasicAttribute( "description" );
+        ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
+    
         sysRoot.modifyAttributes( rdn, new ModificationItem[]
             { item } );
-        fail();
-    }
-    catch ( InvalidAttributeIdentifierException iaie )
-    {
-        assertTrue( true );
-    }
-
-    SearchControls sctls = new SearchControls();
-    sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-    String filter = "(sn=Bush)";
-    String base = "";
-
-    NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
-
-    while ( enm.hasMore() )
-    {
-        SearchResult sr = enm.next();
-        Attribute cn = sr.getAttributes().get( "cn" );
-        assertNotNull( cn );
-        assertTrue( cn.contains( "Kate Bush" ) );
-    }
-}
-
-
-/**
- * Create a person entry and try to remove a non existing attribute
- */
-@Test
-public void testReplaceNonExistingAttributeManyMods() throws Exception
-{
-    DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
-
-    String rdn = "cn=Kate Bush";
-
-    Attribute attr = new BasicAttribute( "numberOfOctaves" );
-    ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
-    Attribute attr2 = new BasicAttribute( "description", "blah blah blah" );
-    ModificationItem item2 = new ModificationItem( DirContext.ADD_ATTRIBUTE, attr2 );
-
-    try
-    {
+    
+        SearchControls sctls = new SearchControls();
+        sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+        String filter = "(sn=Bush)";
+        String base = "";
+    
+        NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
+    
+        while ( enm.hasMore() )
+        {
+            SearchResult sr = enm.next();
+            Attribute cn = sr.getAttributes().get( "cn" );
+            assertNotNull( cn );
+            assertTrue( cn.contains( "Kate Bush" ) );
+            Attribute desc = sr.getAttributes().get( "description" );
+            assertNull( desc );
+        }
+    }
+    
+    
+    /**
+     * Create a person entry and try to add a not present attribute via a REPLACE
+     */
+    @Test
+    public void testReplaceToAddNotPresentAttribute() throws Exception
+    {
+        DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
+    
+        String rdn = "cn=Kate Bush";
+    
+        Attribute attr = new BasicAttribute( "description", "added description" );
+        ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
+    
         sysRoot.modifyAttributes( rdn, new ModificationItem[]
-            { item, item2 } );
-        fail();
-    }
-    catch ( InvalidAttributeIdentifierException iaie )
-    {
-        assertTrue( true );
-    }
-
-    SearchControls sctls = new SearchControls();
-    sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-    String filter = "(sn=Bush)";
-    String base = "";
-
-    NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
-    while ( enm.hasMore() )
-    {
-        SearchResult sr = enm.next();
-        Attribute cn = sr.getAttributes().get( "cn" );
-        assertNotNull( cn );
-        assertTrue( cn.contains( "Kate Bush" ) );
-    }
-}
-
-
-/**
- * Create a person entry and try to replace a non existing indexed attribute
- */
-@Test
-public void testReplaceNonExistingIndexedAttribute() throws Exception
-{
-    DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
-
-    String rdn = "cn=Kim Wilde";
-
-    Attribute attr = new BasicAttribute( "ou", "test" );
-    ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
-
-    sysRoot.modifyAttributes( rdn, new ModificationItem[]
-        { item } );
-
-    SearchControls sctls = new SearchControls();
-    sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
-    String filter = "(sn=Wilde)";
-    String base = "";
-
-    NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
-
-    while ( enm.hasMore() )
-    {
-        SearchResult sr = enm.next();
-        Attribute ou = sr.getAttributes().get( "ou" );
-        assertNotNull( ou );
-        assertTrue( ou.contains( "test" ) );
-    }
-}
-
-
-/**
- * Create a person entry, replace telephoneNumber, verify the 
- * case of the attribute description attribute.
- */
-@Test
-public void testReplaceCaseOfAttributeDescription() throws Exception
-{
-    DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
-    String rdn = "cn=Kate Bush";
-
-    // Replace telephoneNumber
-    String newValue = "2345678901";
-    Attributes attrs = new BasicAttributes( "telephoneNumber", newValue, false );
-    ctx.modifyAttributes( rdn, DirContext.REPLACE_ATTRIBUTE, attrs );
-
-    // Verify, that
-    // - case of attribute description is correct
-    // - attribute value is added 
-    attrs = ctx.getAttributes( rdn );
-    Attribute attr = attrs.get( "telephoneNumber" );
-    assertNotNull( attr );
-    assertEquals( "telephoneNumber", attr.getID() );
-    assertTrue( attr.contains( newValue ) );
-    assertEquals( 1, attr.size() );
-}
-
-
-/**
- * Create a person entry, replace an attribute not present in the ObjectClasses
- */
-@Test
-public void testReplaceAttributeNotInOC() throws Exception
-{
-    DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
-    String rdn = "cn=Kate Bush";
-
-    // Replace ou
-    String newValue = "Test";
-    Attributes attrs = new BasicAttributes( "ou", newValue, false );
-
-    try
-    {
+            { item } );
+    
+        SearchControls sctls = new SearchControls();
+        sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+        String filter = "(sn=Bush)";
+        String base = "";
+    
+        NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
+    
+        while ( enm.hasMore() )
+        {
+            SearchResult sr = enm.next();
+            Attribute cn = sr.getAttributes().get( "cn" );
+            assertNotNull( cn );
+            assertTrue( cn.contains( "Kate Bush" ) );
+            Attribute desc = sr.getAttributes().get( "description" );
+            assertNotNull( desc );
+            assertTrue( desc.contains( "added description" ) );
+            assertEquals( 1, desc.size() );
+        }
+    }
+    
+    
+    /**
+     * Create a person entry and try to remove a non existing attribute
+     */
+    @Test
+    public void testReplaceNonExistingAttribute() throws Exception
+    {
+        DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
+    
+        String rdn = "cn=Kate Bush";
+    
+        Attribute attr = new BasicAttribute( "numberOfOctaves" );
+        ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
+    
+        try
+        {
+            sysRoot.modifyAttributes( rdn, new ModificationItem[]
+                { item } );
+            fail();
+        }
+        catch ( InvalidAttributeIdentifierException iaie )
+        {
+            assertTrue( true );
+        }
+    
+        SearchControls sctls = new SearchControls();
+        sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+        String filter = "(sn=Bush)";
+        String base = "";
+    
+        NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
+    
+        while ( enm.hasMore() )
+        {
+            SearchResult sr = enm.next();
+            Attribute cn = sr.getAttributes().get( "cn" );
+            assertNotNull( cn );
+            assertTrue( cn.contains( "Kate Bush" ) );
+        }
+    }
+    
+    
+    /**
+     * Create a person entry and try to remove a non existing attribute
+     */
+    @Test
+    public void testReplaceNonExistingAttributeManyMods() throws Exception
+    {
+        DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
+    
+        String rdn = "cn=Kate Bush";
+    
+        Attribute attr = new BasicAttribute( "numberOfOctaves" );
+        ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
+        Attribute attr2 = new BasicAttribute( "description", "blah blah blah" );
+        ModificationItem item2 = new ModificationItem( DirContext.ADD_ATTRIBUTE, attr2 );
+    
+        try
+        {
+            sysRoot.modifyAttributes( rdn, new ModificationItem[]
+                { item, item2 } );
+            fail();
+        }
+        catch ( InvalidAttributeIdentifierException iaie )
+        {
+            assertTrue( true );
+        }
+    
+        SearchControls sctls = new SearchControls();
+        sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+        String filter = "(sn=Bush)";
+        String base = "";
+    
+        NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
+        while ( enm.hasMore() )
+        {
+            SearchResult sr = enm.next();
+            Attribute cn = sr.getAttributes().get( "cn" );
+            assertNotNull( cn );
+            assertTrue( cn.contains( "Kate Bush" ) );
+        }
+    }
+    
+    
+    /**
+     * Create a person entry and try to replace a non existing indexed attribute
+     */
+    @Test
+    public void testReplaceNonExistingIndexedAttribute() throws Exception
+    {
+        DirContext sysRoot = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
+    
+        String rdn = "cn=Kim Wilde";
+    
+        Attribute attr = new BasicAttribute( "ou", "test" );
+        ModificationItem item = new ModificationItem( DirContext.REPLACE_ATTRIBUTE, attr );
+    
+        sysRoot.modifyAttributes( rdn, new ModificationItem[]
+            { item } );
+    
+        SearchControls sctls = new SearchControls();
+        sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+        String filter = "(sn=Wilde)";
+        String base = "";
+    
+        NamingEnumeration<SearchResult> enm = sysRoot.search( base, filter, sctls );
+    
+        while ( enm.hasMore() )
+        {
+            SearchResult sr = enm.next();
+            Attribute ou = sr.getAttributes().get( "ou" );
+            assertNotNull( ou );
+            assertTrue( ou.contains( "test" ) );
+        }
+    }
+    
+    
+    /**
+     * Create a person entry, replace telephoneNumber, verify the
+     * case of the attribute description attribute.
+     */
+    @Test
+    public void testReplaceCaseOfAttributeDescription() throws Exception
+    {
+        DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
+        String rdn = "cn=Kate Bush";
+    
+        // Replace telephoneNumber
+        String newValue = "2345678901";
+        Attributes attrs = new BasicAttributes( "telephoneNumber", newValue, false );
         ctx.modifyAttributes( rdn, DirContext.REPLACE_ATTRIBUTE, attrs );
-        fail( "Should get a SchemaViolationException" );
-    }
-    catch ( SchemaViolationException sve )
-    {
-        assertTrue( true );
+    
+        // Verify, that
+        // - case of attribute description is correct
+        // - attribute value is added
+        attrs = ctx.getAttributes( rdn );
+        Attribute attr = attrs.get( "telephoneNumber" );
+        assertNotNull( attr );
+        assertEquals( "telephoneNumber", attr.getID() );
+        assertTrue( attr.contains( newValue ) );
+        assertEquals( 1, attr.size() );
+    }
+    
+    
+    /**
+     * Create a person entry, replace an attribute not present in the ObjectClasses
+     */
+    @Test
+    public void testReplaceAttributeNotInOC() throws Exception
+    {
+        DirContext ctx = ( DirContext ) getWiredContext( getLdapServer() ).lookup( BASE );
+        String rdn = "cn=Kate Bush";
+    
+        // Replace ou
+        String newValue = "Test";
+        Attributes attrs = new BasicAttributes( "ou", newValue, false );
+    
+        try
+        {
+            ctx.modifyAttributes( rdn, DirContext.REPLACE_ATTRIBUTE, attrs );
+            fail( "Should get a SchemaViolationException" );
+        }
+        catch ( SchemaViolationException sve )
+        {
+            assertTrue( true );
+        }
     }
 }
-}

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyDnReferralIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyDnReferralIT.java?rev=1334639&r1=1334638&r2=1334639&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyDnReferralIT.java (original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyDnReferralIT.java Sun May  6 14:25:18 2012
@@ -30,6 +30,7 @@ import static org.junit.Assert.fail;
 import javax.naming.ReferralException;
 import javax.naming.ldap.LdapContext;
 
+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,6 +48,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.message.controls.ManageDsaITImpl;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.ldap.model.name.Rdn;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.slf4j.Logger;
@@ -104,204 +106,206 @@ import org.slf4j.LoggerFactory;
 })
 public class ModifyDnReferralIT extends AbstractLdapTestUnit
 {
-private static final Logger LOG = LoggerFactory.getLogger( ModifyDnReferralIT.class );
-
-
-/**
- * Tests ModifyDN operation on referral entry with the ManageDsaIT control.
- */
-@Test
-public void testOnReferralWithManageDsaITControl() throws Exception
-{
-    LdapConnection conn = getWiredConnection( getLdapServer() );
-
-    ManageDsaIT manageDSAIT = new ManageDsaITImpl();
-    manageDSAIT.setCritical( true );
-
-    // ModifyDN success
-    ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
-    modifyDnRequest.setName( new Dn( "uid=akarasuluref,ou=users,ou=system" ) );
-    modifyDnRequest.setNewRdn( new Rdn( "uid=ref" ) );
-    modifyDnRequest.setDeleteOldRdn( true );
-    modifyDnRequest.addControl( manageDSAIT );
-
-    conn.modifyDn( modifyDnRequest );
-    Entry entry = conn.lookup( "uid=ref,ou=users,ou=system", new Control[]
-        { manageDSAIT } );
-    assertNotNull( entry );
-    assertEquals( "uid=ref,ou=users,ou=system", entry.getDn().getName() );
-
-    conn.close();
-}
-
-
-/**
- * Tests ModifyDN operation with newSuperior on referral entry with the 
- * ManageDsaIT control.
- */
-@Test
-public void testNewSuperiorOnReferralWithManageDsaITControl() throws Exception
-{
-    LdapConnection conn = getWiredConnection( getLdapServer() );
-
-    ManageDsaIT manageDSAIT = new ManageDsaITImpl();
-    manageDSAIT.setCritical( true );
-
-    ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
-    modifyDnRequest.setName( new Dn( "uid=elecharny,ou=users,ou=system" ) );
-    modifyDnRequest.setNewRdn( new Rdn( "uid=newuser" ) );
-    modifyDnRequest.setNewSuperior( new Dn( "uid=akarasuluref,ou=users,ou=system" ) );
-    modifyDnRequest.setDeleteOldRdn( true );
-    modifyDnRequest.addControl( manageDSAIT );
-
-    // ModifyDN success
-    try
+    @Rule
+    public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE );
+    private static final Logger LOG = LoggerFactory.getLogger( ModifyDnReferralIT.class );
+    
+    
+    /**
+     * Tests ModifyDN operation on referral entry with the ManageDsaIT control.
+     */
+    @Test
+    public void testOnReferralWithManageDsaITControl() throws Exception
     {
+        LdapConnection conn = getWiredConnection( getLdapServer() );
+    
+        ManageDsaIT manageDSAIT = new ManageDsaITImpl();
+        manageDSAIT.setCritical( true );
+    
+        // ModifyDN success
+        ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
+        modifyDnRequest.setName( new Dn( "uid=akarasuluref,ou=users,ou=system" ) );
+        modifyDnRequest.setNewRdn( new Rdn( "uid=ref" ) );
+        modifyDnRequest.setDeleteOldRdn( true );
+        modifyDnRequest.addControl( manageDSAIT );
+    
         conn.modifyDn( modifyDnRequest );
+        Entry entry = conn.lookup( "uid=ref,ou=users,ou=system", new Control[]
+            { manageDSAIT } );
+        assertNotNull( entry );
+        assertEquals( "uid=ref,ou=users,ou=system", entry.getDn().getName() );
+    
+        conn.close();
     }
-    catch ( LdapOperationException le )
-    {
-        assertEquals( ResultCodeEnum.AFFECTS_MULTIPLE_DSAS, le.getResultCode() );
-    }
-
-    conn.close();
-}
-
-
-/**
- * Tests ModifyDN operation on normal and referral entries without the 
- * ManageDsaIT control. Referrals are sent back to the client with a
- * non-success result code.
- */
-@Test
-public void testOnReferral() throws Exception
-{
-    LdapConnection conn = getWiredConnection( getLdapServer() );
-
-    // referrals failure
-    ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
-    modifyDnRequest.setName( new Dn( "uid=akarasuluref,ou=users,ou=system" ) );
-    modifyDnRequest.setNewRdn( new Rdn( "uid=ref" ) );
-    modifyDnRequest.setDeleteOldRdn( true );
-
-    ModifyDnResponse modifyDnResponse = conn.modifyDn( modifyDnRequest );
-
-    assertEquals( ResultCodeEnum.REFERRAL, modifyDnResponse.getLdapResult().getResultCode() );
-
-    assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
-        .contains( "ldap://localhost:10389/uid=akarasulu,ou=users,ou=system" ) );
-    assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
-        .contains( "ldap://foo:10389/uid=akarasulu,ou=users,ou=system" ) );
-    assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
-        .contains( "ldap://bar:10389/uid=akarasulu,ou=users,ou=system" ) );
-
-    conn.close();
-}
-
-
-/**
- * Tests ModifyDN operation on normal and referral entries without the 
- * ManageDsaIT control. Referrals are sent back to the client with a
- * non-success result code.
- */
-@Test
-public void testNewSuperiorOnReferral() throws Exception
-{
-    LdapConnection conn = getWiredConnection( getLdapServer() );
-
-    // referrals failure
-    try
+    
+    
+    /**
+     * Tests ModifyDN operation with newSuperior on referral entry with the
+     * ManageDsaIT control.
+     */
+    @Test
+    public void testNewSuperiorOnReferralWithManageDsaITControl() throws Exception
     {
-        conn.moveAndRename( "uid=elecharny,ou=users,ou=system", "uid=ref,uid=akarasuluref,ou=users,ou=system", true );
+        LdapConnection conn = getWiredConnection( getLdapServer() );
+    
+        ManageDsaIT manageDSAIT = new ManageDsaITImpl();
+        manageDSAIT.setCritical( true );
+    
+        ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
+        modifyDnRequest.setName( new Dn( "uid=elecharny,ou=users,ou=system" ) );
+        modifyDnRequest.setNewRdn( new Rdn( "uid=newuser" ) );
+        modifyDnRequest.setNewSuperior( new Dn( "uid=akarasuluref,ou=users,ou=system" ) );
+        modifyDnRequest.setDeleteOldRdn( true );
+        modifyDnRequest.addControl( manageDSAIT );
+    
+        // ModifyDN success
+        try
+        {
+            conn.modifyDn( modifyDnRequest );
+        }
+        catch ( LdapOperationException le )
+        {
+            assertEquals( ResultCodeEnum.AFFECTS_MULTIPLE_DSAS, le.getResultCode() );
+        }
+    
+        conn.close();
     }
-    catch ( LdapOperationException e )
+    
+    
+    /**
+     * Tests ModifyDN operation on normal and referral entries without the
+     * ManageDsaIT control. Referrals are sent back to the client with a
+     * non-success result code.
+     */
+    @Test
+    public void testOnReferral() throws Exception
     {
-        assertEquals( ResultCodeEnum.AFFECTS_MULTIPLE_DSAS, e.getResultCode() );
+        LdapConnection conn = getWiredConnection( getLdapServer() );
+    
+        // referrals failure
+        ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
+        modifyDnRequest.setName( new Dn( "uid=akarasuluref,ou=users,ou=system" ) );
+        modifyDnRequest.setNewRdn( new Rdn( "uid=ref" ) );
+        modifyDnRequest.setDeleteOldRdn( true );
+    
+        ModifyDnResponse modifyDnResponse = conn.modifyDn( modifyDnRequest );
+    
+        assertEquals( ResultCodeEnum.REFERRAL, modifyDnResponse.getLdapResult().getResultCode() );
+    
+        assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
+            .contains( "ldap://localhost:10389/uid=akarasulu,ou=users,ou=system" ) );
+        assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
+            .contains( "ldap://foo:10389/uid=akarasulu,ou=users,ou=system" ) );
+        assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
+            .contains( "ldap://bar:10389/uid=akarasulu,ou=users,ou=system" ) );
+    
+        conn.close();
     }
-
-    conn.close();
-}
-
-
-/**
- * Tests ModifyDN operation on normal and referral entries without the 
- * ManageDsaIT control using JNDI instead of the Netscape API. Referrals 
- * are sent back to the client with a non-success result code.
- */
-@Test
-public void testThrowOnReferralWithJndi() throws Exception
-{
-    LdapContext ctx = getWiredContextThrowOnRefferal( getLdapServer() );
-
-    // ModifyDN referrals failure
-    try
+    
+    
+    /**
+     * Tests ModifyDN operation on normal and referral entries without the
+     * ManageDsaIT control. Referrals are sent back to the client with a
+     * non-success result code.
+     */
+    @Test
+    public void testNewSuperiorOnReferral() throws Exception
     {
-        ctx.rename( "uid=akarasuluref,ou=users,ou=system", "uid=ref,ou=users,ou=system" );
-        fail( "Should never get here due to ModifyDN failure on ReferralException" );
+        LdapConnection conn = getWiredConnection( getLdapServer() );
+    
+        // referrals failure
+        try
+        {
+            conn.moveAndRename( "uid=elecharny,ou=users,ou=system", "uid=ref,uid=akarasuluref,ou=users,ou=system", true );
+        }
+        catch ( LdapOperationException e )
+        {
+            assertEquals( ResultCodeEnum.AFFECTS_MULTIPLE_DSAS, e.getResultCode() );
+        }
+    
+        conn.close();
     }
-    catch ( ReferralException e )
+    
+    
+    /**
+     * Tests ModifyDN operation on normal and referral entries without the
+     * ManageDsaIT control using JNDI instead of the Netscape API. Referrals
+     * are sent back to the client with a non-success result code.
+     */
+    @Test
+    public void testThrowOnReferralWithJndi() throws Exception
     {
-        // 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() );
+        LdapContext ctx = getWiredContextThrowOnRefferal( getLdapServer() );
+    
+        // ModifyDN referrals failure
+        try
+        {
+            ctx.rename( "uid=akarasuluref,ou=users,ou=system", "uid=ref,ou=users,ou=system" );
+            fail( "Should never get here due to ModifyDN failure on ReferralException" );
+        }
+        catch ( ReferralException e )
+        {
+            // 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();
     }
-
-    ctx.close();
-}
-
-
-/**
- * Tests referral handling when an ancestor is a referral.
- */
-@Test
-public void testAncestorReferral() throws Exception
-{
-    LOG.debug( "" );
-
-    LdapConnection conn = getWiredConnection( getLdapServer() );
-
-    // referrals failure
-    ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
-    modifyDnRequest.setName( new Dn( "ou=Computers,uid=akarasuluref,ou=users,ou=system" ) );
-    modifyDnRequest.setNewRdn( new Rdn( "ou=Machines" ) );
-    modifyDnRequest.setDeleteOldRdn( true );
-
-    ModifyDnResponse modifyDnResponse = conn.modifyDn( modifyDnRequest );
-
-    assertEquals( ResultCodeEnum.REFERRAL, modifyDnResponse.getLdapResult().getResultCode() );
-
-    assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
-        .contains( "ldap://localhost:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) );
-    assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
-        .contains( "ldap://foo:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) );
-    assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
-        .contains( "ldap://bar:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) );
-
-    conn.close();
-}
-
-
-/**
- * Tests referral handling when an ancestor is a referral.
- */
-@Test
-public void testNewSuperiorAncestorReferral() throws Exception
-{
-    LOG.debug( "" );
-
-    LdapConnection conn = getWiredConnection( getLdapServer() );
-
-    // referrals failure
-    try
+    
+    
+    /**
+     * Tests referral handling when an ancestor is a referral.
+     */
+    @Test
+    public void testAncestorReferral() throws Exception
     {
-        conn.moveAndRename( "uid=elecharny,ou=users,ou=system",
-            "ou=Machines,ou=Computers,uid=akarasuluref,ou=users,ou=system", true );
-        fail( "Should never get here to affectsMultipleDSA error result code" );
+        LOG.debug( "" );
+    
+        LdapConnection conn = getWiredConnection( getLdapServer() );
+    
+        // referrals failure
+        ModifyDnRequest modifyDnRequest = new ModifyDnRequestImpl();
+        modifyDnRequest.setName( new Dn( "ou=Computers,uid=akarasuluref,ou=users,ou=system" ) );
+        modifyDnRequest.setNewRdn( new Rdn( "ou=Machines" ) );
+        modifyDnRequest.setDeleteOldRdn( true );
+    
+        ModifyDnResponse modifyDnResponse = conn.modifyDn( modifyDnRequest );
+    
+        assertEquals( ResultCodeEnum.REFERRAL, modifyDnResponse.getLdapResult().getResultCode() );
+    
+        assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
+            .contains( "ldap://localhost:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) );
+        assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
+            .contains( "ldap://foo:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) );
+        assertTrue( modifyDnResponse.getLdapResult().getReferral().getLdapUrls()
+            .contains( "ldap://bar:10389/ou=Computers,uid=akarasulu,ou=users,ou=system" ) );
+    
+        conn.close();
     }
-    catch ( LdapOperationException e )
+    
+    
+    /**
+     * Tests referral handling when an ancestor is a referral.
+     */
+    @Test
+    public void testNewSuperiorAncestorReferral() throws Exception
     {
-        assertEquals( ResultCodeEnum.AFFECTS_MULTIPLE_DSAS, e.getResultCode() );
+        LOG.debug( "" );
+    
+        LdapConnection conn = getWiredConnection( getLdapServer() );
+    
+        // referrals failure
+        try
+        {
+            conn.moveAndRename( "uid=elecharny,ou=users,ou=system",
+                "ou=Machines,ou=Computers,uid=akarasuluref,ou=users,ou=system", true );
+            fail( "Should never get here to affectsMultipleDSA error result code" );
+        }
+        catch ( LdapOperationException e )
+        {
+            assertEquals( ResultCodeEnum.AFFECTS_MULTIPLE_DSAS, e.getResultCode() );
+        }
+    
+        conn.close();
     }
-
-    conn.close();
-}
 }

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java?rev=1334639&r1=1334638&r2=1334639&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java (original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java Sun May  6 14:25:18 2012
@@ -38,6 +38,7 @@ 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.ldap.client.api.LdapConnection;
 import org.apache.directory.server.annotations.CreateLdapServer;
 import org.apache.directory.server.annotations.CreateTransport;
@@ -49,6 +50,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.ldif.LdifUtils;
 import org.junit.Ignore;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -68,6 +70,8 @@ import org.junit.runner.RunWith;
     })
 public class ModifyRdnIT extends AbstractLdapTestUnit
 {
+    @Rule
+    public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE );
     private static final String BASE = "ou=system";
 
 

Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/MoveIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/MoveIT.java?rev=1334639&r1=1334638&r2=1334639&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/MoveIT.java (original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/MoveIT.java Sun May  6 14:25:18 2012
@@ -6,16 +6,16 @@
  *  to you under the Apache License, Version 2.0 (the
  *  "License"); you may not use this file except in compliance
  *  with the License.  You may obtain a copy of the License at
- *  
+ * 
  *    http://www.apache.org/licenses/LICENSE-2.0
- *  
+ * 
  *  Unless required by applicable law or agreed to in writing,
  *  software distributed under the License is distributed on an
  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
- *  under the License. 
- *  
+ *  under the License.
+ * 
  */
 package org.apache.directory.server.operations.modifydn;
 
@@ -32,6 +32,7 @@ import javax.naming.directory.SearchCont
 import javax.naming.directory.SearchResult;
 import javax.naming.ldap.LdapContext;
 
+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;
@@ -39,6 +40,7 @@ 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.shared.ldap.model.exception.LdapUnwillingToPerformException;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -81,6 +83,8 @@ import org.junit.runner.RunWith;
         "ou: child" })
 public class MoveIT extends AbstractLdapTestUnit
 {
+    @Rule
+    public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( MultiThreadedMultiInvoker.NOT_THREADSAFE );
     private static final String DN = "uid=akarasulu,ou=users,ou=system";
     private static final String NEW_DN = "uid=akarasulu,ou=NewSuperior,ou=system";
     private static final String NEW_DN2 = "uid=elecharny,ou=NewSuperior,ou=system";
@@ -134,7 +138,7 @@ public class MoveIT extends AbstractLdap
 
         LdapConnection con = getAdminConnection( getLdapServer() );
 
-        //now do something bad: make the parent a child of its own child 
+        //now do something bad: make the parent a child of its own child
         try
         {
             con.move( "ou=parent,ou=system", "ou=child,ou=parent,ou=system" );