Patch from Jasper on July 25.
This commit is contained in:
@@ -1,95 +1,95 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<project name="spring-ldap-odm" default="dist">
|
||||
|
||||
<property file="build.properties" />
|
||||
<property file="project.properties" />
|
||||
<property file="${common.build.dir}/build.properties" />
|
||||
<property file="${common.build.dir}/project.properties" />
|
||||
<property file="${user.home}/build.properties" />
|
||||
|
||||
<property name="project.title" value="Spring LDAP ODM" />
|
||||
<property name="project.package" value="org.springframework.ldap.odm" />
|
||||
|
||||
<property name="ldap.server" value="127.0.0.1" />
|
||||
<property name="ldap.user" value=""cn=Manager,dc=jayway,dc=se"" />
|
||||
<property name="ldap.password" value="secret" />
|
||||
|
||||
<!-- Cannot import common-targets since itest-targets already does -->
|
||||
<import file="${common.build.dir}/itest-targets.xml" />
|
||||
<import file="${common.build.dir}/doc-targets.xml" />
|
||||
<import file="${common.build.dir}/clover-targets.xml" />
|
||||
<import file="${common.build.dir}/jdiff-targets.xml" />
|
||||
|
||||
<!-- extend common-build with source capability -->
|
||||
<target name="build.prepare.make.config.dirs" depends="common-targets.build.prepare.make.config.dirs">
|
||||
<mkdir dir="${lib.dir}/source" />
|
||||
</target>
|
||||
|
||||
<!--
|
||||
Overridden to create test report and run integration tests as well.
|
||||
-->
|
||||
<target name="tests" depends="tests-local,test-report,itests,itest-report" description="Runs all tests, first local then server (if any)" />
|
||||
|
||||
|
||||
<!--
|
||||
Overridden only to have the errorproperty and failureproperty attributes
|
||||
added to the junit task.
|
||||
-->
|
||||
<!-- Runs the local unit tests. -->
|
||||
<target name="tests-local" depends="tests.prepare" description="Run all local tests">
|
||||
<!-- for the time being we just halt on failure, since these are
|
||||
local tests and there is no server to shut down, etc. But if
|
||||
we want to optionally run all tests and report on the whole
|
||||
batch, then we need to set a failure property as in the server
|
||||
tests. -->
|
||||
<junit forkmode="perBatch" printsummary="yes" haltonfailure="no" haltonerror="no" dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true">
|
||||
<jvmarg value="${unitvm}" />
|
||||
<jvmarg value="-Djava.security.auth.login.config=${target.testclasses.dir}/auth.conf" />
|
||||
<jvmarg value="${test.arguments}" />
|
||||
<classpath>
|
||||
<pathelement location="${target.classes.dir}" />
|
||||
<pathelement location="${target.testclasses.dir}" />
|
||||
<pathelement location="${target.genclasses.dir}" />
|
||||
<path refid="test.classpath" />
|
||||
</classpath>
|
||||
|
||||
<formatter type="plain" />
|
||||
<formatter type="xml" />
|
||||
|
||||
<batchtest fork="yes" todir="${target.testresults.dir}">
|
||||
<fileset dir="${target.testclasses.dir}" includes="${test.includes}" excludes="${test.excludes}" />
|
||||
</batchtest>
|
||||
</junit>
|
||||
|
||||
</target>
|
||||
|
||||
<property name="target.testresults.html.dir" location="${target.testresults.dir}/html" />
|
||||
|
||||
<!-- Generate the unit test report -->
|
||||
<target name="test-report" depends="build.prepare" description="Generate HTML report of unit test results">
|
||||
<delete dir="${target.testresults.html.dir}" />
|
||||
<mkdir dir="${target.testresults.html.dir}" />
|
||||
<junitreport todir="${target.testresults.html.dir}">
|
||||
<fileset dir="${target.testresults.dir}">
|
||||
<include name="TEST-*.xml" />
|
||||
</fileset>
|
||||
<report format="frames" todir="${target.testresults.html.dir}" />
|
||||
</junitreport>
|
||||
<echo>
|
||||
Unit test report has been generated.
|
||||
The HTML report is ${target.testresults.html.dir}/index.html
|
||||
</echo>
|
||||
<fail if="tests.failed" message="Unit tests failed" />
|
||||
</target>
|
||||
|
||||
<target name="clover-report" depends="clover.instrument, tests-local" description="Produce a test coverage report">
|
||||
<clover-report>
|
||||
<current outfile="${target.clover.dir}/coverage.xml" />
|
||||
<current outfile="${target.clover.dir}/html">
|
||||
<format type="html" />
|
||||
</current>
|
||||
</clover-report>
|
||||
</target>
|
||||
|
||||
</project>
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<project name="spring-ldap-odm" default="dist">
|
||||
|
||||
<property file="build.properties" />
|
||||
<property file="project.properties" />
|
||||
<property file="${common.build.dir}/build.properties" />
|
||||
<property file="${common.build.dir}/project.properties" />
|
||||
<property file="${user.home}/build.properties" />
|
||||
|
||||
<property name="project.title" value="Spring LDAP ODM" />
|
||||
<property name="project.package" value="org.springframework.ldap.odm" />
|
||||
|
||||
<property name="ldap.server" value="127.0.0.1" />
|
||||
<property name="ldap.user" value=""cn=Manager,dc=jayway,dc=se"" />
|
||||
<property name="ldap.password" value="secret" />
|
||||
|
||||
<!-- Cannot import common-targets since itest-targets already does -->
|
||||
<import file="${common.build.dir}/itest-targets.xml" />
|
||||
<import file="${common.build.dir}/doc-targets.xml" />
|
||||
<import file="${common.build.dir}/clover-targets.xml" />
|
||||
<import file="${common.build.dir}/jdiff-targets.xml" />
|
||||
|
||||
<!-- extend common-build with source capability -->
|
||||
<target name="build.prepare.make.config.dirs" depends="common-targets.build.prepare.make.config.dirs">
|
||||
<mkdir dir="${lib.dir}/source" />
|
||||
</target>
|
||||
|
||||
<!--
|
||||
Overridden to create test report and run integration tests as well.
|
||||
-->
|
||||
<target name="tests" depends="tests-local,test-report,copy.itest.resources,itests,itest-report" description="Runs all tests, first local then server (if any)" />
|
||||
|
||||
|
||||
<!--
|
||||
Overridden only to have the errorproperty and failureproperty attributes
|
||||
added to the junit task.
|
||||
-->
|
||||
<!-- Runs the local unit tests. -->
|
||||
<target name="tests-local" depends="tests.prepare" description="Run all local tests">
|
||||
<!-- for the time being we just halt on failure, since these are
|
||||
local tests and there is no server to shut down, etc. But if
|
||||
we want to optionally run all tests and report on the whole
|
||||
batch, then we need to set a failure property as in the server
|
||||
tests. -->
|
||||
<junit forkmode="perBatch" printsummary="yes" haltonfailure="no" haltonerror="no" dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true">
|
||||
<jvmarg value="${unitvm}" />
|
||||
<jvmarg value="-Djava.security.auth.login.config=${target.testclasses.dir}/auth.conf" />
|
||||
<jvmarg value="${test.arguments}" />
|
||||
<classpath>
|
||||
<pathelement location="${target.classes.dir}" />
|
||||
<pathelement location="${target.testclasses.dir}" />
|
||||
<pathelement location="${target.genclasses.dir}" />
|
||||
<path refid="test.classpath" />
|
||||
</classpath>
|
||||
|
||||
<formatter type="plain" />
|
||||
<formatter type="xml" />
|
||||
|
||||
<batchtest fork="yes" todir="${target.testresults.dir}">
|
||||
<fileset dir="${target.testclasses.dir}" includes="${test.includes}" excludes="${test.excludes}" />
|
||||
</batchtest>
|
||||
</junit>
|
||||
|
||||
</target>
|
||||
|
||||
<property name="target.testresults.html.dir" location="${target.testresults.dir}/html" />
|
||||
|
||||
<!-- Generate the unit test report -->
|
||||
<target name="test-report" depends="build.prepare" description="Generate HTML report of unit test results">
|
||||
<delete dir="${target.testresults.html.dir}" />
|
||||
<mkdir dir="${target.testresults.html.dir}" />
|
||||
<junitreport todir="${target.testresults.html.dir}">
|
||||
<fileset dir="${target.testresults.dir}">
|
||||
<include name="TEST-*.xml" />
|
||||
</fileset>
|
||||
<report format="frames" todir="${target.testresults.html.dir}" />
|
||||
</junitreport>
|
||||
<echo>
|
||||
Unit test report has been generated.
|
||||
The HTML report is ${target.testresults.html.dir}/index.html
|
||||
</echo>
|
||||
<fail if="tests.failed" message="Unit tests failed" />
|
||||
</target>
|
||||
|
||||
<target name="clover-report" depends="clover.instrument, tests-local" description="Produce a test coverage report">
|
||||
<clover-report>
|
||||
<current outfile="${target.clover.dir}/coverage.xml" />
|
||||
<current outfile="${target.clover.dir}/html">
|
||||
<format type="html" />
|
||||
</current>
|
||||
</clover-report>
|
||||
</target>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -1,97 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ivy-module version="1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="http://www.jayasoft.org/misc/ivy/samples/ivy.xsd">
|
||||
|
||||
<info organisation="org.springframework" module="spring-ldap-odm" />
|
||||
|
||||
<configurations>
|
||||
<conf name="default" extends="global" />
|
||||
<conf name="global" visibility="private" />
|
||||
<conf name="buildtime" visibility="private" />
|
||||
<conf name="test" visibility="private" />
|
||||
<conf name="source" visibility="public" />
|
||||
</configurations>
|
||||
|
||||
<publications>
|
||||
<artifact name="spring-ldap-odm" type="jar" conf="default" />
|
||||
<artifact name="spring-ldap-odm-src" type="zip" conf="source" />
|
||||
</publications>
|
||||
|
||||
<dependencies defaultconf="global->default">
|
||||
<!-- global (core) dependencies -->
|
||||
<dependency org="commons-logging" name="commons-logging" rev="1.0.4" />
|
||||
<dependency org="commons-lang" name="commons-lang" rev="2.1" />
|
||||
<dependency org="commons-collections" name="commons-collections" rev="3.1" />
|
||||
<dependency org="org.springframework" name="spring-ldap" rev="latest.integration"/>
|
||||
<dependency org="org.springframework" name="spring-beans" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-core" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-context" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-dao" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-src" rev="2.0.4" conf="source->source">
|
||||
<artifact name="spring-src" type="zip"/>
|
||||
</dependency>
|
||||
<dependency org="com.sun" name="ldapbp" rev="1.0" />
|
||||
<dependency org="xstream" name="xstream" rev="1.2" />
|
||||
|
||||
<!-- build time only dependencies -->
|
||||
<dependency org="org.tigris" name="svnant" rev="1.0.0" conf="buildtime->default">
|
||||
<artifact name="svnant" type="jar"/>
|
||||
<artifact name="svnClientAdapter" type="jar"/>
|
||||
<artifact name="svnjavahl" type="jar"/>
|
||||
</dependency>
|
||||
|
||||
<!-- test time only dependencies -->
|
||||
<dependency org="com.cenqua.clover" name="clover" rev="1.3.12" conf="test->default" />
|
||||
<dependency org="org.springframework" name="spring-mock" rev="2.0.4"
|
||||
conf="test->default"/>
|
||||
<dependency org="gsbase" name="gsbase" rev="2.0.1" conf="test->default"/>
|
||||
<dependency org="junit" name="junit" rev="3.8.1" conf="test->default"/>
|
||||
<dependency org="junit-addons" name="junit-addons" rev="1.4" conf="test->default"/>
|
||||
<dependency org="junitperf" name="junitperf" rev="1.8" conf="test->default"/>
|
||||
<dependency org="org.easymock" name="easymock" rev="2.2" conf="test->default"/>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ivy-module version="1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="http://www.jayasoft.org/misc/ivy/samples/ivy.xsd">
|
||||
|
||||
<info organisation="org.springframework" module="spring-ldap-odm" />
|
||||
|
||||
<configurations>
|
||||
<conf name="default" extends="global" />
|
||||
<conf name="global" visibility="private" />
|
||||
<conf name="buildtime" visibility="private" />
|
||||
<conf name="test" visibility="private" />
|
||||
<conf name="source" visibility="public" />
|
||||
</configurations>
|
||||
|
||||
<publications>
|
||||
<artifact name="spring-ldap-odm" type="jar" conf="default" />
|
||||
<artifact name="spring-ldap-odm-src" type="zip" conf="source" />
|
||||
</publications>
|
||||
|
||||
<dependencies defaultconf="global->default">
|
||||
<!-- global (core) dependencies -->
|
||||
<dependency org="commons-logging" name="commons-logging" rev="1.0.4" />
|
||||
<dependency org="commons-lang" name="commons-lang" rev="2.1" />
|
||||
<dependency org="commons-collections" name="commons-collections" rev="3.1" />
|
||||
<dependency org="org.springframework" name="spring-ldap" rev="latest.integration"/>
|
||||
<dependency org="org.springframework" name="spring-beans" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-core" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-context" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-dao" rev="2.0.4"/>
|
||||
<dependency org="org.springframework" name="spring-src" rev="2.0.4" conf="source->source">
|
||||
<artifact name="spring-src" type="zip"/>
|
||||
</dependency>
|
||||
<dependency org="com.sun" name="ldapbp" rev="1.0" />
|
||||
<dependency org="xstream" name="xstream" rev="1.2" />
|
||||
|
||||
<!-- build time only dependencies -->
|
||||
<dependency org="org.tigris" name="svnant" rev="1.0.0" conf="buildtime->default">
|
||||
<artifact name="svnant" type="jar"/>
|
||||
<artifact name="svnClientAdapter" type="jar"/>
|
||||
<artifact name="svnjavahl" type="jar"/>
|
||||
</dependency>
|
||||
|
||||
<!-- test time only dependencies -->
|
||||
<dependency org="com.cenqua.clover" name="clover" rev="1.3.12" conf="test->default" />
|
||||
<dependency org="org.springframework" name="spring-mock" rev="2.0.4"
|
||||
conf="test->default"/>
|
||||
<dependency org="gsbase" name="gsbase" rev="2.0.1" conf="test->default"/>
|
||||
<dependency org="junit" name="junit" rev="3.8.1" conf="test->default"/>
|
||||
<dependency org="junit-addons" name="junit-addons" rev="1.4" conf="test->default"/>
|
||||
<dependency org="junitperf" name="junitperf" rev="1.8" conf="test->default"/>
|
||||
<dependency org="org.easymock" name="easymock" rev="2.2" conf="test->default"/>
|
||||
<dependency org="org.easymock" name="easymockclassextension" rev="2.2.2" conf="test->default"/>
|
||||
|
||||
<dependency org="cglib" name="cglib-nodep" rev="2.1_3" conf="test->default"/>
|
||||
<dependency org="org.testng" name="testng" rev="5.0" conf="test->default" />
|
||||
|
||||
<!-- Test dependencies for Apache Directory Server -->
|
||||
<dependency org="org.apache.directory.server" name="apacheds-core" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-core-shared" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-server-jndi" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-server-main" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-shared" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-changepw" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-kerberos" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-kerberos-shared" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-ldap" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
|
||||
<dependency org="org.apache.directory.shared" name="shared-asn1" rev="0.9.5.3"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.shared" name="shared-asn1-codec" rev="0.9.5.3"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.shared" name="shared-ldap" rev="0.9.5.3"
|
||||
conf="test->default"/>
|
||||
|
||||
<dependency org="log4j" name="log4j" rev="1.2.9" conf="test->default" />
|
||||
<dependency org="antlr" name="antlr" rev="2.7.2" conf="test->default" />
|
||||
<dependency org="jdbm" name="jdbm" rev="1.0" conf="test->default" />
|
||||
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.0"
|
||||
conf="test->default" />
|
||||
<dependency org="org.apache.mina" name="mina-core" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.mina" name="mina-filter-ssl" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<!-- End test dependencies for Apache Directory Server -->
|
||||
|
||||
</dependencies>
|
||||
|
||||
</ivy-module>
|
||||
|
||||
<dependency org="cglib" name="cglib-nodep" rev="2.1_3" conf="test->default"/>
|
||||
|
||||
<!-- Test dependencies for Apache Directory Server -->
|
||||
<dependency org="org.apache.directory.server" name="apacheds-core" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-core-shared" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-server-jndi" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-server-main" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-shared" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-changepw" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-kerberos" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-kerberos-shared" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.server" name="apacheds-protocol-ldap" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
|
||||
<dependency org="org.apache.directory.shared" name="shared-asn1" rev="0.9.5.3"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.shared" name="shared-asn1-codec" rev="0.9.5.3"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.directory.shared" name="shared-ldap" rev="0.9.5.3"
|
||||
conf="test->default"/>
|
||||
|
||||
<dependency org="log4j" name="log4j" rev="1.2.9" conf="test->default" />
|
||||
<dependency org="antlr" name="antlr" rev="2.7.2" conf="test->default" />
|
||||
<dependency org="jdbm" name="jdbm" rev="1.0" conf="test->default" />
|
||||
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.0"
|
||||
conf="test->default" />
|
||||
<dependency org="org.apache.mina" name="mina-core" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<dependency org="org.apache.mina" name="mina-filter-ssl" rev="1.0.0"
|
||||
conf="test->default"/>
|
||||
<!-- End test dependencies for Apache Directory Server -->
|
||||
|
||||
</dependencies>
|
||||
|
||||
</ivy-module>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
package org.springframework.ldap.odm.dao;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -14,14 +15,13 @@ import org.springframework.ldap.NameNotFoundException;
|
||||
import org.springframework.ldap.core.DistinguishedName;
|
||||
import org.springframework.ldap.odm.entity.ITestPerson;
|
||||
import org.springframework.ldap.odm.entity.ITestRole;
|
||||
import org.testng.Assert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class LdapDaoTest extends AbstractLdapTemplateIntegrationTest
|
||||
public class LdapDaoITest extends AbstractLdapTemplateIntegrationTest
|
||||
{
|
||||
protected static final Log LOGGER = LogFactory.getLog(LdapDaoTest.class);
|
||||
protected static final Log LOGGER = LogFactory.getLog(LdapDaoITest.class);
|
||||
protected LdapDao ldapDao;
|
||||
private ITestPerson testPerson;
|
||||
|
||||
@@ -87,7 +87,7 @@ public class LdapDaoTest extends AbstractLdapTemplateIntegrationTest
|
||||
ldapDao.create(testPerson);
|
||||
ITestPerson retrieved = (ITestPerson) ldapDao.findByNamingAttribute(testPerson.getIdentifier(), ITestPerson.class);
|
||||
LOGGER.debug(retrieved);
|
||||
Assert.assertNotNull(retrieved, "Should've found the created entity.");
|
||||
Assert.assertNotNull("Should've found the created entity.", retrieved);
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ public class LdapDaoTest extends AbstractLdapTemplateIntegrationTest
|
||||
DistinguishedName dn = new DistinguishedName("uid=" + testPerson.getIdentifier() + ",ou=people");
|
||||
ITestPerson retrieved = (ITestPerson) ldapDao.findByDn(dn, ITestPerson.class);
|
||||
LOGGER.debug(retrieved);
|
||||
Assert.assertNotNull(retrieved, "Should've found the created entity.");
|
||||
Assert.assertNotNull("Should've found the created entity.", retrieved);
|
||||
}
|
||||
|
||||
|
||||
@@ -123,9 +123,9 @@ public class LdapDaoTest extends AbstractLdapTemplateIntegrationTest
|
||||
}
|
||||
catch (Exception expected)
|
||||
{
|
||||
Assert.assertTrue(expected instanceof NameAlreadyBoundException,
|
||||
"Exception type doesn't match expected. ( got: "
|
||||
+ expected.getMessage());
|
||||
Assert.assertTrue("Exception type doesn't match expected. ( got: "
|
||||
+ expected.getMessage(),
|
||||
expected instanceof NameAlreadyBoundException);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +141,8 @@ public class LdapDaoTest extends AbstractLdapTemplateIntegrationTest
|
||||
ldapDao.create(testPerson);
|
||||
List results = ldapDao.filterByBeanProperty(testPerson.getEmailAddress(), "EmailAddress", ITestPerson.class);
|
||||
LOGGER.debug("filterByBeanProperty returned: " + results.size() + " results.");
|
||||
Assert.assertTrue(results.size() > 0, "Filter should return collection containing more than one result. ");
|
||||
Assert.assertTrue("Filter should return collection containing more than one result. ",
|
||||
results.size() > 0);
|
||||
}
|
||||
|
||||
public void testUpdateEntity()
|
||||
@@ -154,7 +155,7 @@ public class LdapDaoTest extends AbstractLdapTemplateIntegrationTest
|
||||
ldapDao.update(testPerson);
|
||||
ITestPerson retrieved = (ITestPerson) ldapDao.findByNamingAttribute(testPerson.getIdentifier(),
|
||||
ITestPerson.class);
|
||||
Assert.assertEquals(retrieved.getEmailAddress(), newEmail, "Email name not updated.");
|
||||
Assert.assertEquals("Email name not updated.", retrieved.getEmailAddress(), newEmail);
|
||||
}
|
||||
catch (Exception unexpected)
|
||||
{
|
||||
@@ -183,7 +184,7 @@ public class LdapDaoTest extends AbstractLdapTemplateIntegrationTest
|
||||
LOGGER.debug(testPerson);
|
||||
ldapDao.delete(testPerson);
|
||||
ITestPerson retrieved = (ITestPerson) ldapDao.findByNamingAttribute(testPerson.getIdentifier(), ITestPerson.class);
|
||||
Assert.assertNull(retrieved, "Entity should've been deleted.");
|
||||
Assert.assertNull("Entity should've been deleted.", retrieved);
|
||||
}
|
||||
|
||||
|
||||
84
spring-ldap-odm/src/itest/resources/apacheDsContext.xml
Normal file
84
spring-ldap-odm/src/itest/resources/apacheDsContext.xml
Normal file
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
This context automatically starts the Apache Directory Server
|
||||
and sets up the test data
|
||||
-->
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
||||
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
|
||||
<!-- JNDI environment variable -->
|
||||
<bean id="environment"
|
||||
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
|
||||
<property name="properties">
|
||||
<props>
|
||||
<prop key="java.naming.security.authentication">
|
||||
simple
|
||||
</prop>
|
||||
<prop key="java.naming.security.principal">
|
||||
${userDn}
|
||||
</prop>
|
||||
<prop key="java.naming.security.credentials">
|
||||
${password}
|
||||
</prop>
|
||||
</props>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
Note the non-standard port, in order to leave 389 unused, thus
|
||||
making it easier for the integration tests requiring OpenLDAP.
|
||||
-->
|
||||
<bean id="configuration" class="org.apache.directory.server.configuration.MutableServerStartupConfiguration">
|
||||
<property name="ldapPort" value="3900" />
|
||||
<property name="contextPartitionConfigurations">
|
||||
<set>
|
||||
<ref bean="jaywayPartitionConfiguration"/>
|
||||
</set>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="jaywayPartitionConfiguration"
|
||||
class="org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration">
|
||||
<property name="name" value="example" />
|
||||
<property name="suffix" value="dc=example,dc=com" />
|
||||
<property name="contextEntry">
|
||||
<value>
|
||||
objectClass: top
|
||||
objectClass: domain
|
||||
objectClass: extensibleObject
|
||||
dc: example
|
||||
</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="configEnvHelper" class="org.springframework.ldap.ConfigEnvHelper">
|
||||
<constructor-arg ref="environment" />
|
||||
<constructor-arg ref="configuration" />
|
||||
</bean>
|
||||
|
||||
<bean name="serverContext" class="javax.naming.InitialContext">
|
||||
<constructor-arg>
|
||||
<bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
|
||||
<property name="targetObject" ref="configEnvHelper" />
|
||||
<property name="propertyPath" value="env" />
|
||||
</bean>
|
||||
</constructor-arg>
|
||||
</bean>
|
||||
|
||||
<bean name="ldapServerManager" class="org.springframework.ldap.LdapServerManager">
|
||||
<property name="contextSource" ref="contextSource" />
|
||||
</bean>
|
||||
|
||||
<!-- Custom editors required to launch ApacheDS -->
|
||||
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
|
||||
<property name="customEditors">
|
||||
<map>
|
||||
<entry key="javax.naming.directory.Attributes">
|
||||
<bean class="org.apache.directory.server.core.configuration.AttributesPropertyEditor"/>
|
||||
</entry>
|
||||
</map>
|
||||
</property>
|
||||
</bean>
|
||||
</beans>
|
||||
43
spring-ldap-odm/src/itest/resources/beans.xml
Normal file
43
spring-ldap-odm/src/itest/resources/beans.xml
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
<beans>
|
||||
|
||||
<import resource="classpath:/apacheDsContext.xml"/>
|
||||
|
||||
<bean id="placeholderConfig"
|
||||
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
|
||||
<property name="location" value="classpath:/ldap.properties" />
|
||||
</bean>
|
||||
|
||||
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource" >
|
||||
<property name="urls" value="${urls}" />
|
||||
<property name="userDn" value="${userDn}" />
|
||||
<property name="password" value="${password}" />
|
||||
<property name="base" value="${base}" />
|
||||
<property name="dirObjectFactory" value="org.springframework.ldap.core.support.DefaultDirObjectFactory" />
|
||||
</bean>
|
||||
|
||||
<bean id="ldapTemplate" singleton="true" class="org.springframework.ldap.core.LdapTemplate">
|
||||
<constructor-arg ref="contextSource"/>
|
||||
</bean>
|
||||
|
||||
<bean id="typeConverter" singleton="true" class="org.springframework.ldap.odm.attributetypes.LdapTypeConverter"/>
|
||||
|
||||
<bean id="referencedEntryEditorFactory" singleton="true"
|
||||
class="org.springframework.ldap.odm.attributetypes.ReferencedEntryEditorFactory">
|
||||
<constructor-arg value="${base}" />
|
||||
<constructor-arg ref="ldapTemplate"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ctxMapperFactory" singleton="true"
|
||||
class="org.springframework.ldap.odm.mapping.ObjectDirectoryMapperFactory">
|
||||
<constructor-arg ref="typeConverter"/>
|
||||
<constructor-arg ref="referencedEntryEditorFactory"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ldapDao" singleton="true" class="org.springframework.ldap.odm.dao.LdapDaoImpl">
|
||||
<constructor-arg ref="ldapTemplate"/>
|
||||
<constructor-arg ref="ctxMapperFactory"/>
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
4
spring-ldap-odm/src/itest/resources/ldap.properties
Normal file
4
spring-ldap-odm/src/itest/resources/ldap.properties
Normal file
@@ -0,0 +1,4 @@
|
||||
urls=ldap://127.0.0.1:3900
|
||||
userDn=uid=admin,ou=system
|
||||
password=secret
|
||||
base=dc=example,dc=com
|
||||
50
spring-ldap-odm/src/itest/resources/log4j.xml
Normal file
50
spring-ldap-odm/src/itest/resources/log4j.xml
Normal file
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/docs/api/org/apache/log4j/xml/log4j.dtd">
|
||||
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
|
||||
|
||||
<appender name="console" class="org.apache.log4j.ConsoleAppender">
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<!-- <param name="ConversionPattern" value="[%d{dd/MMM/yyy:HH:mm:ss:SS}] [%t] [%x] %-5p %c{1} - %m %n"/> -->
|
||||
<param name="ConversionPattern" value="[%t] [%x] %-5p %c{1} - %m %n"/>
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<appender name="file" class="org.apache.log4j.FileAppender">
|
||||
<param name="file" value="odm.log"/>
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<param name="ConversionPattern" value="[%d{dd/MMM/yyy:HH:mm:ss:SS}] [%t] [%x] %-5p %c{1} - %m %n"/>
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<logger name="org.springframework.beans">
|
||||
<level value="warn"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.context">
|
||||
<level value="warn"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.apache.directory">
|
||||
<level value="error"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.core">
|
||||
<level value="warn"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.ldap.core">
|
||||
<level value="info"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.ldap.odm">
|
||||
<level value="debug"/>
|
||||
<appender-ref ref="console"/>
|
||||
</logger>
|
||||
|
||||
|
||||
</log4j:configuration>
|
||||
19
spring-ldap-odm/src/itest/resources/setup_data.ldif
Normal file
19
spring-ldap-odm/src/itest/resources/setup_data.ldif
Normal file
@@ -0,0 +1,19 @@
|
||||
dn: ou=people,dc=example,dc=com
|
||||
objectclass: top
|
||||
objectclass: organizationalUnit
|
||||
ou: people
|
||||
|
||||
dn: ou=roles,dc=example,dc=com
|
||||
objectclass: top
|
||||
objectclass: organizationalUnit
|
||||
ou: roles
|
||||
|
||||
dn: cn=webUser,ou=roles,dc=example,dc=com
|
||||
objectclass: top
|
||||
objectclass: organizationalRole
|
||||
cn: webUser
|
||||
description: Everyday site visitor
|
||||
|
||||
|
||||
|
||||
|
||||
9
spring-ldap-odm/src/itest/resources/teardown_data.ldif
Normal file
9
spring-ldap-odm/src/itest/resources/teardown_data.ldif
Normal file
@@ -0,0 +1,9 @@
|
||||
dn: ou=people,dc=example,dc=com
|
||||
objectclass: top
|
||||
objectclass: organizationalUnit
|
||||
ou: people
|
||||
|
||||
dn: ou=roles,dc=example,dc=com
|
||||
objectclass: top
|
||||
objectclass: organizationalUnit
|
||||
ou: roles
|
||||
@@ -16,9 +16,9 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* <p/>
|
||||
* LdapTypeConverter is responsible for the conversion of LDAP attributes returned in String form
|
||||
* to native java types and vice versa. It it leverages Spring's property editors, with
|
||||
* to native java types and vice versa. It it leverages Spring's property editors, with
|
||||
* some custom editors to:
|
||||
* <li>
|
||||
* <ul>convert generalized time strings to <code>java.util.Date.</code></ul>
|
||||
@@ -26,17 +26,18 @@ import java.util.Date;
|
||||
* <code>org.springframework.ldap.core.DistinguishedName</code>.</ul>
|
||||
* </li>
|
||||
* </p>
|
||||
* <p>
|
||||
* <p/>
|
||||
* Additional custom editors may be created at runtime to if an Object Directory Map
|
||||
* contains references to other mapped objects (eg. A role of type Role.class containing
|
||||
* references to members of type Person.class)
|
||||
*
|
||||
* <p/>
|
||||
* </p>
|
||||
*
|
||||
*/
|
||||
public class LdapTypeConverter extends SimpleTypeConverter
|
||||
{
|
||||
private static final DateFormat GENERALIZED_TIME = new SimpleDateFormat("yyyyMMddHHmmss.S");
|
||||
|
||||
private static final DateFormat GENERALIZED_TIME
|
||||
= new SimpleDateFormat("yyyyMMddHHmmss.SSSZ");
|
||||
|
||||
public LdapTypeConverter()
|
||||
{
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<html>
|
||||
<body>
|
||||
|
||||
Provides a realization of the Data Access Object (DAO) pattern using object directory mapping.
|
||||
Provides a realization of the Data Access Object (DAO) pattern using LDAP
|
||||
object directory mapping.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -30,7 +30,9 @@ public interface ObjectDirectoryMap
|
||||
/** The set of bean property names in the Object Directory Map. */
|
||||
Set<String> beanPropertyNames();
|
||||
|
||||
/** The <code>Class</code> that the Object Directory Map corresponds to. */
|
||||
/** The <code>Class</code> that the Object Directory Map represents. That is,
|
||||
* LDAP entries will be serialized to and from this class.
|
||||
*/
|
||||
Class getClazz();
|
||||
|
||||
/** The name of the attribute corresponding to the first element in a distinguished
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<html>
|
||||
<body>
|
||||
|
||||
Contains utility classes.
|
||||
Utility classes.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -19,8 +19,8 @@ import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.Calendar;
|
||||
|
||||
//TODO: There's probably a lot of redundant tests in here
|
||||
public class LdapTypeConverterTest extends TestCase
|
||||
{
|
||||
private static final Log LOGGER = LogFactory.getLog(LdapTypeConverterTest.class);
|
||||
@@ -120,17 +120,15 @@ public class LdapTypeConverterTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public void testConvertToGeneralizedTime() throws ParseException
|
||||
public void testConvertToDate() throws ParseException
|
||||
{
|
||||
String object1 = "20061005093637.44";
|
||||
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss.S");
|
||||
Date expected = df.parse("20061005093637.44");
|
||||
String object1 = "19700101100000.000+1000";
|
||||
|
||||
try
|
||||
{
|
||||
Object translated = typeConverter.convertIfNecessary(object1,
|
||||
Date.class);
|
||||
Assert.assertEquals(translated, expected,
|
||||
Assert.assertEquals(translated, new Date(0L),
|
||||
"Unexpected translated value");
|
||||
}
|
||||
catch (TypeMismatchException e)
|
||||
@@ -141,41 +139,44 @@ public class LdapTypeConverterTest extends TestCase
|
||||
|
||||
public void testConvertFromDate()
|
||||
{
|
||||
Date source = new Date(1184283822285L); //Friday July 13, 2007 9:43:42 AM
|
||||
Assert.assertEquals(typeConverter.getAsText(source), "20070713094342.285");
|
||||
Date source = new Date(1184283822285L); //Friday July 13, 2007 9:43:42 AM GMT+1000
|
||||
LOGGER.debug(typeConverter.getAsText(source));
|
||||
|
||||
Assert.assertTrue(typeConverter.getAsText(source)
|
||||
.matches("20070713\\d\\d\\d\\d42.285\\+\\d\\d\\d\\d"));
|
||||
}
|
||||
|
||||
public void testConvertToGeneralizedTimeArray() throws ParseException
|
||||
public void testConvertToDateArray() throws ParseException
|
||||
{
|
||||
String object1 = "20071105093655.44";
|
||||
String object2 = "20061005093637.44";
|
||||
String object1 = "20071105093655.0+1000";
|
||||
String object2 = "19700101100000.0+1000";
|
||||
Object objectToTranslate = new String[]{object1, object2};
|
||||
|
||||
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss.S");
|
||||
Date expected = df.parse("20061005093637.44");
|
||||
|
||||
try
|
||||
{
|
||||
Object[] translated = (Object[]) typeConverter.convertIfNecessary(
|
||||
objectToTranslate, Date[].class);
|
||||
Assert.assertEquals(translated[1], expected,
|
||||
Assert.assertEquals(translated[1], new Date(0L),
|
||||
"Unexpected translated value");
|
||||
}
|
||||
catch (TypeMismatchException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
Assert.fail("Unexpected exception during translation");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void testConvertFromDateArray()
|
||||
{
|
||||
Date date1 = new Date(1184283822285L); //Friday July 13, 2007 9:43:42 AM
|
||||
Date date2 = new Date(0); //epoch
|
||||
Date date1 = new Date(1184283822285L); //Friday July 13, 2007 9:43:42 AM + GMT+1000
|
||||
Date date2 = new Date(0); //epoch + GMT + 1000
|
||||
|
||||
Date[] dates = new Date[]{date1, date2};
|
||||
String[] converted = typeConverter.getAllAsText(dates);
|
||||
Assert.assertEquals(converted[0], "20070713094342.285");
|
||||
Assert.assertEquals(converted[1], "19700101100000.0");
|
||||
Assert.assertTrue(converted[0].matches("20070713\\d\\d\\d\\d42.285\\+\\d\\d\\d\\d"));
|
||||
Assert.assertTrue(converted[1].matches("19700101\\d\\d\\d\\d00.000\\+\\d\\d\\d\\d"));
|
||||
}
|
||||
|
||||
public void testConvertToLdapName()
|
||||
|
||||
@@ -150,7 +150,8 @@ public class ObjectDirectoryMapperImplTest extends TestCase
|
||||
Assert.assertEquals("bean@bean.com", ctxAdapter.getStringAttribute("mail"));
|
||||
Assert.assertEquals("fred", new String((byte[]) ctxAdapter.getObjectAttribute("userpassword")));
|
||||
Assert.assertEquals("false", ctxAdapter.getStringAttribute("acceptemails"));
|
||||
Assert.assertEquals("19700101100000.1", ctxAdapter.getStringAttribute("loginresettime"));
|
||||
Assert.assertTrue(ctxAdapter.getStringAttribute("loginresettime")
|
||||
.matches("19700101\\d\\d\\d\\d00.001\\+\\d\\d\\d\\d"));
|
||||
Assert.assertEquals("3", ctxAdapter.getStringAttribute("failedlogins"));
|
||||
Assert.assertEquals("uid=amAdmin, ou=people, dc=myretsu, dc=com",
|
||||
ctxAdapter.getStringAttribute("creatorname"));
|
||||
|
||||
Reference in New Issue
Block a user