You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2006/11/11 08:38:12 UTC
svn commit: r473660 -
/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceIntegrationTest.java
Author: trustin
Date: Fri Nov 10 23:38:11 2006
New Revision: 473660
URL: http://svn.apache.org/viewvc?view=rev&rev=473660
Log:
DIRSERVER-780: Create an integration test that tests various conflict resolution scenarios.
http://issues.apache.org/jira/browse/DIRSERVER-780
* Added ReplicationServiceIntegrationTest with setUp and tearDown implementation
Added:
directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceIntegrationTest.java (contents, props changed)
- copied, changed from r473640, directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceTest.java
Copied: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceIntegrationTest.java (from r473640, directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceTest.java)
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceIntegrationTest.java?view=diff&rev=473660&p1=directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceTest.java&r1=473640&p2=directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceIntegrationTest.java&r2=473660
==============================================================================
--- directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceTest.java (original)
+++ directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceIntegrationTest.java Fri Nov 10 23:38:11 2006
@@ -19,23 +19,175 @@
*/
package org.apache.directory.mitosis.service;
+import java.io.File;
+import java.net.InetSocketAddress;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+
import junit.framework.TestCase;
+import org.apache.commons.io.FileUtils;
+import org.apache.directory.mitosis.common.Replica;
+import org.apache.directory.mitosis.common.ReplicaId;
+import org.apache.directory.mitosis.configuration.ReplicationConfiguration;
+import org.apache.directory.server.core.DirectoryService;
+import org.apache.directory.server.core.configuration.MutableInterceptorConfiguration;
+import org.apache.directory.server.core.configuration.MutableStartupConfiguration;
+import org.apache.directory.server.core.configuration.ShutdownConfiguration;
+import org.apache.directory.server.core.jndi.CoreContextFactory;
+import org.apache.mina.util.AvailablePortFinder;
+
/**
- * A test case for {@link ReplicationServiceTest}
+ * A test case for {@link ReplicationServiceIntegrationTest}
*
* @author The Apache Directory Project Team (dev@directory.apache.org)
* @version $Rev$, $Date$
*/
-public class ReplicationServiceTest extends TestCase
+public class ReplicationServiceIntegrationTest extends TestCase
{
+ private Map contexts = new HashMap();
protected void setUp() throws Exception
{
+ createReplicas( new String[] { "A", "B", "C" } );
}
protected void tearDown() throws Exception
{
+ destroyAllReplicas();
}
+
+ public void testModify() throws Exception
+ {
+ }
+
+ private void createReplicas(String[] names) throws Exception
+ {
+ int lastAvailablePort = 1024;
+
+ Replica[] replicas = new Replica[ names.length ];
+ for( int i = 0; i < names.length; i ++ )
+ {
+ int replicationPort = AvailablePortFinder.getNextAvailable( lastAvailablePort );
+ lastAvailablePort = replicationPort + 1;
+
+ replicas[ i ] = new Replica(
+ new ReplicaId( names[ i ] ),
+ new InetSocketAddress( "127.0.0.1", replicationPort ));
+ }
+
+ Random random = new Random();
+ String homeDirectory =
+ System.getProperty( "java.io.tmpdir" ) + File.separator +
+ "mitosis-" + Long.toHexString( random.nextLong() );
+
+ for( int i = 0; i < replicas.length; i ++ )
+ {
+ Replica replica = replicas[ i ];
+ String replicaId = replicas[ i ].getId().getId();
+ MutableStartupConfiguration ldapCfg =
+ new MutableStartupConfiguration( replicaId );
+
+ File workDir = new File( homeDirectory + File.separator + ldapCfg.getInstanceId() );
+
+ ldapCfg.setShutdownHookEnabled( false );
+ ldapCfg.setWorkingDirectory( workDir );
+
+ List interceptorCfgs = ldapCfg.getInterceptorConfigurations();
+
+ ReplicationConfiguration replicationCfg = new ReplicationConfiguration();
+ replicationCfg.setReplicaId( replica.getId() );
+ replicationCfg.setServerPort( replica.getAddress().getPort() );
+ for( int j = 0; j < replicas.length; j ++ )
+ {
+ if( replicas[ j ] != replica )
+ {
+ replicationCfg.addPeerReplica( replicas[ j ] );
+ }
+ }
+
+ ReplicationService replicationService = new ReplicationService();
+ replicationService.setConfiguration( replicationCfg );
+
+ MutableInterceptorConfiguration interceptorCfg = new MutableInterceptorConfiguration();
+ interceptorCfg.setName( "mitosis" );
+ interceptorCfg.setInterceptor( replicationService );
+
+ interceptorCfgs.add( interceptorCfg );
+
+ ldapCfg.setInterceptorConfigurations( interceptorCfgs );
+ if( workDir.exists() )
+ {
+ FileUtils.deleteDirectory( workDir );
+ }
+
+ Hashtable env = new Hashtable( ldapCfg.toJndiEnvironment() );
+ env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
+ env.put( Context.SECURITY_CREDENTIALS, "secret" );
+ env.put( Context.SECURITY_AUTHENTICATION, "simple" );
+ env.put( Context.PROVIDER_URL, "" );
+ env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
+
+ // Initialize the server instance.
+ LdapContext context = new InitialLdapContext( env, null );
+ contexts.put( replicaId, context );
+ }
+ }
+
+ private LdapContext getReplicaContext( String name ) throws Exception
+ {
+ LdapContext context = ( LdapContext ) contexts.get( name );
+ if( context == null )
+ {
+ throw new IllegalArgumentException( "No such replica: " + name );
+ }
+
+ return context;
+ }
+
+ private void destroyAllReplicas() throws Exception
+ {
+ for( Iterator i = contexts.keySet().iterator(); i.hasNext(); )
+ {
+ String replicaId = ( String ) i.next();
+ File workDir = DirectoryService.getInstance( replicaId ).getConfiguration().getStartupConfiguration().getWorkingDirectory();
+
+ Hashtable env = new Hashtable();
+ env.put( Context.PROVIDER_URL, "ou=system" );
+ env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
+ env.putAll( new ShutdownConfiguration( replicaId ).toJndiEnvironment() );
+ env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
+ env.put( Context.SECURITY_CREDENTIALS, "secret" );
+ try
+ {
+ new InitialContext( env );
+ }
+ catch( Exception e )
+ {
+ }
+
+ try
+ {
+ FileUtils.deleteDirectory( workDir );
+ }
+ catch( Exception e )
+ {
+ e.printStackTrace();
+ }
+
+ workDir.getParentFile().delete();
+
+ i.remove();
+ }
+ }
}
Propchange: directory/trunks/apacheds/mitosis/src/test/java/org/apache/directory/mitosis/service/ReplicationServiceIntegrationTest.java
------------------------------------------------------------------------------
svn:keywords = LastChangedDate LastChangedRevision LastChangedBy HeadURL Id