From bbd668624889ee685156eac549349516f1f8800f Mon Sep 17 00:00:00 2001
From: Holger Hagen <19706592+holgerhagen@users.noreply.github.com>
Date: Wed, 4 Mar 2020 16:44:53 +0100
Subject: [PATCH] TSK-1052: added inmemory ldap server for int testing.
---
rest/taskana-rest-spring/pom.xml | 379 +++++++++---------
.../rest/AccessIdControllerIntTest.java | 6 +-
.../src/test/resources/application.properties | 19 +-
.../src/test/resources/taskana-test.ldif | 82 ++++
4 files changed, 291 insertions(+), 195 deletions(-)
create mode 100644 rest/taskana-rest-spring/src/test/resources/taskana-test.ldif
diff --git a/rest/taskana-rest-spring/pom.xml b/rest/taskana-rest-spring/pom.xml
index 01367e2e7..77a767fd2 100644
--- a/rest/taskana-rest-spring/pom.xml
+++ b/rest/taskana-rest-spring/pom.xml
@@ -1,196 +1,201 @@
- 4.0.0
- taskana-rest-spring
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ taskana-rest-spring
- ${project.groupId}:${project.artifactId}
- The taskana rest logic.
+ ${project.groupId}:${project.artifactId}
+ The taskana rest logic.
-
- pro.taskana
- taskana-rest-parent
- 2.0.1-SNAPSHOT
- ../pom.xml
-
+
+ pro.taskana
+ taskana-rest-parent
+ 2.0.1-SNAPSHOT
+ ../pom.xml
+
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${version.spring.boot}
- pom
- import
-
-
-
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${version.spring.boot}
+ pom
+ import
+
+
+
-
-
- org.springframework
- spring-web
- ${version.spring}
-
-
- org.springframework
- spring-beans
- ${version.spring}
-
-
- org.springframework
- spring-jdbc
- ${version.spring}
-
-
- org.springframework.hateoas
- spring-hateoas
- ${version.spring.hateos}
-
-
- org.springframework.ldap
- spring-ldap-core
- ${version.spring.ldap}
-
-
- javax.servlet
- javax.servlet-api
- ${version.javax.servlet}
- provided
-
-
- javax.validation
- validation-api
- ${version.javax.validation}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${version.jackson}
-
-
- pro.taskana
- taskana-spring
- ${project.version}
-
-
- org.springframework
- spring-aop
- ${version.spring}
-
-
- org.aspectj
- aspectjweaver
- ${version.aspectjweaver}
-
+
+
+ org.springframework
+ spring-web
+ ${version.spring}
+
+
+ org.springframework
+ spring-beans
+ ${version.spring}
+
+
+ org.springframework
+ spring-jdbc
+ ${version.spring}
+
+
+ org.springframework.hateoas
+ spring-hateoas
+ ${version.spring.hateos}
+
+
+ org.springframework.ldap
+ spring-ldap-core
+ ${version.spring.ldap}
+
+
+ javax.servlet
+ javax.servlet-api
+ ${version.javax.servlet}
+ provided
+
+
+ javax.validation
+ validation-api
+ ${version.javax.validation}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${version.jackson}
+
+
+ pro.taskana
+ taskana-spring
+ ${project.version}
+
+
+ org.springframework
+ spring-aop
+ ${version.spring}
+
+
+ org.aspectj
+ aspectjweaver
+ ${version.aspectjweaver}
+
-
-
- org.assertj
- assertj-core
- ${version.assertj}
- test
-
-
- pro.taskana
- taskana-data
- ${project.version}
- test
-
-
- org.springframework.boot
- spring-boot-starter-web
- ${version.spring.boot}
- test
-
-
- org.springframework.boot
- spring-boot-starter-test
- ${version.spring.boot}
- test
-
-
- org.springframework.boot
- spring-boot-starter-security
- ${version.spring.boot}
- test
-
-
- org.springframework.boot
- spring-boot-starter-jdbc
- ${version.spring.boot}
- test
-
-
- org.springframework.plugin
- spring-plugin-core
- ${version.spring.core}
- test
-
-
- org.springframework.security
- spring-security-test
- ${version.spring.security}
- test
-
-
- org.springframework.restdocs
- spring-restdocs-mockmvc
- ${version.spring.restdocs}
- test
-
-
- net.bytebuddy
- byte-buddy
- ${version.byte-buddy}
- test
-
-
- net.bytebuddy
- byte-buddy-agent
- ${version.byte-buddy-agent}
- test
-
-
- com.h2database
- h2
- ${version.h2}
- test
-
-
+
+
+ org.assertj
+ assertj-core
+ ${version.assertj}
+ test
+
+
+ pro.taskana
+ taskana-data
+ ${project.version}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${version.spring.boot}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${version.spring.boot}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+ ${version.spring.boot}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+ ${version.spring.boot}
+ test
+
+
+ org.springframework.plugin
+ spring-plugin-core
+ ${version.spring.core}
+ test
+
+
+ org.springframework.security
+ spring-security-test
+ ${version.spring.security}
+ test
+
+
+ org.springframework.restdocs
+ spring-restdocs-mockmvc
+ ${version.spring.restdocs}
+ test
+
+
+ net.bytebuddy
+ byte-buddy
+ ${version.byte-buddy}
+ test
+
+
+ net.bytebuddy
+ byte-buddy-agent
+ ${version.byte-buddy-agent}
+ test
+
+
+ com.h2database
+ h2
+ ${version.h2}
+ test
+
+
+ com.unboundid
+ unboundid-ldapsdk
+ test
+
+
-
-
-
- org.asciidoctor
- asciidoctor-maven-plugin
- ${version.maven.asciidoctor}
-
-
- generate-docs
- prepare-package
-
- process-asciidoc
-
-
- html
- ${basedir}/src/test/resources/asciidoc
- book
-
- ${basedir}/target/generated-snippets
- shared
-
-
- false
-
- ERROR
-
-
-
-
-
-
-
-
+
+
+
+ org.asciidoctor
+ asciidoctor-maven-plugin
+ ${version.maven.asciidoctor}
+
+
+ generate-docs
+ prepare-package
+
+ process-asciidoc
+
+
+ html
+ ${basedir}/src/test/resources/asciidoc
+ book
+
+ ${basedir}/target/generated-snippets
+ shared
+
+
+ false
+
+ ERROR
+
+
+
+
+
+
+
+
diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/AccessIdControllerIntTest.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/AccessIdControllerIntTest.java
index 25bf38401..492311d9d 100644
--- a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/AccessIdControllerIntTest.java
+++ b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/AccessIdControllerIntTest.java
@@ -36,7 +36,7 @@ class AccessIdControllerIntTest {
ResponseEntity> response =
template.exchange(
restHelper.toUrl(Mapping.URL_ACCESSID)
- + "?search-for=cn=developersgroup,ou=groups,o=taskanatest",
+ + "?search-for=cn=ksc-users,cn=groups,OU=Test,O=TASKANA",
HttpMethod.GET,
restHelper.defaultRequest(),
ParameterizedTypeReference.forType(List.class));
@@ -47,7 +47,7 @@ class AccessIdControllerIntTest {
void testQueryGroupsByCn() {
ResponseEntity> response =
template.exchange(
- restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=developer",
+ restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=ksc",
HttpMethod.GET,
restHelper.defaultRequest(),
ParameterizedTypeReference.forType(List.class));
@@ -58,7 +58,7 @@ class AccessIdControllerIntTest {
void testGetMatches() {
ResponseEntity> response =
template.exchange(
- restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=ali",
+ restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=user",
HttpMethod.GET,
restHelper.defaultRequest(),
ParameterizedTypeReference.forType(AccessIdListResource.class));
diff --git a/rest/taskana-rest-spring/src/test/resources/application.properties b/rest/taskana-rest-spring/src/test/resources/application.properties
index 316500e16..cbf9699e4 100644
--- a/rest/taskana-rest-spring/src/test/resources/application.properties
+++ b/rest/taskana-rest-spring/src/test/resources/application.properties
@@ -13,25 +13,26 @@ devMode=false
version=@project.version@
####### control LDAP usage
-taskana.ldap.useLdap=false
+taskana.ldap.useLdap=true
####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389
-taskana.ldap.bindDn=uid=admin,ou=system
+taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret
-taskana.ldap.baseDn=o=TaskanaTest
+taskana.ldap.baseDn=ou=Test,O=TASKANA
####### properties that control search for users and groups
-taskana.ldap.userSearchBase=ou=people
+taskana.ldap.userSearchBase=cn=users
taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userIdAttribute=uid
-taskana.ldap.groupSearchBase=ou=groups
+taskana.ldap.groupSearchBase=cn=groups
taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50
+taskana.ldap.groupsOfUser=memberUid
####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 0 * * * *
####### cache static resources properties
@@ -40,3 +41,11 @@ spring.main.allow-bean-definition-overriding=true
####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.internal-proxies=.*
server.use-forward-headers=true
+
+# Embedded Spring LDAP
+spring.ldap.embedded.base-dn= O=TASKANA
+spring.ldap.embedded.credential.username= uid=admin
+spring.ldap.embedded.credential.password= secret
+spring.ldap.embedded.ldif=classpath:taskana-test.ldif
+spring.ldap.embedded.port= 10389
+spring.ldap.embedded.validation.enabled=false
\ No newline at end of file
diff --git a/rest/taskana-rest-spring/src/test/resources/taskana-test.ldif b/rest/taskana-rest-spring/src/test/resources/taskana-test.ldif
new file mode 100644
index 000000000..e3e9eba41
--- /dev/null
+++ b/rest/taskana-rest-spring/src/test/resources/taskana-test.ldif
@@ -0,0 +1,82 @@
+######################
+# Organizational Units
+######################
+dn: O=TASKANA
+objectclass: top
+objectclass: organization
+o: Unternehmen
+
+dn: OU=Test,O=TASKANA
+ou: Organisationseinheit
+objectclass: top
+objectclass: organizationalUnit
+
+dn: cn=groups,OU=Test,O=TASKANA
+cn: groups
+objectclass: top
+objectclass: container
+
+dn: cn=users,OU=Test,O=TASKANA
+cn: users
+objectclass: top
+objectclass: container
+
+dn: cn=organisation,OU=Test,O=TASKANA
+cn: organisation
+objectclass: top
+objectclass: container
+
+########################
+# Users
+########################
+dn: uid=user_1_1,cn=users,OU=Test,O=TASKANA
+objectclass: inetorgperson
+objectclass: organizationalperson
+objectclass: person
+objectclass: top
+givenName: Max
+description: desc
+uid: user_1_1
+sn: Mustermann
+ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 1
+cn: Max Mustermann
+
+dn: uid=user_1_2,cn=users,OU=Test,O=TASKANA
+objectclass: inetorgperson
+objectclass: organizationalperson
+objectclass: person
+objectclass: top
+givenName: Elena
+description: desc
+uid: user_1_1
+sn: Eifrig
+ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 1
+cn: Elena Eifrig
+
+
+########################
+# Groups
+########################
+dn: cn=ksc-users,cn=groups,OU=Test,O=TASKANA
+uniquemember: uid=user_1_1,cn=users,OU=Test,O=TASKANA
+uniquemember: uid=user_1_2,cn=users,OU=Test,O=TASKANA
+cn: ksc-users
+objectclass: groupofuniquenames
+objectclass: top
+
+
+########################
+# Groups
+########################
+dn: cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
+cn: Organisationseinheit KSC
+objectclass: groupofuniquenames
+objectclass: top
+
+dn: cn=Organisationseinheit KSC 1,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
+uniquemember: uid=user_1_1,cn=users,OU=Test,O=TASKANA
+uniquemember: uid=user_1_2,cn=users,OU=Test,O=TASKANA
+cn: Organisationseinheit KSC 1
+objectclass: groupofuniquenames
+objectclass: top
+