You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2010/04/07 20:09:00 UTC

svn commit: r931632 - in /directory/apacheds/trunk: core-constants/src/main/java/org/apache/directory/server/constants/ jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ jdbm-store/src/test/java/org/apache/directory/s...

Author: kayyagari
Date: Wed Apr  7 18:09:00 2010
New Revision: 931632

URL: http://svn.apache.org/viewvc?rev=931632&view=rev
Log:
changes made as part of implementing DIRSERVER-1492
 o removed normalized and userprovided DN indices
 o added a new index for RDNs
 o added a new comparator for internally comparing RDNs
 o updated the methods performing modify and modDn operations to use the new RDN index
 o updated the test cases 

Added:
    directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/InternalRdnComparator.java
    directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java
    directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndexTest.java
Modified:
    directory/apacheds/trunk/core-constants/src/main/java/org/apache/directory/server/constants/ApacheSchemaConstants.java
    directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
    directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
    directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
    directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ServerEntrySerializerTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NestedFilterTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NotCursorTest.java
    directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/PresenceTest.java

Modified: directory/apacheds/trunk/core-constants/src/main/java/org/apache/directory/server/constants/ApacheSchemaConstants.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-constants/src/main/java/org/apache/directory/server/constants/ApacheSchemaConstants.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/core-constants/src/main/java/org/apache/directory/server/constants/ApacheSchemaConstants.java (original)
+++ directory/apacheds/trunk/core-constants/src/main/java/org/apache/directory/server/constants/ApacheSchemaConstants.java Wed Apr  7 18:09:00 2010
@@ -150,4 +150,8 @@ public interface ApacheSchemaConstants
     // apacheSubLevel
     String APACHE_SUB_LEVEL_AT                      = "apacheSubLevel";
     String APACHE_SUB_LEVEL_AT_OID                  = "1.3.6.1.4.1.18060.0.4.1.2.43";
+
+    // apacheRdn
+    String APACHE_RDN_AT                      = "apacheRdn";
+    String APACHE_RDN_AT_OID                  = "1.3.6.1.4.1.18060.0.4.1.2.50";
 }

Added: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/InternalRdnComparator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/InternalRdnComparator.java?rev=931632&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/InternalRdnComparator.java (added)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/InternalRdnComparator.java Wed Apr  7 18:09:00 2010
@@ -0,0 +1,72 @@
+/*
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *   or more contributor license agreements.  See the NOTICE file
+ *   distributed with this work for additional information
+ *   regarding copyright ownership.  The ASF licenses this file
+ *   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.
+ *
+ */
+
+package org.apache.directory.server.core.partition.impl.btree.jdbm;
+
+
+import org.apache.directory.shared.ldap.name.RDN;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
+import org.apache.directory.shared.ldap.schema.comparators.SerializableComparator;
+
+
+/**
+ * A comparator used internally by the JdbmRdnIndex class
+ * 
+ * Note: this is a special purpose comparator which compares based on the parent IDs of
+ *       the RDNs. Generic usage of this comparator is not encouraged
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class InternalRdnComparator extends SerializableComparator<RDN>
+{
+
+    private static final long serialVersionUID = 5414960421568991202L;
+
+
+    public InternalRdnComparator( String matchingRuleOid )
+    {
+        super( matchingRuleOid );
+    }
+
+
+    @Override
+    public int compare( RDN rdn1, RDN rdn2 )
+    {
+        int val = rdn1.compareTo( rdn2 );
+        if ( val == 0 )
+        {
+            if ( ( rdn1._getParentId() != -1 ) && ( rdn2._getParentId() != -1 ) )
+            {
+                val = ( int ) ( rdn1._getParentId() - rdn2._getParentId() );
+            }
+        }
+
+        return val;
+    }
+
+
+    @Override
+    public void setSchemaManager( SchemaManager schemaManager )
+    {
+        // no need to deal with the schema manager
+    }
+
+}
\ No newline at end of file

Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java Wed Apr  7 18:09:00 2010
@@ -72,7 +72,7 @@ public class JdbmIndex<K, O> implements 
     public static final String REVERSE_BTREE = "_reverse";
 
     /** the attribute type resolved for this JdbmIndex */
-    private AttributeType attribute;
+    protected AttributeType attribute;
 
     /**
      * the forward btree where the btree key is the value of the indexed attribute and
@@ -112,7 +112,7 @@ public class JdbmIndex<K, O> implements 
      * the attribute identifier set at configuration time for this index which may not
      * be the OID but an alias name for the attributeType associated with this Index
      */
-    private String attributeId;
+    protected String attributeId;
 
     /** whether or not this index has been initialized */
     protected boolean initialized;

Added: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java?rev=931632&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java (added)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndex.java Wed Apr  7 18:09:00 2010
@@ -0,0 +1,164 @@
+/*
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *   or more contributor license agreements.  See the NOTICE file
+ *   distributed with this work for additional information
+ *   regarding copyright ownership.  The ASF licenses this file
+ *   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.
+ *
+ */
+
+package org.apache.directory.server.core.partition.impl.btree.jdbm;
+
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.naming.NamingException;
+
+import jdbm.helper.MRU;
+import jdbm.recman.BaseRecordManager;
+import jdbm.recman.CacheRecordManager;
+
+import org.apache.directory.server.core.partition.impl.btree.LongComparator;
+import org.apache.directory.server.i18n.I18n;
+import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.MatchingRule;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
+import org.apache.directory.shared.ldap.schema.comparators.SerializableComparator;
+import org.apache.directory.shared.ldap.util.SynchronizedLRUMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * A special index which stores RDN objects.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class JdbmRdnIndex<K, O> extends JdbmIndex<K, O>
+{
+
+    /** A logger for this class */
+    private static final Logger LOG = LoggerFactory.getLogger( JdbmRdnIndex.class.getSimpleName() );
+
+
+    public JdbmRdnIndex()
+    {
+        initialized = false;
+    }
+
+
+    public JdbmRdnIndex( String attributeId )
+    {
+        initialized = false;
+        setAttributeId( attributeId );
+    }
+
+
+    public void init( SchemaManager schemaManager, AttributeType attributeType, File wkDirPath ) throws IOException
+    {
+        LOG.debug( "Initializing an Index for attribute '{}'", attributeType.getName() );
+        keyCache = new SynchronizedLRUMap( cacheSize );
+        attribute = attributeType;
+
+        if ( attributeId == null )
+        {
+            setAttributeId( attribute.getName() );
+        }
+
+        if ( this.wkDirPath == null )
+        {
+            this.wkDirPath = wkDirPath;
+        }
+
+        File file = new File( this.wkDirPath.getPath() + File.separator + attribute.getName() );
+        String path = file.getAbsolutePath();
+        BaseRecordManager base = new BaseRecordManager( path );
+        base.disableTransactions();
+        this.recMan = new CacheRecordManager( base, new MRU( cacheSize ) );
+
+        try
+        {
+            initTables( schemaManager );
+        }
+        catch ( IOException e )
+        {
+            // clean up
+            close();
+            throw e;
+        }
+
+        initialized = true;
+    }
+
+
+    /**
+     * Initializes the forward and reverse tables used by this Index.
+     * 
+     * @throws IOException if we cannot initialize the forward and reverse
+     * tables
+     * @throws NamingException 
+     */
+    private void initTables( SchemaManager schemaManager ) throws IOException
+    {
+        MatchingRule mr = attribute.getEquality();
+
+        if ( mr == null )
+        {
+            throw new IOException( I18n.err( I18n.ERR_574, attribute.getName() ) );
+        }
+
+        SerializableComparator comp = new InternalRdnComparator( mr.getOid() );
+
+        LongComparator.INSTANCE.setSchemaManager( schemaManager );
+
+        forward = new JdbmTable<K, Long>( schemaManager, attribute.getName() + FORWARD_BTREE, recMan, comp, null,
+            LongSerializer.INSTANCE );
+        reverse = new JdbmTable<Long, K>( schemaManager, attribute.getName() + REVERSE_BTREE, recMan,
+            LongComparator.INSTANCE, LongSerializer.INSTANCE, null );
+    }
+
+
+    public void add( K rdn, Long entryId ) throws Exception
+    {
+        forward.put( rdn, entryId );
+        reverse.put( entryId, rdn );
+    }
+
+
+    public void drop( Long entryId ) throws Exception
+    {
+        K rdn = reverse.get( entryId );
+        forward.remove( rdn );
+        reverse.remove( entryId );
+    }
+
+
+    public void drop( K rdn, Long id ) throws Exception
+    {
+        long val = forward.get( rdn );
+        if ( val == id )
+        {
+            forward.remove( rdn );
+            reverse.remove( val );
+        }
+    }
+
+
+    public K getNormalized( K rdn ) throws Exception
+    {
+        return rdn;
+    }
+}

Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java Wed Apr  7 18:09:00 2010
@@ -102,12 +102,9 @@ public class JdbmStore<E> implements Sto
     /** true if we sync disks on every write operation */
     private boolean isSyncOnWrite = true;
 
-    /** the normalized distinguished name index */
-    private JdbmIndex<String, E> ndnIdx;
-
-    /** the user provided distinguished name index */
-    private JdbmIndex<String, E> updnIdx;
-
+    /** the relative distinguished name index */
+    private JdbmRdnIndex<RDN, Long> rdnIdx;
+    
     /** the attribute presence index */
     private JdbmIndex<String, E> presenceIdx;
 
@@ -317,24 +314,15 @@ public class JdbmStore<E> implements Sto
             systemIndices = tmp;
         }
 
-        if ( ndnIdx == null )
+        if ( rdnIdx == null )
         {
-            ndnIdx = new JdbmIndex<String, E>();
-            ndnIdx.setAttributeId( ApacheSchemaConstants.APACHE_N_DN_AT_OID );
-            systemIndices.put( ApacheSchemaConstants.APACHE_N_DN_AT_OID, ndnIdx );
-            ndnIdx.init( schemaManager, schemaManager
-                .lookupAttributeTypeRegistry( ApacheSchemaConstants.APACHE_N_DN_AT_OID ), workingDirectory );
-        }
-
-        if ( updnIdx == null )
-        {
-            updnIdx = new JdbmIndex<String, E>();
-            updnIdx.setAttributeId( ApacheSchemaConstants.APACHE_UP_DN_AT_OID );
-            systemIndices.put( ApacheSchemaConstants.APACHE_UP_DN_AT_OID, updnIdx );
-            updnIdx.init( schemaManager, schemaManager
-                .lookupAttributeTypeRegistry( ApacheSchemaConstants.APACHE_UP_DN_AT_OID ), workingDirectory );
+            rdnIdx = new JdbmRdnIndex<RDN, Long>();
+            rdnIdx.setAttributeId( ApacheSchemaConstants.APACHE_RDN_AT_OID );
+            systemIndices.put( ApacheSchemaConstants.APACHE_RDN_AT_OID, ( JdbmIndex ) rdnIdx );
+            rdnIdx.init( schemaManager, schemaManager
+                .lookupAttributeTypeRegistry( ApacheSchemaConstants.APACHE_RDN_AT_OID ), workingDirectory );
         }
-
+        
         if ( presenceIdx == null )
         {
             presenceIdx = new JdbmIndex<String, E>();
@@ -552,8 +540,6 @@ public class JdbmStore<E> implements Sto
 
         List<Index<?, E, Long>> array = new ArrayList<Index<?, E, Long>>();
         array.addAll( userIndices.values() );
-        array.add( ndnIdx );
-        array.add( updnIdx );
         array.add( aliasIdx );
         array.add( oneAliasIdx );
         array.add( subAliasIdx );
@@ -726,7 +712,9 @@ public class JdbmStore<E> implements Sto
      */
     public Index<String, E, Long> getUpdnIndex()
     {
-        return updnIdx;
+        // FIXME this method shouldn't be supported anymore after the
+        // introduction of the RDN index, but keeping to minimise the number changes done to interface
+        return entryUuidIdx;
     }
 
 
@@ -735,9 +723,6 @@ public class JdbmStore<E> implements Sto
      */
     public void setUpdnIndex( Index<String, E, Long> index ) throws LdapException
     {
-        protect( "updnIndex" );
-        updnIdx = convertIndex( index );
-        systemIndices.put( index.getAttributeId(), updnIdx );
     }
 
 
@@ -746,7 +731,8 @@ public class JdbmStore<E> implements Sto
      */
     public Index<String, E, Long> getNdnIndex()
     {
-        return ndnIdx;
+        // FIXME should this be entryUuidIdx?
+        return entryCsnIdx;
     }
 
 
@@ -755,9 +741,6 @@ public class JdbmStore<E> implements Sto
      */
     public void setNdnIndex( Index<String, E, Long> index ) throws LdapException
     {
-        protect( "ndnIndex" );
-        ndnIdx = convertIndex( index );
-        systemIndices.put( index.getAttributeId(), ndnIdx );
     }
 
 
@@ -941,19 +924,122 @@ public class JdbmStore<E> implements Sto
     }
 
 
+    /**
+     * @see #getEntryId(DN)
+     */
     public Long getEntryId( String dn ) throws Exception
     {
-        return ndnIdx.forwardLookup( dn );
+        return getEntryId( new DN( dn ) );
     }
 
 
+    /**
+     * gets the entry id of the given DN using RDN index
+     *
+     * @param dn the DN of the entry
+     * @return id of the entry represented by the given DN
+     * @throws Exception
+     */
+    public Long getEntryId( DN dn ) throws Exception
+    {
+        if( !dn.isNormalized() )
+        {
+            dn.normalize( schemaManager.getNormalizerMapping() );
+        }
+        
+        int dnSize = dn.size();
+        int i = normSuffix.size(); 
+
+        RDN key = new RDN( normSuffix.getNormName() );
+        key._setParentId( 0 );
+        
+        Long curEntryId = rdnIdx.forwardLookup( key );
+        
+        for( ; i < dnSize; i++ )
+        {
+            key = dn.getRdn( i );
+            key._setParentId( curEntryId );
+            curEntryId = rdnIdx.forwardLookup( key );
+            if( curEntryId == null )
+            {
+                break;
+            }
+        }
+        
+        return curEntryId;
+    }
+    
+    
+    /**
+     * gives the normalized name of the DN of the entry identified by the given id
+     * @param id the entry's id 
+     */
     public String getEntryDn( Long id ) throws Exception
     {
-        return ndnIdx.reverseLookup( id );
+        return buildEntryDn( id ).getNormName();
     }
 
+    
+    /**
+     * builds the DN of the entry identified by the given id
+     *
+     * @param id the entry's id
+     * @return the normalized DN of the entry
+     * @throws Exception
+     */
+    private DN buildEntryDn( Long id ) throws Exception
+    {
+        DN dn = new DN();
+        
+        // form the DN
+        RDN curRdn = rdnIdx.reverseLookup( id );
+
+        dn.addNormalizedInOrder( curRdn );
+        
+        while( curRdn._getParentId() != 0 )
+        {
+            curRdn = rdnIdx.reverseLookup( curRdn._getParentId() );
+            dn.addNormalizedInOrder( curRdn );
+        }
+
+        return dn;
+    }
 
     /**
+     * 
+     * contructs a normalized DN using the RDN index. This is useful
+     * to identify in cases like finding the parent entry's id
+     * (cause that will be stored in the RDN of the entry identified by the given DN in string form)
+     *
+     * @param dn the DN of the entry in string form
+     * @return DN object build after fetching all the RDNs from RDN index
+     * @throws Exception
+     */
+    private DN buildEntryDn( String dn ) throws Exception
+    {
+        DN normDN = new DN( dn );
+        normDN.normalize( schemaManager.getNormalizerMapping() );
+        
+        int dnSize = normDN.size();
+        int i = normSuffix.size(); 
+
+        RDN key = new RDN( normSuffix.getNormName() );
+        key._setParentId( 0 );
+
+        Long curEntryId = rdnIdx.forwardLookup( key );
+        
+        for( ; i < dnSize; i++ )
+        {
+            key = normDN.getRdn( i );
+            key._setParentId( curEntryId );
+            curEntryId = rdnIdx.forwardLookup( key );
+        }
+        
+        return normDN;
+    }
+    
+    
+    /**
      * Gets the Long id of an entry's parent using the child entry's
      * normalized DN. Note that the suffix entry returns 0, which does not
      * map to any entry.
@@ -965,27 +1051,41 @@ public class JdbmStore<E> implements Sto
      */
     public Long getParentId( String dn ) throws Exception
     {
-        Long childId = ndnIdx.forwardLookup( dn );
-        return oneLevelIdx.reverseLookup( childId );
+        DN normDN = new DN( dn );
+        normDN.normalize( schemaManager.getNormalizerMapping() );
+        
+        if( normSuffix.equals( normDN ) )
+        {
+            return 0L;
+        }
+        
+        normDN = buildEntryDn( dn );
+        return normDN.getRdn()._getParentId();
     }
 
 
     public Long getParentId( Long childId ) throws Exception
     {
-        return oneLevelIdx.reverseLookup( childId );
+        //return oneLevelIdx.reverseLookup( childId );
+        RDN rdn = rdnIdx.reverseLookup( childId );
+        if( rdn == null )
+        {
+            return null;
+        }
+        
+        return rdn._getParentId();
     }
 
 
     public String getEntryUpdn( Long id ) throws Exception
     {
-        return updnIdx.reverseLookup( id );
+        return buildEntryDn( id ).getName();
     }
 
 
     public String getEntryUpdn( String dn ) throws Exception
     {
-        Long id = ndnIdx.forwardLookup( dn );
-        return updnIdx.reverseLookup( id );
+        return buildEntryDn( dn ).getName();
     }
 
 
@@ -1013,7 +1113,7 @@ public class JdbmStore<E> implements Sto
 
         DN ancestorDn = ( DN ) aliasDN.clone();
         ancestorDn.remove( aliasDN.size() - 1 );
-        Long ancestorId = getEntryId( ancestorDn.getNormName() );
+        Long ancestorId = getEntryId( ancestorDn );
 
         /*
          * We cannot just drop all tuples in the one level and subtree userIndices
@@ -1061,8 +1161,8 @@ public class JdbmStore<E> implements Sto
         Long ancestorId; // Id of an alias entry relative
 
         // Access aliasedObjectName, normalize it and generate the Name 
-        normalizedAliasTargetDn = new DN( aliasTarget );
-        normalizedAliasTargetDn.normalize( schemaManager.getNormalizerMapping() );
+        normalizedAliasTargetDn = buildEntryDn( aliasTarget );//new DN( aliasTarget );
+        //normalizedAliasTargetDn.normalize( schemaManager.getNormalizerMapping() );
 
         /*
          * Check For Cycles
@@ -1107,7 +1207,7 @@ public class JdbmStore<E> implements Sto
         }
 
         // L O O K U P   T A R G E T   I D
-        targetId = ndnIdx.forwardLookup( normalizedAliasTargetDn.getNormName() );
+        targetId = rdnIdx.forwardLookup( normalizedAliasTargetDn.getRdn() );
 
         /*
          * Check For Target Existence
@@ -1154,7 +1254,7 @@ public class JdbmStore<E> implements Sto
          */
         ancestorDn = ( DN ) aliasDn.clone();
         ancestorDn.remove( aliasDn.size() - 1 );
-        ancestorId = getEntryId( ancestorDn.getNormName() );
+        ancestorId = getEntryId( ancestorDn );
 
         // check if alias parent and aliased entry are the same
         DN normalizedAliasTargetParentDn = ( DN ) normalizedAliasTargetDn.clone();
@@ -1211,16 +1311,20 @@ public class JdbmStore<E> implements Sto
         //
         DN entryDn = entry.getDn();
         DN parentDn = null;
+        RDN rdn = null;
 
         if ( entryDn.getNormName().equals( normSuffix.getNormName() ) )
         {
             parentId = 0L;
+            rdn = new RDN( normSuffix.getNormName() );
+            rdn.setUpName( entryDn.getName() );
         }
         else
         {
+            rdn = entryDn.getRdn();
             parentDn = ( DN ) entryDn.clone();
             parentDn.remove( parentDn.size() - 1 );
-            parentId = getEntryId( parentDn.getNormName() );
+            parentId = getEntryId( parentDn );
         }
 
         // don't keep going if we cannot find the parent Id
@@ -1229,6 +1333,9 @@ public class JdbmStore<E> implements Sto
             throw new LdapNoSuchObjectException( I18n.err( I18n.ERR_216, parentDn ) );
         }
 
+        rdn._setParentId( parentId );
+        rdnIdx.add( rdn, id );
+
         EntryAttribute objectClass = entry.get( OBJECT_CLASS_AT );
 
         if ( objectClass == null )
@@ -1259,8 +1366,7 @@ public class JdbmStore<E> implements Sto
             throw new IllegalStateException( I18n.err( I18n.ERR_218, entryDn.getNormName() ) );
         }
 
-        ndnIdx.add( entryDn.getNormName(), id );
-        updnIdx.add( entryDn.getName(), id );
+        
         oneLevelIdx.add( parentId, id );
 
         // Update the EntryCsn index
@@ -1329,7 +1435,15 @@ public class JdbmStore<E> implements Sto
 
     public ServerEntry lookup( Long id ) throws Exception
     {
-        return ( ServerEntry ) master.get( id );
+        ServerEntry se = ( ServerEntry ) master.get( id );
+        
+        if( se == null )
+        {
+            return null;
+        }
+        
+        se.setDn( buildEntryDn( id ) );
+        return se;
     }
 
 
@@ -1338,7 +1452,7 @@ public class JdbmStore<E> implements Sto
      */
     public synchronized void delete( Long id ) throws Exception
     {
-        ServerEntry entry = lookup( id );
+        ServerEntry entry = master.get( id );
         Long parentId = getParentId( id );
 
         EntryAttribute objectClass = entry.get( OBJECT_CLASS_AT );
@@ -1353,8 +1467,7 @@ public class JdbmStore<E> implements Sto
             objectClassIdx.drop( value.getString(), id );
         }
 
-        ndnIdx.drop( id );
-        updnIdx.drop( id );
+        rdnIdx.drop( id );
         oneLevelIdx.drop( id );
         entryCsnIdx.drop( id );
         entryUuidIdx.drop( id );
@@ -1497,8 +1610,8 @@ public class JdbmStore<E> implements Sto
 
         if ( modsOid.equals( SchemaConstants.ALIASED_OBJECT_NAME_AT_OID ) )
         {
-            String ndnStr = ndnIdx.reverseLookup( id );
-            addAliasIndices( id, new DN( ndnStr ), mods.getString() );
+            DN ndn = buildEntryDn( id );
+            addAliasIndices( id, ndn, mods.getString() );
         }
     }
 
@@ -1672,8 +1785,8 @@ public class JdbmStore<E> implements Sto
 
         if ( modsOid.equals( aliasAttributeOid ) && mods.size() > 0 )
         {
-            String ndnStr = ndnIdx.reverseLookup( id );
-            addAliasIndices( id, new DN( ndnStr ), mods.getString() );
+            DN ndn = buildEntryDn( id );
+            addAliasIndices( id, ndn, mods.getString() );
         }
     }
 
@@ -1777,7 +1890,7 @@ public class JdbmStore<E> implements Sto
     @SuppressWarnings("unchecked")
     public void rename( DN dn, RDN newRdn, boolean deleteOldRdn ) throws Exception
     {
-        Long id = getEntryId( dn.getNormName() );
+        Long id = getEntryId( dn );
         ServerEntry entry = lookup( id );
         DN updn = entry.getDn();
 
@@ -1888,10 +2001,15 @@ public class JdbmStore<E> implements Sto
         // gotta normalize cuz this thang is cloned and not normalized by default
         newUpdn.normalize( schemaManager.getNormalizerMapping() );
 
+        // restore the parentId from the old RDN
+        newRdn = newUpdn.getRdn();
+        newRdn._setParentId( updn.getRdn()._getParentId() );
+        
         modifyDn( id, newUpdn, false ); // propagate dn changes
 
         // Update the current entry
         entry.setDn( newUpdn );
+
         master.put( id, entry );
 
         if ( isSyncOnWrite )
@@ -1921,20 +2039,16 @@ public class JdbmStore<E> implements Sto
     private void modifyDn( Long id, DN updn, boolean isMove ) throws Exception
     {
         String aliasTarget;
-
-        // update normalized DN index
-        ndnIdx.drop( id );
-
-        if ( !updn.isNormalized() )
+        
+        //updated the RDN index
+        rdnIdx.drop( id );
+        if( !updn.isNormalized() )
         {
-            updn.normalize( schemaManager.getNormalizerMapping() );
+            // just normalize the RDN alone
+            updn.getRdn().normalize( schemaManager.getNormalizerMapping() );
         }
-
-        ndnIdx.add( updn.getNormName(), id );
-
-        // update user provided DN index
-        updnIdx.drop( id );
-        updnIdx.add( updn.getName(), id );
+        
+        rdnIdx.add( updn.getRdn(), id );
 
         /* 
          * Read Alias Index Tuples
@@ -1952,51 +2066,20 @@ public class JdbmStore<E> implements Sto
 
             if ( null != aliasTarget )
             {
-                addAliasIndices( id, new DN( getEntryDn( id ) ), aliasTarget );
+                addAliasIndices( id, buildEntryDn( id ), aliasTarget );
             }
         }
-
-        Cursor<IndexEntry<Long, E, Long>> children = list( id );
-
-        while ( children.next() )
-        {
-            // Get the child and its id
-            IndexEntry<Long, E, Long> rec = children.get();
-            Long childId = rec.getId();
-
-            /* 
-             * Calculate the DN for the child's new name by copying the parents
-             * new name and adding the child's old upRdn to new name as its RDN
-             */
-            DN childUpdn = ( DN ) updn.clone();
-            DN oldUpdn = new DN( getEntryUpdn( childId ) );
-
-            String rdn = oldUpdn.get( oldUpdn.size() - 1 );
-            DN rdnDN = new DN( rdn );
-            rdnDN.normalize( schemaManager.getNormalizerMapping() );
-            childUpdn.add( rdnDN.getRdn() );
-
-            // Modify the child
-            ServerEntry entry = lookup( childId );
-            entry.setDn( childUpdn );
-            master.put( childId, entry );
-
-            // Recursively change the names of the children below
-            modifyDn( childId, childUpdn, isMove );
-        }
-
-        children.close();
     }
 
 
     public void move( DN oldChildDn, DN newParentDn, RDN newRdn, boolean deleteOldRdn ) throws Exception
     {
-        Long childId = getEntryId( oldChildDn.getNormName() );
+        Long childId = getEntryId( oldChildDn );
         rename( oldChildDn, newRdn, deleteOldRdn );
         DN newUpdn = move( oldChildDn, childId, newParentDn );
 
         // Update the current entry
-        ServerEntry entry = lookup( childId );
+        ServerEntry entry = master.get( childId );
         entry.setDn( newUpdn );
         master.put( childId, entry );
 
@@ -2009,11 +2092,11 @@ public class JdbmStore<E> implements Sto
 
     public void move( DN oldChildDn, DN newParentDn ) throws Exception
     {
-        Long childId = getEntryId( oldChildDn.getNormName() );
+        Long childId = getEntryId( oldChildDn );
         DN newUpdn = move( oldChildDn, childId, newParentDn );
 
         // Update the current entry
-        ServerEntry entry = lookup( childId );
+        ServerEntry entry = master.get( childId );
         entry.setDn( newUpdn );
         master.put( childId, entry );
 
@@ -2041,7 +2124,7 @@ public class JdbmStore<E> implements Sto
     private DN move( DN oldChildDn, Long childId, DN newParentDn ) throws Exception
     {
         // Get the child and the new parent to be entries and Ids
-        Long newParentId = getEntryId( newParentDn.getNormName() );
+        Long newParentId = getEntryId( newParentDn );
         Long oldParentId = getParentId( childId );
 
         /*
@@ -2068,10 +2151,13 @@ public class JdbmStore<E> implements Sto
          * user provided RDN & the new parent's UPDN.  Basically add the child's
          * UpRdn String to the tail of the new parent's Updn Name.
          */
-        DN childUpdn = new DN( getEntryUpdn( childId ) );
-        String childRdn = childUpdn.get( childUpdn.size() - 1 );
-        DN newUpdn = new DN( getEntryUpdn( newParentId ) );
-        newUpdn.add( newUpdn.size(), childRdn );
+        
+        DN childUpdn = buildEntryDn( childId );
+        RDN childRdn = childUpdn.getRdn( childUpdn.size() - 1 );
+        childRdn._setParentId( newParentId );
+        DN newUpdn = buildEntryDn( newParentId );
+        
+        newUpdn.add( childRdn );
 
         // Call the modifyDn operation with the new updn
         modifyDn( childId, newUpdn, true );

Added: directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndexTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndexTest.java?rev=931632&view=auto
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndexTest.java (added)
+++ directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmRdnIndexTest.java Wed Apr  7 18:09:00 2010
@@ -0,0 +1,385 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  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. 
+ *  
+ */
+package org.apache.directory.server.core.partition.impl.btree.jdbm;
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.directory.server.constants.ApacheSchemaConstants;
+import org.apache.directory.server.xdbm.Index;
+import org.apache.directory.server.xdbm.IndexEntry;
+import org.apache.directory.shared.ldap.cursor.Cursor;
+import org.apache.directory.shared.ldap.name.DN;
+import org.apache.directory.shared.ldap.name.RDN;
+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;
+import org.apache.directory.shared.ldap.schema.loader.ldif.LdifSchemaLoader;
+import org.apache.directory.shared.ldap.schema.manager.impl.DefaultSchemaManager;
+import org.apache.directory.shared.ldap.util.ExceptionUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+
+/**
+ * Tests the JdbmRdnIndex.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class JdbmRdnIndexTest
+{
+    private static File dbFileDir;
+    Index<RDN, Long, Long> idx;
+    private static SchemaManager schemaManager;
+
+
+    @BeforeClass
+    public static void init() throws Exception
+    {
+        String workingDirectory = System.getProperty( "workingDirectory" );
+
+        if ( workingDirectory == null )
+        {
+            String path = JdbmRdnIndexTest.class.getResource( "" ).getPath();
+            int targetPos = path.indexOf( "target" );
+            workingDirectory = path.substring( 0, targetPos + 6 );
+        }
+
+        File schemaRepository = new File( workingDirectory, "schema" );
+        SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( new File( workingDirectory ) );
+        extractor.extractOrCopy( true );
+        LdifSchemaLoader loader = new LdifSchemaLoader( schemaRepository );
+        schemaManager = new DefaultSchemaManager( loader );
+
+        boolean loaded = schemaManager.loadAllEnabled();
+
+        if ( !loaded )
+        {
+            fail( "Schema load failed : " + ExceptionUtils.printErrors( schemaManager.getErrors() ) );
+        }
+    }
+
+
+    @Before
+    public void setup() throws IOException
+    {
+
+        File tmpIndexFile = File.createTempFile( JdbmRdnIndexTest.class.getSimpleName(), "db" );
+        tmpIndexFile.deleteOnExit();
+        dbFileDir = new File( tmpIndexFile.getParentFile(), JdbmRdnIndexTest.class.getSimpleName() );
+
+        dbFileDir.mkdirs();
+    }
+
+
+    @After
+    public void teardown() throws Exception
+    {
+        destroyIndex();
+
+        if ( ( dbFileDir != null ) && dbFileDir.exists() )
+        {
+            FileUtils.deleteDirectory( dbFileDir );
+        }
+    }
+
+
+    void destroyIndex() throws Exception
+    {
+        if ( idx != null )
+        {
+            idx.sync();
+            idx.close();
+
+            // created by this test
+            File dbFile = new File( idx.getWkDirPath(), idx.getAttribute().getName() + ".db" );
+            assert dbFile.delete();
+
+            // created by TransactionManager
+            File logFile = new File( idx.getWkDirPath(), idx.getAttribute().getName() + ".lg" );
+            assert logFile.delete();
+        }
+
+        idx = null;
+    }
+
+
+    void initIndex() throws Exception
+    {
+        initIndex( new JdbmRdnIndex<RDN, Long>() );
+    }
+
+
+    void initIndex( JdbmRdnIndex<RDN, Long> jdbmIdx ) throws Exception
+    {
+        if ( jdbmIdx == null )
+        {
+            jdbmIdx = new JdbmRdnIndex<RDN, Long>();
+        }
+
+        jdbmIdx.init( schemaManager, schemaManager.lookupAttributeTypeRegistry( ApacheSchemaConstants.APACHE_RDN_AT_OID ), dbFileDir );
+        this.idx = jdbmIdx;
+    }
+
+
+    // -----------------------------------------------------------------------
+    // Property Test Methods
+    // -----------------------------------------------------------------------
+
+    @Test
+    public void testCacheSize() throws Exception
+    {
+        // uninitialized index
+        JdbmRdnIndex JdbmRdnIndex = new JdbmRdnIndex();
+        JdbmRdnIndex.setCacheSize( 337 );
+        assertEquals( 337, JdbmRdnIndex.getCacheSize() );
+
+        // initialized index
+        initIndex();
+        try
+        {
+            idx.setCacheSize( 30 );
+            fail( "Should not be able to set cacheSize after initialization." );
+        }
+        catch ( Exception e )
+        {
+        }
+        
+        destroyIndex();
+        initIndex();
+        
+        assertEquals( Index.DEFAULT_INDEX_CACHE_SIZE, idx.getCacheSize() );
+    }
+
+
+    @Test
+    public void testWkDirPath() throws Exception
+    {
+        // uninitialized index
+        JdbmRdnIndex<RDN, Long> JdbmRdnIndex = new JdbmRdnIndex<RDN, Long>();
+        JdbmRdnIndex.setWkDirPath( new File( dbFileDir, "foo" ) );
+        assertEquals( "foo", JdbmRdnIndex.getWkDirPath().getName() );
+
+        // initialized index
+        initIndex();
+        try
+        {
+            idx.setWkDirPath( new File( dbFileDir, "foo" ) );
+            fail( "Should not be able to set wkDirPath after initialization." );
+        }
+        catch ( Exception e )
+        {
+        }
+        assertEquals( dbFileDir, idx.getWkDirPath() );
+
+        destroyIndex();
+        JdbmRdnIndex = new JdbmRdnIndex<RDN, Long>();
+        File wkdir = new File( dbFileDir, "foo" );
+        wkdir.mkdirs();
+        JdbmRdnIndex.setWkDirPath( wkdir );
+        initIndex( JdbmRdnIndex );
+        assertEquals( wkdir, idx.getWkDirPath() );
+    }
+
+
+    @Test
+    public void testGetAttribute() throws Exception
+    {
+        // uninitialized index
+        JdbmRdnIndex rdnIndex = new JdbmRdnIndex();
+        assertNull( rdnIndex.getAttribute() );
+
+        initIndex();
+        assertEquals( schemaManager.lookupAttributeTypeRegistry( ApacheSchemaConstants.APACHE_RDN_AT ), idx.getAttribute() );
+    }
+
+
+    @Test
+    public void testIsCountExact() throws Exception
+    {
+        assertFalse( new JdbmRdnIndex().isCountExact() );
+    }
+
+
+    // -----------------------------------------------------------------------
+    // Count Test Methods
+    // -----------------------------------------------------------------------
+
+    @Test
+    public void testCount() throws Exception
+    {
+        initIndex();
+        assertEquals( 0, idx.count() );
+
+        RDN key = new RDN( "cn=key" );
+        key._setParentId( 0 );
+
+        idx.add( key, 0l );
+        assertEquals( 1, idx.count() );
+
+        // setting a different parentId should make this key a different key
+        key = new RDN( "cn=key" );
+        key._setParentId( 1 );
+        
+        idx.add( key, 1l );
+        assertEquals( 2, idx.count() );
+
+        //count shouldn't get affected cause of inserting the same key
+        idx.add( key, 2l );
+        assertEquals( 2, idx.count() );
+        
+        key = new RDN( "cn=key" );
+        key._setParentId( 2 );
+        idx.add( key, 3l );
+        assertEquals( 3, idx.count() );
+    }
+
+
+    @Test
+    public void testCountOneArg() throws Exception
+    {
+        initIndex();
+        
+        RDN key = new RDN( "cn=key" );
+        
+        assertEquals( 0, idx.count( key ) );
+
+        idx.add( key, 0l );
+        assertEquals( 1, idx.count( key ) );
+    }
+
+
+    // -----------------------------------------------------------------------
+    // Add, Drop and Lookup Test Methods
+    // -----------------------------------------------------------------------
+
+    @Test
+    public void testLookups() throws Exception
+    {
+        initIndex();
+        
+        RDN key = new RDN( "cn=key" );
+        
+        assertNull( idx.forwardLookup( key ) );
+
+        idx.add( key, 0l );
+        assertEquals( 0, ( long ) idx.forwardLookup( key ) );
+        assertEquals( key, idx.reverseLookup( 0l ) );
+    }
+
+
+    @Test
+    public void testAddDropById() throws Exception
+    {
+        initIndex();
+        
+        RDN key = new RDN( "cn=key" );
+        
+        assertNull( idx.forwardLookup( key ) );
+
+        // test add/drop without adding any duplicates
+        idx.add( key, 0l );
+        assertEquals( 0, ( long ) idx.forwardLookup( key ) );
+        
+        idx.drop( key, 0l );
+        assertNull( idx.forwardLookup( key ) );
+        assertNull( idx.reverseLookup( 0l ) );
+    }
+
+
+    // -----------------------------------------------------------------------
+    // Miscellaneous Test Methods
+    // -----------------------------------------------------------------------
+
+    @Test
+    public void testCursors() throws Exception
+    {
+        initIndex();
+        
+        RDN key = new RDN( "cn=key" );
+        
+        assertEquals( 0, idx.count() );
+
+        idx.add( key, 0l );
+        assertEquals( 1, idx.count() );
+        
+        for( int i=1; i< 5; i++ )
+        {
+            key = new RDN( "cn=key" + i );
+            key._setParentId( i );
+            
+            idx.add( key, ( long ) i );
+        }
+
+        assertEquals( 5, idx.count() );
+        
+        // use forward index's cursor
+        Cursor<IndexEntry<RDN, Long, Long>> cursor = idx.forwardCursor();
+        cursor.beforeFirst();
+
+        cursor.next();
+        IndexEntry<RDN, Long, Long> e1 = cursor.get();
+        assertEquals( 0, ( long ) e1.getId() );
+        assertEquals( "cn=key", e1.getValue().getName() );
+        assertEquals( -1, e1.getValue()._getParentId() );
+
+        cursor.next();
+        IndexEntry<RDN, Long, Long> e2 = cursor.get();
+        assertEquals( 1, ( long ) e2.getId() );
+        assertEquals( "cn=key1", e2.getValue().getName() );
+        assertEquals( 1, e2.getValue()._getParentId() );
+        
+        cursor.next();
+        IndexEntry<RDN, Long, Long> e3 = cursor.get();
+        assertEquals( 2, ( long ) e3.getId() );
+        assertEquals( "cn=key2", e3.getValue().getName() );
+        assertEquals( 2, e3.getValue()._getParentId() );
+    }
+
+
+    @Test
+    public void testStoreRdnWithTwoATAVs() throws Exception
+    {
+        initIndex();
+        
+        DN dn = new DN( "dc=example,dc=com" );
+        dn.normalize( schemaManager.getNormalizerMapping() );
+        
+        RDN rdn = new RDN( dn.getName() );
+        rdn._setParentId( 1 );
+        idx.add( rdn, 0l );
+        
+        RDN rdn2 = idx.reverseLookup( 0l );
+        System.out.println( rdn2 );
+        InternalRdnComparator rdnCom = new InternalRdnComparator( "" );
+        assertEquals( 0, rdnCom.compare( rdn, rdn2 ) );
+    }
+}

Modified: directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java Wed Apr  7 18:09:00 2010
@@ -191,13 +191,13 @@ public class JdbmStoreTest
         store.setName( "foo" );
         assertEquals( "foo", store.getName() );
 
-        assertNull( store.getNdnIndex() );
-        store.setNdnIndex( new JdbmIndex<String, Attributes>( "ndn" ) );
-        assertNotNull( store.getNdnIndex() );
+//        assertNull( store.getNdnIndex() );
+//        store.setNdnIndex( new JdbmIndex<String, Attributes>( "ndn" ) );
+//        assertNotNull( store.getNdnIndex() );
 
         assertNull( store.getOneAliasIndex() );
         store.setOneAliasIndex( new JdbmIndex<Long, Attributes>( "oneAlias" ) );
-        assertNotNull( store.getNdnIndex() );
+        assertNotNull( store.getOneAliasIndex() );
 
         assertNull( store.getSubAliasIndex() );
         store.setSubAliasIndex( new JdbmIndex<Long, Attributes>( "subAlias" ) );
@@ -207,10 +207,6 @@ public class JdbmStoreTest
         store.setSuffixDn( "dc=example,dc=com" );
         assertEquals( "dc=example,dc=com", store.getSuffixDn() );
 
-        assertNull( store.getUpdnIndex() );
-        store.setUpdnIndex( new JdbmIndex<String, Attributes>( "updn" ) );
-        assertNotNull( store.getUpdnIndex() );
-
         assertNull( store.getUpSuffix() );
         assertNull( store.getSuffix() );
 
@@ -297,14 +293,6 @@ public class JdbmStoreTest
         }
 
         assertNotNull( store.getNdnIndex() );
-        try
-        {
-            store.setNdnIndex( new JdbmIndex<String, ServerEntry>( "ndn" ) );
-            fail();
-        }
-        catch ( IllegalStateException e )
-        {
-        }
 
         assertNotNull( store.getOneAliasIndex() );
         try
@@ -336,18 +324,9 @@ public class JdbmStoreTest
         {
         }
 
-        assertNotNull( store.getUpdnIndex() );
-        try
-        {
-            store.setUpdnIndex( new JdbmIndex<String, ServerEntry>( "updn" ) );
-            fail();
-        }
-        catch ( IllegalStateException e )
-        {
-        }
         Iterator<String> systemIndices = store.systemIndices();
 
-        for ( int ii = 0; ii < 11; ii++ )
+        for ( int ii = 0; ii < 10; ii++ )
         {
             assertTrue( systemIndices.hasNext() );
             assertNotNull( systemIndices.next() );
@@ -436,7 +415,7 @@ public class JdbmStoreTest
         dn.normalize( schemaManager.getNormalizerMapping() );
         assertEquals( 1L, ( long ) store.getEntryId( dn.getNormName() ) );
         assertEquals( 11, store.count() );
-        assertEquals( "o=Good Times Co.", store.getEntryUpdn( dn.getNormName() ) );
+        assertEquals( "o=Good Times Co.", store.getEntryUpdn( dn.getName() ) );
         assertEquals( dn.getNormName(), store.getEntryDn( 1L ) );
         assertEquals( dn.getName(), store.getEntryUpdn( 1L ) );
 

Modified: directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ServerEntrySerializerTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ServerEntrySerializerTest.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ServerEntrySerializerTest.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ServerEntrySerializerTest.java Wed Apr  7 18:09:00 2010
@@ -150,6 +150,10 @@ public class ServerEntrySerializerTest
         
         ServerEntry result = (ServerEntry)ses.deserialize( data );
         
+        DN newDn = new DN();
+        newDn.add( dn.getRdn() );
+        entry.setDn( newDn );
+        
         assertEquals( entry, result );
     }
 
@@ -168,6 +172,10 @@ public class ServerEntrySerializerTest
         
         ServerEntry result = (ServerEntry)ses.deserialize( data );
         
+        DN newDn = new DN();
+        newDn.add( dn.getRdn() );
+        entry.setDn( newDn );
+        
         assertEquals( entry, result );
     }
 
@@ -189,6 +197,10 @@ public class ServerEntrySerializerTest
         
         ServerEntry result = (ServerEntry)ses.deserialize( data );
         
+        DN newDn = new DN();
+        newDn.add( dn.getRdn() );
+        entry.setDn( newDn );
+        
         assertEquals( entry, result );
     }
 

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/GreaterEqTest.java Wed Apr  7 18:09:00 2010
@@ -426,23 +426,23 @@ public class GreaterEqTest
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 7L, ( long ) cursor.get().getId() );
-        assertEquals( "5", cursor.get().getValue() );
+        assertEquals( 5L, ( long ) cursor.get().getId() );
+        assertEquals( "3", cursor.get().getValue() );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 8L, ( long ) cursor.get().getId() );
-        assertEquals( "6", cursor.get().getValue() );
+        assertEquals( 6L, ( long ) cursor.get().getId() );
+        assertEquals( "4", cursor.get().getValue() );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 6L, ( long ) cursor.get().getId() );
-        assertEquals( "4", cursor.get().getValue() );
+        assertEquals( 7L, ( long ) cursor.get().getId() );
+        assertEquals( "5", cursor.get().getValue() );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 5L, ( long ) cursor.get().getId() );
-        assertEquals( "3", cursor.get().getValue() );
+        assertEquals( 8L, ( long ) cursor.get().getId() );
+        assertEquals( "6", cursor.get().getValue() );
 
         assertFalse( cursor.next() );
         assertFalse( cursor.available() );
@@ -453,16 +453,12 @@ public class GreaterEqTest
         // ---------- test first() ----------
 
         cursor = new GreaterEqCursor( store, evaluator );
-        cursor.first();
-
-        assertTrue( cursor.available() );
-        assertEquals( 7L, ( long ) cursor.get().getId() );
-        assertEquals( "5", cursor.get().getValue() );
+        cursor.beforeFirst();
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 8L, ( long ) cursor.get().getId() );
-        assertEquals( "6", cursor.get().getValue() );
+        assertEquals( 5L, ( long ) cursor.get().getId() );
+        assertEquals( "3", cursor.get().getValue() );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
@@ -471,8 +467,13 @@ public class GreaterEqTest
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 5L, ( long ) cursor.get().getId() );
-        assertEquals( "3", cursor.get().getValue() );
+        assertEquals( 7L, ( long ) cursor.get().getId() );
+        assertEquals( "5", cursor.get().getValue() );
+
+        assertTrue( cursor.next() );
+        assertTrue( cursor.available() );
+        assertEquals( 8L, ( long ) cursor.get().getId() );
+        assertEquals( "6", cursor.get().getValue() );
 
         assertFalse( cursor.next() );
         assertFalse( cursor.available() );
@@ -488,23 +489,23 @@ public class GreaterEqTest
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 5L, ( long ) cursor.get().getId() );
-        assertEquals( "3", cursor.get().getValue() );
+        assertEquals( 8L, ( long ) cursor.get().getId() );
+        assertEquals( "6", cursor.get().getValue() );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 6L, ( long ) cursor.get().getId() );
-        assertEquals( "4", cursor.get().getValue() );
+        assertEquals( 7L, ( long ) cursor.get().getId() );
+        assertEquals( "5", cursor.get().getValue() );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 8L, ( long ) cursor.get().getId() );
-        assertEquals( "6", cursor.get().getValue() );
+        assertEquals( 6L, ( long ) cursor.get().getId() );
+        assertEquals( "4", cursor.get().getValue() );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 7L, ( long ) cursor.get().getId() );
-        assertEquals( "5", cursor.get().getValue() );
+        assertEquals( 5L, ( long ) cursor.get().getId() );
+        assertEquals( "3", cursor.get().getValue() );
 
         assertFalse( cursor.previous() );
         assertFalse( cursor.available() );
@@ -515,23 +516,23 @@ public class GreaterEqTest
         cursor.last();
 
         assertTrue( cursor.available() );
-        assertEquals( 5L, ( long ) cursor.get().getId() );
-        assertEquals( "3", cursor.get().getValue() );
+        assertEquals( 8L, ( long ) cursor.get().getId() );
+        assertEquals( "6", cursor.get().getValue() );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 6L, ( long ) cursor.get().getId() );
-        assertEquals( "4", cursor.get().getValue() );
+        assertEquals( 7L, ( long ) cursor.get().getId() );
+        assertEquals( "5", cursor.get().getValue() );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 8L, ( long ) cursor.get().getId() );
-        assertEquals( "6", cursor.get().getValue() );
+        assertEquals( 6L, ( long ) cursor.get().getId() );
+        assertEquals( "4", cursor.get().getValue() );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 7L, ( long ) cursor.get().getId() );
-        assertEquals( "5", cursor.get().getValue() );
+        assertEquals( 5L, ( long ) cursor.get().getId() );
+        assertEquals( "3", cursor.get().getValue() );
 
         assertFalse( cursor.previous() );
         assertFalse( cursor.available() );

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/LessEqTest.java Wed Apr  7 18:09:00 2010
@@ -451,18 +451,18 @@ public class LessEqTest
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 3L, ( long ) cursor.get().getId() );
+        assertEquals( 2L, ( long ) cursor.get().getId() );
         assertEquals( "1", cursor.get().getValue() );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 4L, ( long ) cursor.get().getId() );
-        assertEquals( "2", cursor.get().getValue() );
+        assertEquals( 3L, ( long ) cursor.get().getId() );
+        assertEquals( "1", cursor.get().getValue() );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 2L, ( long ) cursor.get().getId() );
-        assertEquals( "1", cursor.get().getValue() );
+        assertEquals( 4L, ( long ) cursor.get().getId() );
+        assertEquals( "2", cursor.get().getValue() );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
@@ -486,6 +486,11 @@ public class LessEqTest
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
+        assertEquals( 2L, ( long ) cursor.get().getId() );
+        assertEquals( "1", cursor.get().getValue() );
+        
+        assertTrue( cursor.next() );
+        assertTrue( cursor.available() );
         assertEquals( 3L, ( long ) cursor.get().getId() );
         assertEquals( "1", cursor.get().getValue() );
 
@@ -496,11 +501,6 @@ public class LessEqTest
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 2L, ( long ) cursor.get().getId() );
-        assertEquals( "1", cursor.get().getValue() );
-
-        assertTrue( cursor.next() );
-        assertTrue( cursor.available() );
         assertEquals( 5L, ( long ) cursor.get().getId() );
         assertEquals( "3", cursor.get().getValue() );
 
@@ -523,11 +523,6 @@ public class LessEqTest
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 2L, ( long ) cursor.get().getId() );
-        assertEquals( "1", cursor.get().getValue() );
-
-        assertTrue( cursor.previous() );
-        assertTrue( cursor.available() );
         assertEquals( 4L, ( long ) cursor.get().getId() );
         assertEquals( "2", cursor.get().getValue() );
 
@@ -538,6 +533,11 @@ public class LessEqTest
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
+        assertEquals( 2L, ( long ) cursor.get().getId() );
+        assertEquals( "1", cursor.get().getValue() );
+
+        assertTrue( cursor.previous() );
+        assertTrue( cursor.available() );
         assertEquals( 1L, ( long ) cursor.get().getId() );
         assertEquals( "1", cursor.get().getValue() );
 
@@ -555,11 +555,6 @@ public class LessEqTest
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 2L, ( long ) cursor.get().getId() );
-        assertEquals( "1", cursor.get().getValue() );
-
-        assertTrue( cursor.previous() );
-        assertTrue( cursor.available() );
         assertEquals( 4L, ( long ) cursor.get().getId() );
         assertEquals( "2", cursor.get().getValue() );
 
@@ -570,6 +565,11 @@ public class LessEqTest
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
+        assertEquals( 2L, ( long ) cursor.get().getId() );
+        assertEquals( "1", cursor.get().getValue() );
+
+        assertTrue( cursor.previous() );
+        assertTrue( cursor.available() );
         assertEquals( 1L, ( long ) cursor.get().getId() );
         assertEquals( "1", cursor.get().getValue() );
 

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NestedFilterTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NestedFilterTest.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NestedFilterTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NestedFilterTest.java Wed Apr  7 18:09:00 2010
@@ -45,6 +45,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.schema.loader.ldif.LdifSchemaLoader;
 import org.apache.directory.shared.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.shared.ldap.schema.normalizers.ConcreteNameComponentNormalizer;
+import org.apache.directory.shared.ldap.schema.syntaxCheckers.CsnSyntaxChecker;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -214,6 +215,8 @@ public class NestedFilterTest
     {
         String filter = "(&(|(postalCode=5)(postalCode=6))(!(ou=sales)))";
 
+        CsnSyntaxChecker csnSynChecker = new CsnSyntaxChecker();
+        
         ExprNode exprNode = FilterParser.parse( filter );
         optimizer.annotate( exprNode );
 
@@ -222,12 +225,12 @@ public class NestedFilterTest
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 7, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=apache,2.5.4.11=board of directors,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 8, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.3=jack daniels,2.5.4.11=engineering,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertFalse( cursor.next() );
     }

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NotCursorTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NotCursorTest.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NotCursorTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/NotCursorTest.java Wed Apr  7 18:09:00 2010
@@ -36,6 +36,7 @@ import org.apache.directory.server.xdbm.
 import org.apache.directory.server.xdbm.search.Evaluator;
 import org.apache.directory.server.xdbm.tools.StoreUtils;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.csn.CsnFactory;
 import org.apache.directory.shared.ldap.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.entry.ServerEntry;
 import org.apache.directory.shared.ldap.filter.ExprNode;
@@ -47,6 +48,8 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.schema.ldif.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.shared.ldap.schema.loader.ldif.LdifSchemaLoader;
 import org.apache.directory.shared.ldap.schema.manager.impl.DefaultSchemaManager;
+import org.apache.directory.shared.ldap.schema.syntaxCheckers.CsnSidSyntaxChecker;
+import org.apache.directory.shared.ldap.schema.syntaxCheckers.CsnSyntaxChecker;
 import org.apache.directory.shared.ldap.util.ExceptionUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -67,6 +70,8 @@ public class NotCursorTest
 {
     private static final Logger LOG = LoggerFactory.getLogger( NotCursorTest.class.getSimpleName() );
 
+    CsnSyntaxChecker csnSynChecker = new CsnSyntaxChecker();
+    
     File wkdir;
     Store<ServerEntry, Long> store;
     static SchemaManager schemaManager = null;
@@ -172,27 +177,28 @@ public class NotCursorTest
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 1, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 7, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=apache,2.5.4.11=board of directors,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertEquals( 2, ( long ) cursor.get().getId() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 3, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=board of directors,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 4, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=engineering,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 2, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=sales,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertEquals( 7, ( long ) cursor.get().getId() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
+
 
         assertFalse( cursor.next() );
         assertFalse( cursor.available() );
@@ -217,29 +223,29 @@ public class NotCursorTest
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 1, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         cursor.first();
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 7, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=apache,2.5.4.11=board of directors,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertEquals( 2, ( long ) cursor.get().getId() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 3, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=board of directors,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 4, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=engineering,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 2, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=sales,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertEquals( 7, ( long ) cursor.get().getId() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertFalse( cursor.next() );
         assertFalse( cursor.available() );
@@ -248,29 +254,29 @@ public class NotCursorTest
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 2, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=sales,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertEquals( 7, ( long ) cursor.get().getId() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         cursor.last();
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
         assertEquals( 4, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=engineering,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
         assertEquals( 3, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=board of directors,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
-        assertEquals( 7, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.11=apache,2.5.4.11=board of directors,2.5.4.10=good times co.", cursor.get().getValue() );
+        assertEquals( 2, ( long ) cursor.get().getId() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
         assertEquals( 1, ( long ) cursor.get().getId() );
-        assertEquals( "2.5.4.10=good times co.", cursor.get().getValue() );
+        assertTrue( csnSynChecker.isValidSyntax( cursor.get().getValue() ) );
 
         assertFalse( cursor.previous() );
         assertFalse( cursor.available() );

Modified: directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/PresenceTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/PresenceTest.java?rev=931632&r1=931631&r2=931632&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/PresenceTest.java (original)
+++ directory/apacheds/trunk/xdbm-search/src/test/java/org/apache/directory/server/xdbm/search/impl/PresenceTest.java Wed Apr  7 18:09:00 2010
@@ -303,13 +303,13 @@ public class PresenceTest
         cursor.beforeFirst();
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 8, ( long ) cursor.get().getId() );
+        assertEquals( 5, ( long ) cursor.get().getId() );
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
         assertEquals( 6, ( long ) cursor.get().getId() );
         assertTrue( cursor.next() );
         assertTrue( cursor.available() );
-        assertEquals( 5, ( long ) cursor.get().getId() );
+        assertEquals( 8, ( long ) cursor.get().getId() );
         assertFalse( cursor.next() );
         assertFalse( cursor.available() );
 
@@ -336,7 +336,7 @@ public class PresenceTest
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
         assertEquals( SchemaConstants.SN_AT_OID, cursor.get().getValue() );
-        assertEquals( 5, ( long ) cursor.get().getId() );
+        assertEquals( 8, ( long ) cursor.get().getId() );
 
         // keep testing previous
         assertTrue( cursor.previous() );
@@ -347,7 +347,7 @@ public class PresenceTest
         assertTrue( cursor.previous() );
         assertTrue( cursor.available() );
         assertEquals( SchemaConstants.SN_AT_OID, cursor.get().getValue() );
-        assertEquals( 8, ( long ) cursor.get().getId() );
+        assertEquals( 5, ( long ) cursor.get().getId() );
 
         assertFalse( cursor.previous() );
         assertFalse( cursor.available() );