Merged trunk into the codec branch

git-svn-id: https://svn.apache.org/repos/asf/directory/shared/branches/shared-codec-merge@987483 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java
index 768c36f..ed2c76b 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerAddTest.java
@@ -92,6 +92,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerAddTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -106,7 +109,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java
index 2b2e52b..9896264 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerDelTest.java
@@ -83,6 +83,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerDelTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -97,7 +100,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
index 36951f0..a492970 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerEnableDisableLoadTest.java
@@ -90,6 +90,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerEnableDisableLoadTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -112,7 +115,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
index 74991ae..b36f1d8 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadTest.java
@@ -31,9 +31,8 @@
 import java.io.IOException;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.directory.junit.tools.Concurrent;
-import org.apache.directory.junit.tools.ConcurrentJunitRunner;
 import org.apache.directory.shared.ldap.exception.LdapUnwillingToPerformException;
+import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.schema.SchemaManager;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.SchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schema.ldif.extractor.impl.DefaultSchemaLdifExtractor;
@@ -42,8 +41,8 @@
 import org.apache.directory.shared.ldap.schema.registries.Schema;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 
 
 /**
@@ -167,8 +166,8 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrent()
+//@RunWith(ConcurrentJunitRunner.class)
+//@Concurrent()
 public class SchemaManagerLoadTest
 {
     // A directory in which the ldif files will be stored
@@ -176,7 +175,7 @@
 
     // The schema repository
     private static File schemaRepository;
-
+    
 
     @BeforeClass
     public static void setup() throws Exception
@@ -190,6 +189,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerLoadTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -204,7 +206,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
@@ -524,7 +526,11 @@
         assertTrue( schemaManager.load( "system" ) );
         assertTrue( schemaManager.load( "core" ) );
         assertTrue( schemaManager.load( "cosine" ) );
-        assertTrue( schemaManager.load( "nis" ) );
+        assertFalse( schemaManager.load( "nis" ) );
+        
+        AttributeType at = schemaManager.getAttributeType( "uidNumber" );
+        // if nis schema was loaded then the at will not be null
+        assertNull( at );
 
         assertTrue( schemaManager.getErrors().isEmpty() );
         assertEquals( 133, schemaManager.getAttributeTypeRegistry().size() );
@@ -676,6 +682,7 @@
 
         assertEquals( 1, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNotNull( schemaManager.getRegistries().getLoadedSchema( "system" ) );
+        assertNull( schemaManager.getRegistries().getLoadedSchema( "nis" ) );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "core" ) );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "cosine" ) );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "InetOrgPerson" ) );
@@ -777,4 +784,21 @@
         assertEquals( 0, schemaManager.getRegistries().getLoadedSchemas().size() );
         assertNull( schemaManager.getRegistries().getLoadedSchema( "dummy" ) );
     }
+    
+
+    @Ignore( "loadDisabled() method need to be fixed" )
+    @Test
+    public void testLoadDisabled() throws Exception
+    {
+        LdifSchemaLoader loader = new LdifSchemaLoader( schemaRepository );
+        SchemaManager schemaManager = new DefaultSchemaManager( loader );
+
+        assertTrue( schemaManager.loadDisabled( "nis" ) );
+
+        assertFalse( schemaManager.getErrors().isEmpty() );
+        
+        AttributeType at = schemaManager.getAttributeType( "uidNumber" );
+        // if nis schema was loaded then the at will not be null
+        assertNotNull( at );
+    }
 }
diff --git a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
index 8c15294..172e6a3 100644
--- a/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
+++ b/ldap-schema-manager-tests/src/test/java/org/apache/directory/shared/ldap/schema/loader/ldif/SchemaManagerLoadWithDepsTest.java
@@ -81,6 +81,9 @@
             workingDirectory = path.substring( 0, targetPos + 6 );
         }
 
+        // Make sure every test class has its own schema directory
+        workingDirectory = new File( workingDirectory, "SchemaManagerLoadWithDepsTest" ).getAbsolutePath();
+
         schemaRepository = new File( workingDirectory, "schema" );
 
         // Cleanup the target directory
@@ -95,7 +98,7 @@
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteDirectory( schemaRepository.getParentFile() );
     }
 
 
diff --git a/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java b/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java
index 6d73ffe..7ad0a34 100644
--- a/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java
+++ b/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java
@@ -543,7 +543,10 @@
         // Load the schemas
         for ( Schema schema : schemas )
         {
-            if ( !load( clonedRegistries, schema ) && ( !errors.isEmpty() ) )
+            boolean singleSchemaLoaded = load( clonedRegistries, schema );
+
+            // return false if the schema was not loaded in the first place
+            if ( !singleSchemaLoaded )
             {
                 return false;
             }
@@ -1043,24 +1046,16 @@
             if ( errors.isEmpty() )
             {
                 // We are golden : let's apply the schema in the real registries
-                registries.setRelaxed();
-
-                // Load the schemas
-                for ( Schema schema : schemas )
-                {
-                    loadDepsFirst( registries, schema );
-                }
-
-                // Build the cross references
-                errors = registries.buildReferences();
+                registries = clonedRegistries;
                 registries.setStrict();
-
                 loaded = true;
             }
         }
-
-        // clear the cloned registries
-        clonedRegistries.clear();
+        else
+        {
+            // clear the cloned registries
+            clonedRegistries.clear();
+        }
 
         return loaded;
     }
diff --git a/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif b/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif
index 15ac46c..108f4a8 100644
--- a/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif
+++ b/ldap-schema/src/main/resources/schema/ou=schema/cn=adsconfig/ou=objectclasses/m-oid=1.3.6.1.4.1.18060.0.4.1.3.260.ldif
@@ -2,7 +2,7 @@
 dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.260, ou=objectClasses, cn=adsconfig, ou=sche
  ma
 createtimestamp: 20100111145218Z
-m-must: ads-serverDS
+m-may: ads-serverDS
 m-oid: 1.3.6.1.4.1.18060.0.4.1.3.260
 entrycsn: 20100111202218.087000Z#000000#000#000000
 m-supobjectclass: ads-server