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/18 05:35:14 UTC
svn commit: r638209 - in
/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src:
main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/
test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/
Author: akarasulu
Date: Mon Mar 17 21:35:05 2008
New Revision: 638209
URL: http://svn.apache.org/viewvc?rev=638209&view=rev
Log:
adding start of JdbmStore test cases and fixing some minor issues found
Added:
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
Modified:
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
Modified: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.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/JdbmStore.java?rev=638209&r1=638208&r2=638209&view=diff
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java (original)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java Mon Mar 17 21:35:05 2008
@@ -46,6 +46,7 @@
import org.apache.directory.shared.ldap.util.AttributeUtils;
import org.apache.directory.shared.ldap.util.NamespaceTools;
import org.apache.directory.shared.ldap.NotImplementedException;
+import org.apache.directory.shared.ldap.MultiException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -70,7 +71,7 @@
/** static logger */
private static final Logger LOG = LoggerFactory.getLogger( JdbmStore.class );
/** The default cache size is set to 10 000 objects */
- private static final int DEFAULT_CACHE_SIZE = 10000;
+ static final int DEFAULT_CACHE_SIZE = 10000;
/** the JDBM record manager used by this database */
@@ -138,7 +139,6 @@
private ServerEntry contextEntry;
private String suffixDn;
- private boolean enableOptimizer;
private int cacheSize = DEFAULT_CACHE_SIZE;
private String name;
@@ -220,19 +220,6 @@
}
- public void setEnableOptimizer( boolean enableOptimizer )
- {
- protect( "enableOptimizer" );
- this.enableOptimizer = enableOptimizer;
- }
-
-
- public boolean isEnableOptimizer()
- {
- return enableOptimizer;
- }
-
-
public void setCacheSize( int cacheSize )
{
protect( "cacheSize" );
@@ -448,7 +435,7 @@
/**
* Close the parttion : we have to close all the userIndices and the master table.
*/
- public synchronized void destroy()
+ public synchronized void destroy() throws Exception
{
LOG.debug( "destroy() called on store for {}", this.suffixDn );
@@ -459,41 +446,8 @@
List<JdbmIndex> array = new ArrayList<JdbmIndex>();
array.addAll( userIndices.values() );
-
- if ( null != ndnIdx )
- {
- array.add( ndnIdx );
- }
-
- if ( null != updnIdx )
- {
- array.add( updnIdx );
- }
-
- if ( null != aliasIdx )
- {
- array.add( aliasIdx );
- }
-
- if ( null != oneAliasIdx )
- {
- array.add( oneAliasIdx );
- }
-
- if ( null != subAliasIdx )
- {
- array.add( subAliasIdx );
- }
-
- if ( null != hierarchyIdx )
- {
- array.add( hierarchyIdx );
- }
-
- if ( null != existanceIdx )
- {
- array.add( existanceIdx );
- }
+ array.addAll( systemIndices.values() );
+ MultiException errors = new MultiException( "Errors encountered on destroy()" );
for ( JdbmIndex index:array )
{
@@ -505,6 +459,7 @@
catch ( Throwable t )
{
LOG.error( "Failed to close an index.", t );
+ errors.addThrowable( t );
}
}
@@ -516,6 +471,7 @@
catch ( Throwable t )
{
LOG.error( "Failed to close the master.", t );
+ errors.addThrowable( t );
}
try
@@ -526,6 +482,12 @@
catch ( Throwable t )
{
LOG.error( "Failed to close the record manager", t );
+ errors.addThrowable( t );
+ }
+
+ if ( errors.size() > 0 )
+ {
+ throw errors;
}
initialized = false;
@@ -726,24 +688,9 @@
{
return userIndices.get( id );
}
- else
- {
- String name;
-
- try
- {
- name = oidRegistry.getPrimaryName( id );
- }
- catch ( NamingException e )
- {
- String msg = "Failed to resolve primary name for " + id + " in user index lookup";
- LOG.error( msg, e );
- throw new IndexNotFoundException( msg, id, e );
- }
-
- throw new IndexNotFoundException( "A user index on attribute " + id + " ("
- + name + ") does not exist!" );
- }
+
+ throw new IndexNotFoundException( "A user index on attribute " + id + " ("
+ + name + ") does not exist!" );
}
@@ -764,24 +711,9 @@
{
return systemIndices.get( id );
}
- else
- {
- String name;
-
- try
- {
- name = oidRegistry.getPrimaryName( id );
- }
- catch ( NamingException e )
- {
- String msg = "Failed to resolve primary name for " + id + " in user index lookup";
- LOG.error( msg, e );
- throw new IndexNotFoundException( msg, id, e );
- }
-
- throw new IndexNotFoundException( "A system index on attribute " + id + " ("
- + name + ") does not exist!" );
- }
+
+ throw new IndexNotFoundException( "A system index on attribute " + id + " ("
+ + name + ") does not exist!" );
}
Added: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.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/JdbmStoreTest.java?rev=638209&view=auto
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java (added)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java Mon Mar 17 21:35:05 2008
@@ -0,0 +1,299 @@
+/*
+ * 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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.junit.Before;
+import org.junit.After;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.apache.commons.io.FileUtils;
+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.entry.DefaultServerEntry;
+import org.apache.directory.server.core.partition.impl.btree.IndexNotFoundException;
+import org.apache.directory.server.constants.CoreSchemaConstants;
+import org.apache.directory.server.constants.ApacheSchemaConstants;
+import org.apache.directory.server.constants.SystemSchemaConstants;
+import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
+
+import java.io.File;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Iterator;
+
+
+/**
+ * Unit test cases for JdbmStore
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $$Rev$$
+ */
+public class JdbmStoreTest
+{
+ private static final Logger LOG = LoggerFactory.getLogger( JdbmStoreTest.class.getSimpleName() );
+
+ File wkdir;
+ JdbmStore store;
+ Registries registries = null;
+ AttributeTypeRegistry attributeRegistry;
+
+
+ public JdbmStoreTest() throws Exception
+ {
+ // setup the standard registries
+ BootstrapSchemaLoader loader = new BootstrapSchemaLoader();
+ OidRegistry oidRegistry = new DefaultOidRegistry();
+ 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 );
+ attributeRegistry = registries.getAttributeTypeRegistry();
+ }
+
+
+ @Before
+ public void createStore() throws Exception
+ {
+ destryStore();
+
+ // setup the working directory for the store
+ wkdir = File.createTempFile( getClass().getSimpleName(), "db" );
+ wkdir.delete();
+ wkdir = new File( wkdir.getParentFile(), getClass().getSimpleName() );
+ wkdir.mkdirs();
+
+ // initialize the store
+ store = new JdbmStore();
+ store.setName( "example" );
+ store.setCacheSize( 10 );
+ store.setSuffixDn( "dc=example,dc=com" );
+ store.setWorkingDirectory( wkdir );
+ store.setSyncOnWrite( false );
+
+ DefaultServerEntry contextEntry = new DefaultServerEntry( registries,
+ new LdapDN( "dc=example,dc=com" ) );
+ contextEntry.add( "objectClass", "domain" );
+ contextEntry.add( "dc", "example" );
+ store.setContextEntry( contextEntry );
+ store.addIndex( new JdbmIndex( SchemaConstants.OU_AT_OID ) );
+ store.addIndex( new JdbmIndex( SchemaConstants.UID_AT_OID ) );
+ store.init( registries.getOidRegistry(), attributeRegistry );
+ LOG.debug( "Created new store" );
+ }
+
+
+ @After
+ public void destryStore() throws Exception
+ {
+ if ( store != null )
+ {
+ store.destroy();
+ }
+
+ store = null;
+ if ( wkdir != null )
+ {
+ FileUtils.deleteDirectory( wkdir );
+ }
+
+ wkdir = null;
+ }
+
+
+ @Test
+ public void testSimplePropertiesUnlocked() throws Exception
+ {
+ JdbmStore store = new JdbmStore();
+
+ assertNull( store.getAliasIndex() );
+ store.setAliasIndex( new JdbmIndex<String>( "alias" ) );
+ assertNotNull( store.getAliasIndex() );
+
+ assertEquals( JdbmStore.DEFAULT_CACHE_SIZE, store.getCacheSize() );
+ store.setCacheSize( 24 );
+ assertEquals( 24, store.getCacheSize() );
+
+ assertNull( store.getContextEntry() );
+ store.setContextEntry( new DefaultServerEntry( registries, new LdapDN() ) );
+ assertNotNull( store.getContextEntry() );
+
+ assertNull( store.getExistanceIndex() );
+ store.setExistanceIndex( new JdbmIndex<String>( "existence" ) );
+ assertNotNull( store.getExistanceIndex() );
+
+ assertNull( store.getHierarchyIndex() );
+ store.setHierarchyIndex( new JdbmIndex<Long>( "hierarchy" ) );
+ assertNotNull( store.getHierarchyIndex() );
+
+ assertNull( store.getName() );
+ store.setName( "foo" );
+ assertEquals( "foo", store.getName() );
+
+ assertNull( store.getNdnIndex() );
+ store.setNdnIndex( new JdbmIndex<String>( "ndn" ) );
+ assertNotNull( store.getNdnIndex() );
+
+ assertNull( store.getOneAliasIndex() );
+ store.setOneAliasIndex( new JdbmIndex<Long>( "oneAlias" ) );
+ assertNotNull( store.getNdnIndex() );
+
+ assertNull( store.getSubAliasIndex() );
+ store.setSubAliasIndex( new JdbmIndex<Long>( "subAlias" ) );
+ assertNotNull( store.getSubAliasIndex() );
+
+ assertNull( store.getSuffixDn() );
+ store.setSuffixDn( "dc=example,dc=com" );
+ assertEquals( "dc=example,dc=com", store.getSuffixDn() );
+
+ assertNull( store.getUpdnIndex() );
+ store.setUpdnIndex( new JdbmIndex<String>( "updn" ) );
+ assertNotNull( store.getUpdnIndex() );
+
+ assertNull( store.getUpSuffix() );
+ assertNull( store.getSuffix() );
+
+ assertEquals( 0, store.getUserIndices().size() );
+ Set<JdbmIndex> set = new HashSet<JdbmIndex>();
+ set.add( new JdbmIndex( "foo" ) );
+ store.setUserIndices( set );
+ assertEquals( set.size(), store.getUserIndices().size() );
+
+ assertNull( store.getWorkingDirectory() );
+ store.setWorkingDirectory( new File( "." ) );
+ assertEquals( new File( "." ), store.getWorkingDirectory() );
+
+ assertFalse( store.isInitialized() );
+ assertTrue( store.isSyncOnWrite() );
+ store.setSyncOnWrite( false );
+ assertFalse( store.isSyncOnWrite() );
+
+ store.sync();
+ store.destroy();
+ }
+
+
+ @Test
+ public void testSimplePropertiesLocked() throws Exception
+ {
+ assertNotNull( store.getAliasIndex() );
+ try { store.setAliasIndex( new JdbmIndex<String>( "alias" ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertEquals( 10, store.getCacheSize() );
+ try { store.setCacheSize( 24 ); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getContextEntry() );
+ try { store.setContextEntry( new DefaultServerEntry( registries, new LdapDN() ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getExistanceIndex() );
+ try { store.setExistanceIndex( new JdbmIndex<String>( "existence" ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getHierarchyIndex() );
+ try { store.setHierarchyIndex( new JdbmIndex<Long>( "hierarchy" ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getName() );
+ try { store.setName( "foo" ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getNdnIndex() );
+ try { store.setNdnIndex( new JdbmIndex<String>( "ndn" ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getOneAliasIndex() );
+ try { store.setOneAliasIndex( new JdbmIndex<Long>( "oneAlias" ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getSubAliasIndex() );
+ try { store.setSubAliasIndex( new JdbmIndex<Long>( "subAlias" ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getSuffixDn() );
+ try { store.setSuffixDn( "dc=example,dc=com" ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertNotNull( store.getUpdnIndex() );
+ try { store.setUpdnIndex( new JdbmIndex<String>( "updn" ) ); fail(); }
+ catch( IllegalStateException e ) {}
+ Iterator<String> systemIndices = store.systemIndices();
+ for ( int ii = 0; ii < 7; ii++ )
+ {
+ assertTrue( systemIndices.hasNext() );
+ assertNotNull( systemIndices.next() );
+ }
+ assertFalse( systemIndices.hasNext() );
+ assertNotNull( store.getSystemIndex( ApacheSchemaConstants.APACHE_ALIAS_AT ) );
+ try { store.getSystemIndex( "bogus" ); fail(); }
+ catch ( IndexNotFoundException e ) {}
+ try { store.getSystemIndex( "dc" ); fail(); }
+ catch ( IndexNotFoundException e ) {}
+
+ assertNotNull( store.getUpSuffix() );
+ assertNotNull( store.getSuffix() );
+
+ assertEquals( 2, store.getUserIndices().size() );
+ assertFalse( store.hasUserIndexOn( "dc" ) );
+ assertTrue( store.hasUserIndexOn( SchemaConstants.OU_AT ) );
+ assertTrue( store.hasSystemIndexOn( ApacheSchemaConstants.APACHE_ALIAS_AT ) );
+ Iterator<String> userIndices = store.userIndices();
+ assertTrue( userIndices.hasNext() );
+ assertNotNull( userIndices.next() );
+ assertTrue( userIndices.hasNext() );
+ assertNotNull( userIndices.next() );
+ assertFalse( userIndices.hasNext() );
+ assertNotNull( store.getUserIndex( SchemaConstants.OU_AT ) );
+ try { store.getUserIndex( "bogus" ); fail(); }
+ catch ( IndexNotFoundException e ) {}
+ try { store.getUserIndex( "dc" ); fail(); }
+ catch ( IndexNotFoundException e ) {}
+
+ assertNotNull( store.getWorkingDirectory() );
+ try { store.setWorkingDirectory( new File( "." ) ); fail(); }
+ catch( IllegalStateException e ) {}
+
+ assertTrue( store.isInitialized() );
+ assertFalse( store.isSyncOnWrite() );
+
+ store.sync();
+ }
+
+
+ @Test
+ public void testEmptyStore() throws Exception
+ {
+ LdapDN dn = new LdapDN( "dc=example,dc=com" );
+ dn.normalize( attributeRegistry.getNormalizerMapping() );
+ assertEquals( 1L, ( long ) store.getEntryId( dn.toNormName() ) );
+ }
+}