You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by lu...@apache.org on 2014/05/04 01:10:43 UTC
svn commit: r1592292 - in /directory/apacheds/trunk/test-framework/src:
main/java/org/apache/directory/server/core/integ/
test/java/org/apache/directory/server/core/integ/
Author: lucastheisen
Date: Sat May 3 23:10:43 2014
New Revision: 1592292
URL: http://svn.apache.org/r1592292
Log:
Added TestRule's that can be used instead of FrameworkRunner and some unit tests that show how to use them
Added:
directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateDsRule.java (with props)
directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateLdapServerRule.java (with props)
directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateDsRule.java (with props)
directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateLdapServerRule.java (with props)
Added: directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateDsRule.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateDsRule.java?rev=1592292&view=auto
==============================================================================
--- directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateDsRule.java (added)
+++ directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateDsRule.java Sat May 3 23:10:43 2014
@@ -0,0 +1,112 @@
+package org.apache.directory.server.core.integ;
+
+
+import org.apache.commons.io.FileUtils;
+import org.apache.directory.server.core.annotations.CreateDS;
+import org.apache.directory.server.core.api.DirectoryService;
+import org.apache.directory.server.core.api.changelog.Tag;
+import org.apache.directory.server.core.factory.DSAnnotationProcessor;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class CreateDsRule implements TestRule
+{
+ private static Logger LOG = LoggerFactory.getLogger( CreateDsRule.class );
+
+ private DirectoryService directoryService;
+ private CreateDsRule outerCreateDsRule;
+
+
+ public CreateDsRule()
+ {
+ }
+
+
+ public CreateDsRule( CreateDsRule outerCreateDsRule )
+ {
+ this.outerCreateDsRule = outerCreateDsRule;
+ }
+
+
+ public DirectoryService getDirectoryService()
+ {
+ return directoryService == null
+ ? ( outerCreateDsRule == null
+ ? null
+ : outerCreateDsRule.getDirectoryService() )
+ : directoryService;
+ }
+
+
+ @Override
+ public Statement apply( final Statement base, final Description description )
+ {
+ final CreateDS createDs = description.getAnnotation( CreateDS.class );
+ if ( createDs == null )
+ {
+ final DirectoryService directoryService = getDirectoryService();
+ if ( directoryService != null && directoryService.getChangeLog().isEnabled() )
+ {
+ return new Statement()
+ {
+ @Override
+ public void evaluate() throws Throwable
+ {
+ Tag tag = directoryService.getChangeLog().tag();
+ DSAnnotationProcessor.applyLdifs( description, directoryService );
+ LOG.debug( "Tagged change log: {}", tag );
+ try
+ {
+ base.evaluate();
+ }
+ finally
+ {
+ if ( directoryService.getChangeLog().getCurrentRevision() > tag.getRevision() )
+ {
+ LOG.debug( "Reverting to tag: {}", tag );
+ directoryService.revert( tag.getRevision() );
+ }
+ else
+ {
+ LOG.debug( "No changes made, nothing to revert" );
+ }
+ }
+ }
+ };
+ }
+ else
+ {
+ LOG.trace( "no @CreateDS and no outer @CreateDS on: {}", description );
+ return base;
+ }
+ }
+ else
+ {
+ return new Statement()
+ {
+ @Override
+ public void evaluate() throws Throwable
+ {
+ LOG.trace( "Creating directory service" );
+ directoryService = DSAnnotationProcessor.getDirectoryService( description );
+ DSAnnotationProcessor.applyLdifs( description, directoryService );
+
+ try
+ {
+ base.evaluate();
+ }
+ finally
+ {
+ LOG.trace( "Shutting down directory service" );
+ directoryService.shutdown();
+ FileUtils.deleteDirectory( directoryService.getInstanceLayout().getInstanceDirectory() );
+ }
+ }
+ };
+ }
+ }
+}
Propchange: directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateDsRule.java
------------------------------------------------------------------------------
svn:executable = *
Added: directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateLdapServerRule.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateLdapServerRule.java?rev=1592292&view=auto
==============================================================================
--- directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateLdapServerRule.java (added)
+++ directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateLdapServerRule.java Sat May 3 23:10:43 2014
@@ -0,0 +1,105 @@
+package org.apache.directory.server.core.integ;
+
+
+import org.apache.directory.server.annotations.CreateLdapServer;
+import org.apache.directory.server.core.api.DirectoryService;
+import org.apache.directory.server.factory.ServerAnnotationProcessor;
+import org.apache.directory.server.ldap.LdapServer;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class CreateLdapServerRule implements TestRule
+{
+ private static Logger LOG = LoggerFactory.getLogger( CreateLdapServerRule.class );
+
+ private CreateDsRule createDsRule;
+ private LdapServer ldapServer;
+ private CreateLdapServerRule outerCreateLdapServerRule;
+
+
+ public CreateLdapServerRule( CreateDsRule createDsRule )
+ {
+ this( createDsRule, null );
+ }
+
+
+ public CreateLdapServerRule( CreateDsRule createDsRule, CreateLdapServerRule createLdapServerRule )
+ {
+ this.createDsRule = createDsRule;
+ this.outerCreateLdapServerRule = createLdapServerRule;
+ }
+
+
+ public LdapServer getLdapServer()
+ {
+ return ldapServer == null
+ ? ( outerCreateLdapServerRule == null ? null : outerCreateLdapServerRule.getLdapServer() )
+ : ldapServer;
+ }
+
+
+ @Override
+ public Statement apply( final Statement base, final Description description )
+ {
+ final CreateLdapServer createLdapServer = description.getAnnotation( CreateLdapServer.class );
+ if ( createLdapServer == null )
+ {
+ return new Statement()
+ {
+ @Override
+ public void evaluate() throws Throwable
+ {
+ LdapServer ldapServer = getLdapServer();
+ DirectoryService directoryService = createDsRule.getDirectoryService();
+ if ( ldapServer != null && directoryService != ldapServer.getDirectoryService() ) {
+ LOG.trace( "Changing to new directory service" );
+ DirectoryService oldDirectoryService = ldapServer.getDirectoryService();
+ ldapServer.setDirectoryService( directoryService );
+
+ try
+ {
+ base.evaluate();
+ }
+ finally
+ {
+ LOG.trace( "Reverting to old directory service" );
+ ldapServer.setDirectoryService( oldDirectoryService );
+ }
+
+ }
+ else {
+ LOG.trace( "no @CreateLdapServer on: {}", description );
+ base.evaluate();
+ }
+ }
+ };
+ }
+ else
+ {
+ return new Statement()
+ {
+ @Override
+ public void evaluate() throws Throwable
+ {
+ LOG.trace( "Creating ldap server" );
+ ldapServer = ServerAnnotationProcessor.createLdapServer( description,
+ createDsRule.getDirectoryService() );
+
+ try
+ {
+ base.evaluate();
+ }
+ finally
+ {
+ LOG.trace( "Stopping ldap server" );
+ ldapServer.stop();
+ }
+ }
+ };
+ }
+ }
+}
Propchange: directory/apacheds/trunk/test-framework/src/main/java/org/apache/directory/server/core/integ/CreateLdapServerRule.java
------------------------------------------------------------------------------
svn:executable = *
Added: directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateDsRule.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateDsRule.java?rev=1592292&view=auto
==============================================================================
--- directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateDsRule.java (added)
+++ directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateDsRule.java Sat May 3 23:10:43 2014
@@ -0,0 +1,146 @@
+package org.apache.directory.server.core.integ;
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import org.apache.directory.api.ldap.model.entry.Entry;
+import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.server.core.annotations.ApplyLdifs;
+import org.apache.directory.server.core.annotations.ContextEntry;
+import org.apache.directory.server.core.annotations.CreateDS;
+import org.apache.directory.server.core.annotations.CreateIndex;
+import org.apache.directory.server.core.annotations.CreatePartition;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TestRule;
+
+
+@CreateDS(name = "classDS",
+ enableChangeLog = true,
+ partitions =
+ {
+ @CreatePartition(
+ name = "example",
+ suffix = "dc=example,dc=com",
+ contextEntry = @ContextEntry(
+ entryLdif =
+ "dn: dc=example,dc=com\n" +
+ "objectClass: domain\n" +
+ "objectClass: top\n" +
+ "dc: example\n\n"
+ ),
+ indexes =
+ {
+ @CreateIndex(attribute = "objectClass"),
+ @CreateIndex(attribute = "dc"),
+ @CreateIndex(attribute = "ou")
+ }
+ )
+ })
+@ApplyLdifs(
+ {
+ "dn: cn=class,ou=system",
+ "objectClass: person",
+ "cn: class",
+ "sn: sn_class"
+ })
+public class TestCreateDsRule
+{
+ @ClassRule
+ public static CreateDsRule classCreateDsRule = new CreateDsRule();
+
+ public CreateDsRule createDsRule = new CreateDsRule( classCreateDsRule );
+ @Rule
+ public TestRule ruleChain = RuleChain.outerRule( createDsRule );
+
+
+ @Test
+ @ApplyLdifs(
+ {
+ "dn: cn=classDsOnly,ou=system",
+ "objectClass: person",
+ "cn: classDsOnly",
+ "sn: sn_classDsOnly"
+ })
+ public void testClassDsOnly()
+ {
+ assertEquals( classCreateDsRule.getDirectoryService(), createDsRule.getDirectoryService() );
+ try
+ {
+ Dn dn = new Dn( "cn=class,ou=system" );
+ Entry entry = createDsRule.getDirectoryService().getAdminSession().lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "class", entry.get( "cn" ).get().getValue() );
+
+ dn = new Dn( "cn=classDsOnly,ou=system" );
+ entry = createDsRule.getDirectoryService().getAdminSession().lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "classDsOnly", entry.get( "cn" ).get().getValue() );
+ }
+ catch ( LdapException e )
+ {
+ fail( e.getMessage() );
+ }
+ }
+
+
+ @Test
+ @CreateDS(name = "methodDS",
+ enableChangeLog = true)
+ @ApplyLdifs(
+ {
+ "dn: cn=classAndMethodDs,ou=system",
+ "objectClass: person",
+ "cn: classAndMethodDs",
+ "sn: sn_classAndMethodDs"
+ })
+ public void testClassAndMethodDs()
+ {
+ assertNotEquals( classCreateDsRule.getDirectoryService(), createDsRule.getDirectoryService() );
+ try
+ {
+ Dn dn = new Dn( "cn=classAndMethodDs,ou=system" );
+ Entry entry = createDsRule.getDirectoryService().getAdminSession().lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "classAndMethodDs", entry.get( "cn" ).get().getValue() );
+ }
+ catch ( LdapException e )
+ {
+ fail( e.getMessage() );
+ }
+
+ try
+ {
+ Dn dn = new Dn( "cn=class,ou=system" );
+ Entry entry = createDsRule.getDirectoryService().getAdminSession().lookup( dn );
+ assertNull( entry );
+ }
+ catch ( LdapNoSuchObjectException e )
+ {
+ // expected
+ }
+ catch ( LdapException e )
+ {
+ fail( e.getClass().getName() );
+ }
+
+ try {
+ Dn dn = new Dn( "cn=class,ou=system" );
+ Entry entry = classCreateDsRule.getDirectoryService().getAdminSession().lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "class", entry.get( "cn" ).get().getValue() );
+ }
+ catch ( LdapException e )
+ {
+ fail( e.getClass().getName() );
+ }
+ }
+}
Propchange: directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateDsRule.java
------------------------------------------------------------------------------
svn:executable = *
Added: directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateLdapServerRule.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateLdapServerRule.java?rev=1592292&view=auto
==============================================================================
--- directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateLdapServerRule.java (added)
+++ directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateLdapServerRule.java Sat May 3 23:10:43 2014
@@ -0,0 +1,241 @@
+package org.apache.directory.server.core.integ;
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.apache.directory.api.ldap.model.entry.Entry;
+import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.api.ldap.model.exception.LdapNoSuchObjectException;
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.ldap.client.api.LdapNetworkConnection;
+import org.apache.directory.server.annotations.CreateLdapServer;
+import org.apache.directory.server.annotations.CreateTransport;
+import org.apache.directory.server.core.annotations.ApplyLdifs;
+import org.apache.directory.server.core.annotations.ContextEntry;
+import org.apache.directory.server.core.annotations.CreateDS;
+import org.apache.directory.server.core.annotations.CreateIndex;
+import org.apache.directory.server.core.annotations.CreatePartition;
+import org.apache.directory.server.core.api.DirectoryService;
+import org.apache.directory.server.ldap.LdapServer;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TestRule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+@CreateDS(name = "classDS",
+ enableChangeLog = true,
+ partitions =
+ {
+ @CreatePartition(
+ name = "example",
+ suffix = "dc=example,dc=com",
+ contextEntry = @ContextEntry(
+ entryLdif =
+ "dn: dc=example,dc=com\n" +
+ "objectClass: domain\n" +
+ "objectClass: top\n" +
+ "dc: example\n\n"
+ ),
+ indexes =
+ {
+ @CreateIndex(attribute = "objectClass"),
+ @CreateIndex(attribute = "dc"),
+ @CreateIndex(attribute = "ou")
+ }
+ )
+ })
+@CreateLdapServer(
+ transports =
+ {
+ @CreateTransport(protocol = "LDAP")
+ })
+@ApplyLdifs(
+ {
+ "dn: cn=class,ou=system",
+ "objectClass: person",
+ "cn: class",
+ "sn: sn_class"
+})
+public class TestCreateLdapServerRule
+{
+ private static Logger LOG = LoggerFactory.getLogger( TestCreateLdapServerRule.class );
+ public static CreateDsRule classCreateDsRule = new CreateDsRule();
+ public static CreateLdapServerRule classCreateLdapServerRule = new CreateLdapServerRule(
+ classCreateDsRule );
+ @ClassRule
+ public static TestRule classRuleChain = RuleChain.outerRule( classCreateDsRule )
+ .around( classCreateLdapServerRule );
+
+ public CreateDsRule createDsRule = new CreateDsRule( classCreateDsRule );
+ public CreateLdapServerRule createLdapServerRule = new CreateLdapServerRule(
+ createDsRule, classCreateLdapServerRule );
+ @Rule
+ public TestRule ruleChain = RuleChain.outerRule( createDsRule )
+ .around( createLdapServerRule );
+
+
+ @Test
+ @CreateDS(name = "methodDS",
+ enableChangeLog = true)
+ @ApplyLdifs(
+ {
+ "dn: cn=methodDs,ou=system",
+ "objectClass: person",
+ "cn: methodDs",
+ "sn: sn_methodDs"
+ })
+ public void testMethodDs()
+ {
+ assertEquals( createLdapServerRule.getLdapServer(), classCreateLdapServerRule.getLdapServer() );
+
+ LdapConnection ldapConnection = null;
+ try
+ {
+ LdapServer ldapServer = createLdapServerRule.getLdapServer();
+ ldapServer.getPort();
+ ldapConnection = new LdapNetworkConnection( "localhost", ldapServer.getPort() );
+ ldapConnection.connect();
+ ldapConnection.bind( "uid=admin,ou=system", "secret" );
+
+ Dn dn = new Dn( "cn=methodDs,ou=system" );
+ Entry entry = ldapConnection.lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "methodDs", entry.get( "cn" ).get().getValue() );
+
+ try
+ {
+ dn = new Dn( "cn=class,ou=system" );
+ entry = ldapConnection.lookup( dn );
+ assertNull( entry );
+ }
+ catch ( LdapNoSuchObjectException e )
+ {
+ // expected
+ }
+ }
+ catch ( LdapException e )
+ {
+ fail( e.getMessage() );
+ }
+ finally
+ {
+ if ( ldapConnection != null )
+ {
+ try
+ {
+ ldapConnection.close();
+ }
+ catch ( IOException e )
+ {
+ // who cares!
+ }
+ }
+ }
+ }
+
+
+ @Test
+ @CreateLdapServer(
+ transports =
+ {
+ @CreateTransport(protocol = "LDAP")
+ })
+ public void testMethodLdapServer()
+ {
+ assertNotEquals( createLdapServerRule.getLdapServer(), classCreateLdapServerRule.getLdapServer() );
+ assertNotEquals( createLdapServerRule.getLdapServer().getPort(),
+ classCreateLdapServerRule.getLdapServer().getPort() );
+
+ LdapConnection ldapConnection = null;
+ try
+ {
+ LdapServer ldapServer = createLdapServerRule.getLdapServer();
+ ldapServer.getPort();
+ ldapConnection = new LdapNetworkConnection( "localhost", ldapServer.getPort() );
+ ldapConnection.connect();
+ ldapConnection.bind( "uid=admin,ou=system", "secret" );
+
+ Dn dn = new Dn( "cn=class,ou=system" );
+ Entry entry = ldapConnection.lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "class", entry.get( "cn" ).get().getValue() );
+ }
+ catch ( LdapException e )
+ {
+ fail( e.getMessage() );
+ }
+ finally
+ {
+ if ( ldapConnection != null )
+ {
+ try
+ {
+ ldapConnection.close();
+ }
+ catch ( IOException e )
+ {
+ // who cares!
+ }
+ }
+ }
+ }
+
+
+ @Test
+ public void testNetworkConnection()
+ {
+ assertEquals( classCreateDsRule.getDirectoryService(), createDsRule.getDirectoryService() );
+ assertEquals( classCreateLdapServerRule.getLdapServer(), createLdapServerRule.getLdapServer() );
+ LdapServer ldapServer = createLdapServerRule.getLdapServer();
+ DirectoryService directoryService = ldapServer.getDirectoryService();
+ assertEquals( classCreateDsRule.getDirectoryService(), directoryService );
+
+ LdapConnection ldapConnection = null;
+ try
+ {
+ Dn dn = new Dn( "cn=class,ou=system" );
+ Entry entry = directoryService.getAdminSession().lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "class", entry.get( "cn" ).get().getValue() );
+
+ LOG.debug( "getting network connection" );
+ ldapServer.getPort();
+ ldapConnection = new LdapNetworkConnection( "localhost", ldapServer.getPort() );
+ ldapConnection.connect();
+ ldapConnection.bind( "uid=admin,ou=system", "secret" );
+
+ entry = ldapConnection.lookup( dn );
+ assertNotNull( entry );
+ assertEquals( "class", entry.get( "cn" ).get().getValue() );
+ }
+ catch ( LdapException e )
+ {
+ fail( e.getMessage() );
+ }
+ finally
+ {
+ if ( ldapConnection != null )
+ {
+ try
+ {
+ ldapConnection.close();
+ }
+ catch ( IOException e )
+ {
+ // who cares!
+ }
+ }
+ }
+ }
+}
Propchange: directory/apacheds/trunk/test-framework/src/test/java/org/apache/directory/server/core/integ/TestCreateLdapServerRule.java
------------------------------------------------------------------------------
svn:executable = *