directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From seelm...@apache.org
Subject svn commit: r1845459 - /directory/site/trunk/content/apacheds/advanced-ug/7-embedding-apacheds.mdtext
Date Thu, 01 Nov 2018 12:26:15 GMT
Author: seelmann
Date: Thu Nov  1 12:26:15 2018
New Revision: 1845459

URL: http://svn.apache.org/viewvc?rev=1845459&view=rev
Log:
Add unit test doc, contributed by Maxim Solodovnik

Modified:
    directory/site/trunk/content/apacheds/advanced-ug/7-embedding-apacheds.mdtext

Modified: directory/site/trunk/content/apacheds/advanced-ug/7-embedding-apacheds.mdtext
URL: http://svn.apache.org/viewvc/directory/site/trunk/content/apacheds/advanced-ug/7-embedding-apacheds.mdtext?rev=1845459&r1=1845458&r2=1845459&view=diff
==============================================================================
--- directory/site/trunk/content/apacheds/advanced-ug/7-embedding-apacheds.mdtext (original)
+++ directory/site/trunk/content/apacheds/advanced-ug/7-embedding-apacheds.mdtext Thu Nov
 1 12:26:15 2018
@@ -24,4 +24,132 @@ Notice: Licensed to the Apache Software
 
 # 7 - Embedding ApacheDS in Java
 
-TODO...
+## Using ApacheDS for unit tests
+The idea is to use ADS as an embedded server for Ldap junit tests.
+We will build an environment in which it will be convenient to test
+Ldap applications.
+
+We also want to avoid launching the server for every test, as it's
+an expensive operation. We have built ApacheDS so that you can start
+a server, inject some data, launch a test, then revert the data and
+go on to another test. At the end of the tests, the server is stopped.
+
+### Prerequicites
+We will assume you have **Maven** project and using **JUNIT** for testing
+
+### First steps
+#### Maven
+You need to add following dependency to your `pom.xml`:
+
+    <dependency>
+        <groupId>org.apache.directory.server</groupId>
+        <artifactId>apacheds-test-framework</artifactId>
+        <version>2.0.0.AM25</version>
+        <scope>test</scope>
+    </dependency>
+
+Please NOTE: you need to exclude `org.apache.directory.api:api-ldap-schema-data`
+artifact from above dependency in case your project uses `org.apache.directory.api:api-all`
+
+#### Java
+Maven set-up was easy enough, let's create our first unit test:
+
+##### Resources
+Lets describe your LDAP structure in external LDIF file
+
+Create file `src/test/resources/users.ldif` with following text:
+
+    version: 1
+    dn: dc=myorg,dc=com
+    objectClass: domain
+    objectClass: top
+    dc: myorg
+    
+    dn: ou=Users,dc=myorg,dc=com
+    objectClass: organizationalUnit
+    objectClass: top
+    ou: Users
+    
+    dn: ou=Groups,dc=myorg,dc=com
+    objectClass: organizationalUnit
+    objectClass: top
+    ou: Groups
+    
+    dn: cn=Test1 Ldap,ou=Users,dc=myorg,dc=com
+    objectClass: inetOrgPerson
+    objectClass: organizationalPerson
+    objectClass: person
+    objectClass: top
+    cn: Test1 Ldap
+    sn: Ldap
+    uid: ldaptest1
+    userPassword: 12345
+
+
+##### Basic test
+
+    import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
+    import org.apache.directory.server.core.integ.FrameworkRunner;
+    import org.apache.directory.server.core.annotations.CreateDS;
+    import org.apache.directory.server.core.annotations.CreatePartition;
+    import org.apache.directory.server.annotations.CreateLdapServer;
+    import org.apache.directory.server.annotations.CreateTransport;
+    import org.apache.directory.server.core.annotations.ApplyLdifFiles;
+    import org.junit.runner.RunWith;
+    import org.junit.Test;
+    
+    @RunWith(FrameworkRunner.class)
+    @CreateDS(name = "myDS",
+        partitions = {
+            @CreatePartition(name = "test", suffix = "dc=myorg,dc=com")
+        })
+    @CreateLdapServer(transports = { @CreateTransport(protocol = "LDAP", address = "localhost")})
+    @ApplyLdifFiles({"users.ldif"})
+    public class TestLdap extends AbstractLdapTestUnit {
+        @Test
+        public void test() {
+            //do whatever you need with `ldapServer`
+        }
+    }
+
+
+As a result you can access running ApacheDS server at `ldap://localhost:<random port>`
+inside your test, or access server internals via `static ldapServer`.
+
+##### Advanced usage
+Often you need to add LDAP unit tests to already created tests, in this case you might
+not be allowed to `extend AbstractLdapTestUnit` and/or to `@RunWith(FrameworkRunner.class)`
+In this case you can use `@ClassRule`.
+Here is the example:
+
+    import org.apache.directory.server.core.annotations.CreateDS;
+    import org.apache.directory.server.core.annotations.CreatePartition;
+    import org.apache.directory.server.annotations.CreateLdapServer;
+    import org.apache.directory.server.annotations.CreateTransport;
+    import org.apache.directory.server.core.annotations.ApplyLdifFiles;
+    import org.apache.directory.server.core.integ.CreateLdapServerRule;
+    import org.junit.ClassRule;
+    import org.junit.Test;
+    
+    @CreateDS(name = "myDS",
+        partitions = {
+            @CreatePartition(name = "test", suffix = "dc=myorg,dc=com")
+        })
+    @CreateLdapServer(transports = { @CreateTransport(protocol = "LDAP", address = "localhost")})
+    @ApplyLdifFiles({"users.ldif"})
+    public class TestLdap {
+        @ClassRule
+        public static CreateLdapServerRule serverRule = new CreateLdapServerRule();
+    
+        @Test
+        public void test() {
+            //do whatever you need with `serverRule.getLdapServer()`
+        }
+    }
+
+
+As you can see the code if very much the same, the only difference: you are working with
+`serverRule.getLdapServer()` and not with `ldapServer`
+
+
+



Mime
View raw message