Gianmaria Clerici wrote:
I am trying to start and stop apache 0.9.2 from my JUnit tests.

This is the code I have.

At the risk of not directly answering your question and just confusing you, here's what *I* do. For unit tests in the protocol-providers (which is the same as ApacheDS in "embedded mode") I use CoreContextFactory. With CoreContextFactory you are firing up the backend without the LDAP or Kerberos protocols and you can configure everything in Java, so, in your case, you'd also remove any deps on the Spring config and XML loading. Of course, if you really need the Directory Server and not just the directory core, then the below methods don't apply.

The setUp line "load( ctx, "kerberos.ldif" );" is my own utility method for loading ldifs. Similarly, "doDelete()" is my own 10 line recursive delete dir (not commons FileUtils).

So, each setUp call results in a db and 'example' partition which is loaded fresh with kerberos principals from my ldif. I can then test against 'ctx' in my testXxx() methods.

HTH:

    public void setUp() throws Exception
    {
        Hashtable env = new Hashtable( setUpPartition() );

        env.put( Context.PROVIDER_URL, "dc=example, dc=com" );
        env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
        env.put( Context.SECURITY_AUTHENTICATION, "simple" );
        env.put( Context.SECURITY_CREDENTIALS, "secret" );
env.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.ldap.server.jndi.CoreContextFactory" );

        factory = new CoreContextFactory();

        ctx = (DirContext) factory.getInitialContext( env );

        load( ctx, "kerberos.ldif" );
    }

    private Hashtable setUpPartition()
    {
MutableStartupConfiguration config = new MutableStartupConfiguration();

MutableContextPartitionConfiguration partConfig = new MutableContextPartitionConfiguration();
        partConfig.setName( "example" );

        HashSet indices = new HashSet();
        indices.add( "dc" );
        indices.add( "ou" );
        indices.add( "objectClass" );
        indices.add( "krb5PrincipalName" );
        indices.add( "uid" );
        partConfig.setIndexedAttributes( indices );

        partConfig.setSuffix( "dc=example, dc=com" );

        LockableAttributesImpl attrs = new LockableAttributesImpl();
LockableAttributeImpl attr = new LockableAttributeImpl( "objectClass" );
        attr.add( "top" );
        attr.add( "domain" );
        attrs.put( attr );
        attrs.put( "dc", "example" );
        partConfig.setContextEntry( attrs );

        Set schemas = new HashSet();
        schemas.add( new CoreSchema() );
        schemas.add( new CosineSchema() );
        schemas.add( new ApacheSchema() );
        schemas.add( new InetorgpersonSchema() );
        schemas.add( new Krb5kdcSchema() );
        schemas.add( new SystemSchema() );
        schemas.add( new ApachednsSchema() );
        config.setBootstrapSchemas( schemas );
config.setContextPartitionConfigurations( Collections.singleton( partConfig ) );

        return config.toJndiEnvironment();
    }

    public void tearDown() throws Exception
    {
        Hashtable env = new Hashtable();

        env.put( Context.PROVIDER_URL, "ou=system" );
env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
        env.putAll( new ShutdownConfiguration().toJndiEnvironment() );
        env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
        env.put( Context.SECURITY_CREDENTIALS, "secret" );
        env.put( Context.SECURITY_AUTHENTICATION, "simple" );

        new InitialContext( env );

        context = null;
        ldifPath = null;
        loadClass = null;
        configuration = new MutableStartupConfiguration();

        doDelete( configuration.getWorkingDirectory() );
    }

Reply via email to