You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2008/03/14 05:12:46 UTC
svn commit: r636988 - in /directory/sandbox/akarasulu/bigbang: ./
apacheds/btree-base/src/main/java/org/apache/directory/server/core/partition/impl/btree/
apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/
apa...
Author: akarasulu
Date: Thu Mar 13 21:12:45 2008
New Revision: 636988
URL: http://svn.apache.org/viewvc?rev=636988&view=rev
Log:
adding more test cases and fixing bugs
Added:
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/NoEqMatchAttribute.java
Modified:
directory/sandbox/akarasulu/bigbang/ (props changed)
directory/sandbox/akarasulu/bigbang/apacheds/btree-base/src/main/java/org/apache/directory/server/core/partition/impl/btree/Index.java
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/MarshallerSerializerBridge.java
Propchange: directory/sandbox/akarasulu/bigbang/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Mar 13 21:12:45 2008
@@ -1,4 +1,5 @@
workspace
+.clover
*.ipr
lost+found
*.log
Modified: directory/sandbox/akarasulu/bigbang/apacheds/btree-base/src/main/java/org/apache/directory/server/core/partition/impl/btree/Index.java
URL: http://svn.apache.org/viewvc/directory/sandbox/akarasulu/bigbang/apacheds/btree-base/src/main/java/org/apache/directory/server/core/partition/impl/btree/Index.java?rev=636988&r1=636987&r2=636988&view=diff
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/btree-base/src/main/java/org/apache/directory/server/core/partition/impl/btree/Index.java (original)
+++ directory/sandbox/akarasulu/bigbang/apacheds/btree-base/src/main/java/org/apache/directory/server/core/partition/impl/btree/Index.java Thu Mar 13 21:12:45 2008
@@ -96,6 +96,20 @@
File getWkDirPath();
+ /**
+ * Checks whether or not calls to count the number of keys greater than or
+ * less than the key are exact.
+ *
+ * Checking to see the number of values greater than or less than some key
+ * may be excessively costly. Since this is not a critical function but
+ * one that assists in optimizing searches some implementations can just
+ * return a worst case (maximum) guess.
+ *
+ * @return true if the count is an exact value or a worst case guess
+ */
+ boolean isCountExact();
+
+
// -----------------------------------------------------------------------
// E N D C O N F I G U R A T I O N M E T H O D S
// -----------------------------------------------------------------------
Modified: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
URL: http://svn.apache.org/viewvc/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java?rev=636988&r1=636987&r2=636988&view=diff
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java (original)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java Thu Mar 13 21:12:45 2008
@@ -34,6 +34,7 @@
import javax.naming.NamingException;
import java.io.File;
import java.io.IOException;
+import java.util.Comparator;
/**
@@ -56,7 +57,6 @@
/** the key used for the reverse btree name */
public static final String REVERSE_BTREE = "_reverse";
-
/** the attribute type resolved for this JdbmIndex */
private AttributeType attribute;
/**
@@ -139,6 +139,12 @@
{
this.keyCache = new SynchronizedLRUMap( cacheSize );
this.attribute = attributeType;
+
+ if ( attributeId == null )
+ {
+ setAttributeId( attribute.getName() );
+ }
+
if ( this.wkDirPath == null )
{
this.wkDirPath = wkDirPath;
@@ -183,7 +189,7 @@
attribute.getName() + FORWARD_BTREE,
numDupLimit,
recMan,
- comp, null,
+ comp, LongComparator.INSTANCE,
null, LongSerializer.INSTANCE );
/*
@@ -197,9 +203,9 @@
reverse = new JdbmTable<Long,K>(
attribute.getName() + REVERSE_BTREE,
recMan,
- null,
+ LongComparator.INSTANCE,
LongSerializer.INSTANCE,
- null);
+ null );
}
else
{
@@ -207,9 +213,8 @@
attribute.getName() + REVERSE_BTREE,
numDupLimit,
recMan,
- null, comp,
- LongSerializer.INSTANCE,
- null);
+ LongComparator.INSTANCE, comp,
+ LongSerializer.INSTANCE, null );
}
}
@@ -242,6 +247,12 @@
}
}
+
+ public boolean isCountExact()
+ {
+ return false;
+ }
+
/**
* Gets the attribute identifier set at configuration time for this index which may not
Modified: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java
URL: http://svn.apache.org/viewvc/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java?rev=636988&r1=636987&r2=636988&view=diff
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java (original)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java Thu Mar 13 21:12:45 2008
@@ -33,6 +33,7 @@
import org.apache.directory.server.core.partition.impl.btree.*;
import org.apache.directory.server.schema.SerializableComparator;
import org.apache.directory.shared.ldap.util.SynchronizedLRUMap;
+import org.apache.directory.shared.ldap.schema.ByteArrayComparator;
import java.io.IOException;
import java.util.*;
@@ -108,23 +109,41 @@
Serializer keySerializer, Serializer valueSerializer )
throws IOException
{
- if( valueSerializer == null )
- {
- throw new IllegalArgumentException("Value serializer cannot be null when duplicates are allowed in JdbmTable");
- }
-
// TODO make the size of the duplicate btree cache configurable via constructor
//noinspection unchecked
duplicateBtrees = new SynchronizedLRUMap( 100 );
- marshaller = new AvlTreeMarshaller<V>( valueComparator,
- new MarshallerSerializerBridge<V>( valueSerializer ) );
+
+ if ( valueSerializer != null )
+ {
+ marshaller = new AvlTreeMarshaller<V>( valueComparator,
+ new MarshallerSerializerBridge<V>( valueSerializer ) );
+ }
+ else
+ {
+ marshaller = new AvlTreeMarshaller<V>( valueComparator );
+ }
+
+ if ( keyComparator == null )
+ {
+ throw new NullPointerException( "Key comparator cannot be null." );
+ }
+ else
+ {
+ this.keyComparator = keyComparator;
+ }
+
+ if ( valueComparator == null )
+ {
+ throw new NullPointerException( "Value comparator must not be null for tables with duplicate keys." );
+ }
+ else
+ {
+ this.valueComparator = valueComparator;
+ }
this.numDupLimit = numDupLimit;
this.name = name;
this.recMan = manager;
-
- this.keyComparator = keyComparator;
- this.valueComparator = valueComparator;
this.keySerializer = keySerializer;
this.valueSerializer = valueSerializer;
Modified: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/MarshallerSerializerBridge.java
URL: http://svn.apache.org/viewvc/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/MarshallerSerializerBridge.java?rev=636988&r1=636987&r2=636988&view=diff
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/MarshallerSerializerBridge.java (original)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/MarshallerSerializerBridge.java Thu Mar 13 21:12:45 2008
@@ -45,6 +45,10 @@
*/
public MarshallerSerializerBridge( Serializer serializer )
{
+ if ( serializer == null )
+ {
+ throw new NullPointerException( "serializer" );
+ }
this.serializer = serializer;
}
Added: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java
URL: http://svn.apache.org/viewvc/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java?rev=636988&view=auto
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java (added)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndexTest.java Thu Mar 13 21:12:45 2008
@@ -0,0 +1,468 @@
+/*
+ * 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.junit.Before;
+import org.junit.Test;
+import org.junit.After;
+import org.junit.Ignore;
+import static org.junit.Assert.*;
+
+import org.apache.directory.server.schema.bootstrap.*;
+import org.apache.directory.server.schema.registries.*;
+import org.apache.directory.server.schema.SerializableComparator;
+import org.apache.directory.server.core.partition.impl.btree.Index;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
+
+import java.util.Set;
+import java.util.HashSet;
+import java.io.File;
+import java.io.IOException;
+
+
+/**
+ * TODO doc me!
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class JdbmIndexTest
+{
+ AttributeTypeRegistry registry;
+ File dbFileDir;
+ Index<String> idx;
+
+
+ @Before
+ public void setup() throws Exception
+ {
+ BootstrapSchemaLoader loader = new BootstrapSchemaLoader();
+ OidRegistry oidRegistry = new DefaultOidRegistry();
+ Registries registries = new DefaultRegistries( "bootstrap", loader, oidRegistry );
+ SerializableComparator.setRegistry( registries.getComparatorRegistry() );
+
+ // load essential bootstrap schemas
+ Set<Schema> bootstrapSchemas = new HashSet<Schema>();
+ bootstrapSchemas.add( new ApachemetaSchema() );
+ bootstrapSchemas.add( new ApacheSchema() );
+ bootstrapSchemas.add( new CoreSchema() );
+ bootstrapSchemas.add( new SystemSchema() );
+ loader.loadWithDependencies( bootstrapSchemas, registries );
+ this.registry = registries.getAttributeTypeRegistry();
+
+ if ( dbFileDir != null )
+ {
+ dbFileDir.delete();
+ }
+
+ dbFileDir = new File( File.createTempFile(
+ JdbmIndexTest.class.getSimpleName(), "db" ).getParentFile(),
+ JdbmIndexTest.class.getSimpleName() );
+
+ dbFileDir.mkdirs();
+ }
+
+
+ @After
+ public void teardown() throws Exception
+ {
+ registry = null;
+ destroyIndex();
+ }
+
+
+ void destroyIndex() throws Exception
+ {
+ if ( idx != null )
+ {
+ idx.sync();
+ idx.close();
+ File file = new File( idx.getWkDirPath(), idx.getAttribute().getName() + ".db" );
+ file.delete();
+ }
+ idx = null;
+ }
+
+
+ void initIndex() throws Exception
+ {
+ initIndex( new JdbmIndex() );
+ }
+
+
+ void initIndex( JdbmIndex jdbmIdx ) throws Exception
+ {
+ if ( jdbmIdx == null )
+ {
+ jdbmIdx = new JdbmIndex();
+ }
+
+ jdbmIdx.init( registry.lookup( SchemaConstants.OU_AT ), dbFileDir );
+ this.idx = jdbmIdx;
+ }
+
+
+ // -----------------------------------------------------------------------
+ // Property Test Methods
+ // -----------------------------------------------------------------------
+
+
+ @Test
+ public void testAttributeId() throws Exception
+ {
+ // uninitialized index
+ JdbmIndex jdbmIndex = new JdbmIndex();
+ jdbmIndex.setAttributeId( "foo" );
+ assertEquals( "foo", jdbmIndex.getAttributeId() );
+
+ jdbmIndex = new JdbmIndex( "bar" );
+ assertEquals( "bar", jdbmIndex.getAttributeId() );
+
+ // initialized index
+ initIndex();
+ try
+ {
+ idx.setAttributeId( "foo" );
+ fail( "Should not be able to set attributeId after initialization." );
+ }
+ catch ( Exception e )
+ {
+ }
+ assertEquals( "ou", idx.getAttributeId() );
+
+ destroyIndex();
+ initIndex( new JdbmIndex( "foo" ) );
+ assertEquals( "foo", idx.getAttributeId() );
+ }
+
+
+ @Test
+ public void testCacheSize() throws Exception
+ {
+ // uninitialized index
+ JdbmIndex jdbmIndex = new JdbmIndex();
+ jdbmIndex.setCacheSize( 337 );
+ assertEquals( 337, jdbmIndex.getCacheSize() );
+
+ // initialized index
+ initIndex();
+ try
+ {
+ idx.setCacheSize( 30 );
+ fail( "Should not be able to set cacheSize after initialization." );
+ }
+ catch ( Exception e )
+ {
+ }
+ assertEquals( Index.DEFAULT_INDEX_CACHE_SIZE, idx.getCacheSize() );
+ }
+
+
+ @Test
+ public void testWkDirPath() throws Exception
+ {
+ // uninitialized index
+ JdbmIndex jdbmIndex = new JdbmIndex();
+ jdbmIndex.setWkDirPath( new File( dbFileDir, "foo" ) );
+ assertEquals( "foo", jdbmIndex.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();
+ jdbmIndex = new JdbmIndex();
+ File wkdir = new File( dbFileDir, "foo" );
+ wkdir.mkdirs();
+ jdbmIndex.setWkDirPath( wkdir );
+ initIndex( jdbmIndex );
+ assertEquals( wkdir, idx.getWkDirPath() );
+ }
+
+
+ @Test
+ public void testNumDupLimit() throws Exception
+ {
+ // uninitialized index
+ JdbmIndex jdbmIndex = new JdbmIndex();
+ jdbmIndex.setNumDupLimit( 337 );
+ assertEquals( 337, jdbmIndex.getNumDupLimit() );
+
+ // initialized index
+ initIndex();
+ try
+ {
+ ( ( JdbmIndex ) idx).setNumDupLimit( 30 );
+ fail( "Should not be able to set numDupLimit after initialization." );
+ }
+ catch ( Exception e )
+ {
+ }
+ assertEquals( JdbmIndex.DEFAULT_DUPLICATE_LIMIT, ( ( JdbmIndex ) idx).getNumDupLimit() );
+ }
+
+
+ @Test
+ public void testGetAttribute() throws Exception
+ {
+ // uninitialized index
+ JdbmIndex jdbmIndex = new JdbmIndex();
+ assertNull( jdbmIndex.getAttribute() );
+
+ initIndex();
+ assertEquals( registry.lookup( "ou" ), idx.getAttribute() );
+ }
+
+
+ @Test
+ public void testIsCountExact() throws Exception
+ {
+ assertFalse( new JdbmIndex().isCountExact() );
+ }
+
+
+ // -----------------------------------------------------------------------
+ // Count Test Methods
+ // -----------------------------------------------------------------------
+
+
+ @Test
+ public void testCount() throws Exception
+ {
+ initIndex();
+ assertEquals( 0, idx.count() );
+
+ idx.add( "foo", 1234L );
+ assertEquals( 1, idx.count() );
+
+ idx.add( "foo", 333L );
+ assertEquals( 2, idx.count() );
+
+ idx.add( "bar", 555L );
+ assertEquals( 3, idx.count() );
+ }
+
+
+ @Test
+ public void testCountOneArg() throws Exception
+ {
+ initIndex();
+ assertEquals( 0, idx.count( "foo" ) );
+
+ idx.add( "bar", 1234L );
+ assertEquals( 0, idx.count( "foo" ) );
+
+ idx.add( "foo", 1234L );
+ assertEquals( 1, idx.count( "foo" ) );
+
+ idx.add( "foo", 333L );
+ assertEquals( 2, idx.count( "foo" ) );
+ }
+
+
+ @Test
+ public void testGreaterThanCount() throws Exception
+ {
+ initIndex();
+ assertEquals( 0, idx.greaterThanCount( "a" ) );
+
+ for ( char ch = 'a'; ch <= 'z'; ch++ )
+ {
+ idx.add( String.valueOf( ch ), ( long ) ch );
+ }
+ assertEquals( 26, idx.greaterThanCount( "a" ) );
+ }
+
+
+ @Test
+ public void testLessThanCount() throws Exception
+ {
+ initIndex();
+ assertEquals( 0, idx.lessThanCount( "z" ) );
+
+ for ( char ch = 'a'; ch <= 'z'; ch++ )
+ {
+ idx.add( String.valueOf( ch ), ( long ) ch );
+ }
+ assertEquals( 26, idx.lessThanCount( "z" ) );
+ }
+
+
+ // -----------------------------------------------------------------------
+ // Add, Drop and Lookup Test Methods
+ // -----------------------------------------------------------------------
+
+
+ @Test
+ public void testLookups() throws Exception
+ {
+ initIndex();
+ assertNull( idx.forwardLookup( "foo" ) );
+ assertNull( idx.forwardLookup( "bar" ) );
+ assertNull( idx.reverseLookup( 0L ) );
+
+ idx.add( "foo", 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( "foo", idx.reverseLookup( 0L ) );
+
+ idx.add( "foo", 1L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( "foo", idx.reverseLookup( 0L ) );
+ assertEquals( "foo", idx.reverseLookup( 1L ) );
+
+ idx.add( "bar", 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "bar" ) );
+ assertEquals( "bar", idx.reverseLookup( 0L ) ); // reverse lookup returns first val
+ }
+
+
+ @Test
+ @Ignore( "Will not work until duplicates cursor is finished." )
+ public void testAddDropById() throws Exception
+ {
+ initIndex();
+ assertNull( idx.forwardLookup( "foo" ) );
+ assertNull( idx.forwardLookup( "bar" ) );
+ assertNull( idx.reverseLookup( 0L ) );
+ assertNull( idx.reverseLookup( 1L ) );
+
+ // test add/drop without adding any duplicates
+ idx.add( "foo", 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( "foo", idx.reverseLookup( 0L ) );
+
+ idx.drop( 0L );
+ assertNull( idx.forwardLookup( "foo" ) );
+ assertNull( idx.reverseLookup( 0L ) );
+
+ // test add/drop with duplicates in bulk
+ idx.add( "foo", 0L );
+ idx.add( "foo", 1L );
+ idx.add( "bar", 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "bar" ) );
+ assertEquals( "bar", idx.reverseLookup( 0L ) );
+ assertEquals( "foo", idx.reverseLookup( 1L ) );
+
+ idx.drop( 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( "foo", idx.reverseLookup( 1L ) );
+ assertFalse( idx.hasValue( "bar", 0L ) );
+ assertFalse( idx.hasValue( "foo", 0L ) );
+
+ idx.drop( 1L );
+ assertNull( idx.forwardLookup( "foo" ) );
+ assertNull( idx.forwardLookup( "bar" ) );
+ assertNull( idx.reverseLookup( 0L ) );
+ assertNull( idx.reverseLookup( 1L ) );
+ assertEquals( 0, idx.count() );
+ }
+
+
+ @Test
+ public void testAddDropOneByOne() throws Exception
+ {
+ initIndex();
+ assertNull( idx.forwardLookup( "foo" ) );
+ assertNull( idx.forwardLookup( "bar" ) );
+ assertNull( idx.reverseLookup( 0L ) );
+ assertNull( idx.reverseLookup( 1L ) );
+
+ // test add/drop without adding any duplicates
+ idx.add( "foo", 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( "foo", idx.reverseLookup( 0L ) );
+
+ idx.drop( "foo", 0L );
+ assertNull( idx.forwardLookup( "foo" ) );
+ assertNull( idx.reverseLookup( 0L ) );
+
+ // test add/drop with duplicates but one at a time
+ idx.add( "foo", 0L );
+ idx.add( "foo", 1L );
+ idx.add( "bar", 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "bar" ) );
+ assertEquals( "bar", idx.reverseLookup( 0L ) );
+ assertEquals( "foo", idx.reverseLookup( 1L ) );
+
+ idx.drop( "bar", 0L );
+ assertEquals( 0L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( "foo", idx.reverseLookup( 0L ) );
+ assertEquals( "foo", idx.reverseLookup( 1L ) );
+ assertFalse( idx.hasValue( "bar", 0L ) );
+
+ idx.drop( "foo", 0L );
+ assertEquals( 1L, ( long ) idx.forwardLookup( "foo" ) );
+ assertEquals( "foo", idx.reverseLookup( 1L ) );
+ assertFalse( idx.hasValue( "foo", 0L ) );
+
+ idx.drop( "foo", 1L );
+ assertNull( idx.forwardLookup( "foo" ) );
+ assertNull( idx.forwardLookup( "bar" ) );
+ assertNull( idx.reverseLookup( 0L ) );
+ assertNull( idx.reverseLookup( 1L ) );
+ assertEquals( 0, idx.count() );
+ }
+
+
+ // -----------------------------------------------------------------------
+ // Miscellaneous Test Methods
+ // -----------------------------------------------------------------------
+
+
+ @Test
+ public void testNoEqualityMatching() throws Exception
+ {
+ JdbmIndex jdbmIndex = new JdbmIndex();
+
+ try
+ {
+ jdbmIndex.init( new NoEqMatchAttribute(), dbFileDir );
+ fail( "should not get here" );
+ }
+ catch( IOException e )
+ {
+ }
+ }
+
+
+ // -----------------------------------------------------------------------
+ // Failing Tests
+ // -----------------------------------------------------------------------
+
+
+ @Test
+ @Ignore ( "not working now" )
+ public void testSingleValuedAttribute() throws Exception
+ {
+ JdbmIndex jdbmIndex = new JdbmIndex();
+ jdbmIndex.init( registry.lookup( SchemaConstants.CREATORS_NAME_AT ), dbFileDir );
+ }
+}
Added: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/NoEqMatchAttribute.java
URL: http://svn.apache.org/viewvc/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/NoEqMatchAttribute.java?rev=636988&view=auto
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/NoEqMatchAttribute.java (added)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/NoEqMatchAttribute.java Thu Mar 13 21:12:45 2008
@@ -0,0 +1,151 @@
+/*
+ * 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.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.UsageEnum;
+import org.apache.directory.shared.ldap.schema.Syntax;
+import org.apache.directory.shared.ldap.schema.MatchingRule;
+
+import javax.naming.NamingException;
+
+
+/**
+ * TODO doc me!
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $$Rev$$
+ */
+public class NoEqMatchAttribute implements AttributeType
+{
+ public boolean isSingleValue()
+ {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public boolean isCanUserModify()
+ {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public boolean isCollective()
+ {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public UsageEnum getUsage()
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public AttributeType getSuperior() throws NamingException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public Syntax getSyntax() throws NamingException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public int getLength()
+ {
+ return 0; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public MatchingRule getEquality() throws NamingException
+ {
+ throw new NamingException( "Just for testing." );
+ }
+
+
+ public MatchingRule getOrdering() throws NamingException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public MatchingRule getSubstr() throws NamingException
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public boolean isAncestorOf( AttributeType descendant ) throws NamingException
+ {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public boolean isDescentantOf( AttributeType ancestor ) throws NamingException
+ {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public boolean isObsolete()
+ {
+ return false; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public String getOid()
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public String[] getNames()
+ {
+ return new String[0]; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public String getName()
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public String getDescription()
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public String getSchema()
+ {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ public void setSchema( String schemaName )
+ {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
+}