TSK-1052: added inmemory ldap server for int testing.

This commit is contained in:
Holger Hagen 2020-03-04 16:44:53 +01:00
parent 446eb3a1c9
commit bbd6686248
4 changed files with 291 additions and 195 deletions

View File

@ -1,196 +1,201 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0" 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"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>taskana-rest-spring</artifactId> <artifactId>taskana-rest-spring</artifactId>
<name>${project.groupId}:${project.artifactId}</name> <name>${project.groupId}:${project.artifactId}</name>
<description>The taskana rest logic.</description> <description>The taskana rest logic.</description>
<parent> <parent>
<groupId>pro.taskana</groupId> <groupId>pro.taskana</groupId>
<artifactId>taskana-rest-parent</artifactId> <artifactId>taskana-rest-parent</artifactId>
<version>2.0.1-SNAPSHOT</version> <version>2.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId> <artifactId>spring-boot-dependencies</artifactId>
<version>${version.spring.boot}</version> <version>${version.spring.boot}</version>
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId> <artifactId>spring-web</artifactId>
<version>${version.spring}</version> <version>${version.spring}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId> <artifactId>spring-beans</artifactId>
<version>${version.spring}</version> <version>${version.spring}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId> <artifactId>spring-jdbc</artifactId>
<version>${version.spring}</version> <version>${version.spring}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.hateoas</groupId> <groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId> <artifactId>spring-hateoas</artifactId>
<version>${version.spring.hateos}</version> <version>${version.spring.hateos}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.ldap</groupId> <groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId> <artifactId>spring-ldap-core</artifactId>
<version>${version.spring.ldap}</version> <version>${version.spring.ldap}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>
<version>${version.javax.servlet}</version> <version>${version.javax.servlet}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.validation</groupId> <groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId> <artifactId>validation-api</artifactId>
<version>${version.javax.validation}</version> <version>${version.javax.validation}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>${version.jackson}</version> <version>${version.jackson}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>pro.taskana</groupId> <groupId>pro.taskana</groupId>
<artifactId>taskana-spring</artifactId> <artifactId>taskana-spring</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId> <artifactId>spring-aop</artifactId>
<version>${version.spring}</version> <version>${version.spring}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.aspectj</groupId> <groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId> <artifactId>aspectjweaver</artifactId>
<version>${version.aspectjweaver}</version> <version>${version.aspectjweaver}</version>
</dependency> </dependency>
<!-- test dependencies --> <!-- test dependencies -->
<dependency> <dependency>
<groupId>org.assertj</groupId> <groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId> <artifactId>assertj-core</artifactId>
<version>${version.assertj}</version> <version>${version.assertj}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>pro.taskana</groupId> <groupId>pro.taskana</groupId>
<artifactId>taskana-data</artifactId> <artifactId>taskana-data</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
<version>${version.spring.boot}</version> <version>${version.spring.boot}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<version>${version.spring.boot}</version> <version>${version.spring.boot}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId> <artifactId>spring-boot-starter-security</artifactId>
<version>${version.spring.boot}</version> <version>${version.spring.boot}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId> <artifactId>spring-boot-starter-jdbc</artifactId>
<version>${version.spring.boot}</version> <version>${version.spring.boot}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.plugin</groupId> <groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId> <artifactId>spring-plugin-core</artifactId>
<version>${version.spring.core}</version> <version>${version.spring.core}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId> <artifactId>spring-security-test</artifactId>
<version>${version.spring.security}</version> <version>${version.spring.security}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.restdocs</groupId> <groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId> <artifactId>spring-restdocs-mockmvc</artifactId>
<version>${version.spring.restdocs}</version> <version>${version.spring.restdocs}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.bytebuddy</groupId> <groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId> <artifactId>byte-buddy</artifactId>
<version>${version.byte-buddy}</version> <version>${version.byte-buddy}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.bytebuddy</groupId> <groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId> <artifactId>byte-buddy-agent</artifactId>
<version>${version.byte-buddy-agent}</version> <version>${version.byte-buddy-agent}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
<version>${version.h2}</version> <version>${version.h2}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> <dependency>
<groupId>com.unboundid</groupId>
<artifactId>unboundid-ldapsdk</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.asciidoctor</groupId> <groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId> <artifactId>asciidoctor-maven-plugin</artifactId>
<version>${version.maven.asciidoctor}</version> <version>${version.maven.asciidoctor}</version>
<executions> <executions>
<execution> <execution>
<id>generate-docs</id> <id>generate-docs</id>
<phase>prepare-package</phase> <phase>prepare-package</phase>
<goals> <goals>
<goal>process-asciidoc</goal> <goal>process-asciidoc</goal>
</goals> </goals>
<configuration> <configuration>
<backend>html</backend> <backend>html</backend>
<sourceDirectory>${basedir}/src/test/resources/asciidoc</sourceDirectory> <sourceDirectory>${basedir}/src/test/resources/asciidoc</sourceDirectory>
<doctype>book</doctype> <doctype>book</doctype>
<attributes> <attributes>
<snippets>${basedir}/target/generated-snippets</snippets> <snippets>${basedir}/target/generated-snippets</snippets>
<docinfo>shared</docinfo> <docinfo>shared</docinfo>
</attributes> </attributes>
<logHandler> <logHandler>
<outputToConsole>false</outputToConsole> <outputToConsole>false</outputToConsole>
<failIf> <failIf>
<severity>ERROR</severity> <severity>ERROR</severity>
</failIf> </failIf>
</logHandler> </logHandler>
</configuration> </configuration>
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</project> </project>

View File

@ -36,7 +36,7 @@ class AccessIdControllerIntTest {
ResponseEntity<List<AccessIdResource>> response = ResponseEntity<List<AccessIdResource>> response =
template.exchange( template.exchange(
restHelper.toUrl(Mapping.URL_ACCESSID) 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, HttpMethod.GET,
restHelper.defaultRequest(), restHelper.defaultRequest(),
ParameterizedTypeReference.forType(List.class)); ParameterizedTypeReference.forType(List.class));
@ -47,7 +47,7 @@ class AccessIdControllerIntTest {
void testQueryGroupsByCn() { void testQueryGroupsByCn() {
ResponseEntity<List<AccessIdResource>> response = ResponseEntity<List<AccessIdResource>> response =
template.exchange( template.exchange(
restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=developer", restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=ksc",
HttpMethod.GET, HttpMethod.GET,
restHelper.defaultRequest(), restHelper.defaultRequest(),
ParameterizedTypeReference.forType(List.class)); ParameterizedTypeReference.forType(List.class));
@ -58,7 +58,7 @@ class AccessIdControllerIntTest {
void testGetMatches() { void testGetMatches() {
ResponseEntity<List<AccessIdResource>> response = ResponseEntity<List<AccessIdResource>> response =
template.exchange( template.exchange(
restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=ali", restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=user",
HttpMethod.GET, HttpMethod.GET,
restHelper.defaultRequest(), restHelper.defaultRequest(),
ParameterizedTypeReference.forType(AccessIdListResource.class)); ParameterizedTypeReference.forType(AccessIdListResource.class));

View File

@ -13,25 +13,26 @@ devMode=false
version=@project.version@ version=@project.version@
####### control LDAP usage ####### control LDAP usage
taskana.ldap.useLdap=false taskana.ldap.useLdap=true
####### properties to connect to LDAP ####### properties to connect to LDAP
taskana.ldap.serverUrl=ldap://localhost:10389 taskana.ldap.serverUrl=ldap://localhost:10389
taskana.ldap.bindDn=uid=admin,ou=system taskana.ldap.bindDn=uid=admin
taskana.ldap.bindPassword=secret taskana.ldap.bindPassword=secret
taskana.ldap.baseDn=o=TaskanaTest taskana.ldap.baseDn=ou=Test,O=TASKANA
####### properties that control search for users and groups ####### properties that control search for users and groups
taskana.ldap.userSearchBase=ou=people taskana.ldap.userSearchBase=cn=users
taskana.ldap.userSearchFilterName=objectclass taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userIdAttribute=uid taskana.ldap.userIdAttribute=uid
taskana.ldap.groupSearchBase=ou=groups taskana.ldap.groupSearchBase=cn=groups
taskana.ldap.groupSearchFilterName=objectclass taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3 taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50 taskana.ldap.maxNumberOfReturnedAccessIds=50
taskana.ldap.groupsOfUser=memberUid
####### JobScheduler cron expression that specifies when the JobSchedler runs ####### JobScheduler cron expression that specifies when the JobSchedler runs
taskana.jobscheduler.async.cron=0 0 * * * * taskana.jobscheduler.async.cron=0 0 * * * *
####### cache static resources properties ####### 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 ####### tomcat is not detecting the x-forward headers from bluemix as a trustworthy proxy
server.tomcat.internal-proxies=.* server.tomcat.internal-proxies=.*
server.use-forward-headers=true 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

View File

@ -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