TSK-1689: Updated wildfly example to execute tests (#1796)

This commit is contained in:
SebastianRoseneck 2022-01-12 15:20:32 +01:00 committed by GitHub
parent 026ee69cef
commit 2b2fdc3dd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 636 additions and 36 deletions

View File

@ -23,7 +23,7 @@ set -e #fail fast
# Arguments:
# $1: exit code
function helpAndExit() {
cat "$0" | grep "^#H" | cut -c4- | sed -e "s/%FILE%/$(basename "$0")/g"
grep "^#H" "$0" | cut -c4- | sed -e "s/%FILE%/$(basename "$0")/g"
exit "$1"
}
@ -38,7 +38,7 @@ function increment_version() {
echo "'$1' does not match tag pattern." >&2
exit 1
fi
echo "${1%\.*}.$(expr ${1##*\.*\.} + 1)"
echo "${1%\.*}.$(("${1##*\.*\.}" + 1))"
}
# changing version in pom and all its children
@ -48,7 +48,7 @@ function increment_version() {
# Environment variable:
# REL: relative path to this file
function change_version() {
$REL/../mvnw -q versions:set -f "$1" -DnewVersion="$2" -DartifactId=* -DgroupId=* versions:commit
"$REL/../mvnw" -q versions:set -f "$1" -DnewVersion="$2" -DartifactId=* -DgroupId=* versions:commit
}
function main() {
@ -65,7 +65,7 @@ function main() {
echo "missing parameter for argument '-m|--modules'" >&2
exit 1
fi
MODULES=($2)
MODULES=("$2")
shift # passed argument
shift # passed value
;;
@ -82,8 +82,8 @@ function main() {
fi
if [[ "$GITHUB_REF" =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
version=$([[ -n "$INCREMENT" ]] && echo $(increment_version "${GITHUB_REF##refs/tags/v}")-SNAPSHOT || echo "${GITHUB_REF##refs/tags/v}")
for dir in ${MODULES[@]}; do
version=$([[ -n "$INCREMENT" ]] && echo "$(increment_version "${GITHUB_REF##refs/tags/v}")-SNAPSHOT" || echo "${GITHUB_REF##refs/tags/v}")
for dir in "${MODULES[@]}"; do
change_version "$dir" "$version"
done
else

View File

@ -18,7 +18,7 @@ set -e # fail fast
# Arguments:
# $1: exit code
function helpAndExit() {
cat "$0" | grep "^#H" | cut -c4- | sed -e "s/%FILE%/$(basename "$0")/g"
grep "^#H" "$0" | cut -c4- | sed -e "s/%FILE%/$(basename "$0")/g"
exit "$1"
}
@ -33,7 +33,7 @@ function increment_version() {
echo "'$1' does not match tag pattern." >&2
exit 1
fi
echo "${1%\.*}.$(expr ${1##*\.*\.} + 1)"
echo "${1%\.*}.$(("${1##*\.*\.}" + 1))"
}
function main() {
@ -65,7 +65,7 @@ function main() {
for file in "$@"; do
[[ -n "$file" ]] && git add "$file"
done
git commit -m "Updated poms to version $(increment_version ${GITHUB_REF##refs/tags/v})-SNAPSHOT"
git commit -m "Updated poms to version $(increment_version "${GITHUB_REF##refs/tags/v}")-SNAPSHOT"
git push
else
echo "Nothing to push - this is not a release!"

View File

@ -14,7 +14,7 @@ set -e #fail fast
# Arguments:
# $1: exit code
function helpAndExit() {
cat "$0" | grep "^#H" | cut -c4- | sed -e "s/%FILE%/$(basename "$0")/g"
grep "^#H" "$0" | cut -c4- | sed -e "s/%FILE%/$(basename "$0")/g"
exit "$1"
}
@ -29,7 +29,7 @@ function increment_version() {
echo "'$1' does not match tag pattern." >&2
exit 1
fi
echo "${1%\.*}.$(expr ${1##*\.*\.} + 1)"
echo "${1%\.*}.$(("${1##*\.*\.}" + 1))"
}
function main() {
@ -37,14 +37,15 @@ function main() {
if [[ "$GITHUB_REF" =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
REL=$(dirname "$0")
FILES=(
$REL/../rest/taskana-rest-spring-example-wildfly/pom.xml
"$REL/../rest/taskana-rest-spring-example-wildfly/pom.xml"
"$REL/../rest/taskana-rest-spring-example-wildfly/src/test/java/pro/taskana/example/wildfly/AbstractAccTest.java"
)
for file in ${FILES[@]}; do
sed -i "s/[0-9]\+\.[0-9]\+\.[0-9]\+-SNAPSHOT/$(increment_version "${GITHUB_REF##refs/tags/v}")-SNAPSHOT/g" $file
for file in "${FILES[@]}"; do
sed -i "s/[0-9]\+\.[0-9]\+\.[0-9]\+-SNAPSHOT/$(increment_version "${GITHUB_REF##refs/tags/v}")-SNAPSHOT/g" "$file"
done
else
echo "skipped version change for wildfly because this is not a release build"
fi
}
main "$@"
main "$@"

View File

@ -3,12 +3,12 @@ set -e # fail fast
set -x
BASE_URL=https://taskana.mybluemix.net/taskana
test 200 -eq $(curl -sw %{http_code} -o /dev/null "$BASE_URL/docs/rest/rest-api.html")
test 200 -eq $(curl -sw %{http_code} -o /dev/null "$BASE_URL/docs/rest/simplehistory-rest-api.html")
test 200 -eq $(curl -sw %{http_code} -o /dev/null "$BASE_URL/docs/rest/routing-rest-api.html")
test 200 -eq "$(curl -sw "%{http_code}" -o /dev/null "$BASE_URL/docs/rest/rest-api.html")"
test 200 -eq "$(curl -sw "%{http_code}" -o /dev/null "$BASE_URL/docs/rest/simplehistory-rest-api.html")"
test 200 -eq "$(curl -sw "%{http_code}" -o /dev/null "$BASE_URL/docs/rest/routing-rest-api.html")"
for module in taskana-core taskana-spring; do
test 200 -eq $(curl -sw %{http_code} -o /dev/null "$BASE_URL/docs/java/$module/pro/taskana/package-summary.html")
test 200 -eq "$(curl -sw "%{http_code}" -o /dev/null "$BASE_URL/docs/java/$module/pro/taskana/package-summary.html")"
done
for module in taskana-cdi; do
test 200 -eq $(curl -sw %{http_code} -o /dev/null "$BASE_URL/docs/java/$module/pro/taskana/common/internal/package-summary.html")
test 200 -eq "$(curl -sw "%{http_code}" -o /dev/null "$BASE_URL/docs/java/$module/pro/taskana/common/internal/package-summary.html")"
done

View File

@ -4,7 +4,7 @@ set -e #fail fast
#check that first dir has same amount of files as second dir
function verifyDocs() {
test -d "$1"
test $(find "$1" | wc -l) -eq $(grep "$2" <<<"$JAR_CONTENT" | wc -l)
test "$(find "$1" | wc -l)" -eq "$(grep -c "$2" <<<"$JAR_CONTENT")"
}
REL=$(dirname "$0")
@ -18,8 +18,8 @@ set -x
verifyDocs "$REL/../lib/taskana-core/target/apidocs" "/static/docs/java/taskana-core"
verifyDocs "$REL/../lib/taskana-cdi/target/apidocs" "/static/docs/java/taskana-cdi"
verifyDocs "$REL/../lib/taskana-spring/target/apidocs" "/static/docs/java/taskana-spring"
test -n "$(jar -tf $JAR_FILE_LOCATION | grep /static/docs/rest/rest-api.html)"
test -n "$(jar -tf $JAR_FILE_LOCATION | grep /static/docs/rest/simplehistory-rest-api.html)"
test -n "$(jar -tf $JAR_FILE_LOCATION | grep /static/docs/rest/routing-rest-api.html)"
test -n "$(jar -tf "$JAR_FILE_LOCATION" | grep /static/docs/rest/rest-api.html)"
test -n "$(jar -tf "$JAR_FILE_LOCATION" | grep /static/docs/rest/simplehistory-rest-api.html)"
test -n "$(jar -tf "$JAR_FILE_LOCATION" | grep /static/docs/rest/routing-rest-api.html)"
set +x
echo "the jar file '$JAR_FILE_LOCATION' contains documentation"

View File

@ -78,7 +78,7 @@
<version.resteasy>5.0.1.Final</version.resteasy>
<version.thorntail>2.7.0.Final</version.thorntail>
<version.javaee-api>8.0.1</version.javaee-api>
<version.arquillian>1.6.0.Final</version.arquillian>
<version.arquillian>1.5.0.Final</version.arquillian>
<version.arquillian.managed.wildfly>3.0.1.Final</version.arquillian.managed.wildfly>
<!-- test dependencies -->

View File

@ -95,12 +95,6 @@
</dependency>
<!-- test dependencies -->
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-common-test</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>pro.taskana.history</groupId>
<artifactId>taskana-simplehistory-rest-spring</artifactId>
@ -127,11 +121,22 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Brought in via Arquillian BOM, see dependencyManagement section
above -->
<dependency>

View File

@ -0,0 +1,92 @@
package pro.taskana.common.test.rest;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Collections;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.hateoas.MediaTypes;
import org.springframework.hateoas.mediatype.hal.Jackson2HalModule;
import org.springframework.http.HttpHeaders;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
/** Helps to simplify rest api testing. */
@Component
public class RestHelper {
public static final RestTemplate TEMPLATE = getRestTemplate();
private Environment environment;
private int port;
@Autowired
public RestHelper(Environment environment) {
this.environment = environment;
}
public RestHelper(int port) {
this.port = port;
}
public String toUrl(String relativeUrl, Object... uriVariables) {
return UriComponentsBuilder.fromPath(relativeUrl)
.scheme("http")
.host("127.0.0.1")
.port(getPort())
.build(false)
.expand(uriVariables)
.toString();
}
public static HttpHeaders generateHeadersForUser(String user) {
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", encodeUserAndPasswordAsBasicAuth(user));
headers.add("Content-Type", MediaTypes.HAL_JSON_VALUE);
return headers;
}
public static String encodeUserAndPasswordAsBasicAuth(String user) {
String toEncode = user + ":" + user;
return "Basic " + Base64.getEncoder().encodeToString(toEncode.getBytes(StandardCharsets.UTF_8));
}
private int getPort() {
return Optional.ofNullable(environment)
.map(e -> e.getRequiredProperty("local.server.port", int.class))
.orElse(port);
}
/**
* Return a REST template which is capable of dealing with responses in HAL format.
*
* @return RestTemplate
*/
private static RestTemplate getRestTemplate() {
ObjectMapper mapper =
new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.registerModule(new Jackson2HalModule())
.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaTypes.HAL_JSON));
converter.setObjectMapper(mapper);
RestTemplate template = new RestTemplate();
// important to add first to ensure priority
template.getMessageConverters().add(0, converter);
return template;
}
}

View File

@ -0,0 +1,22 @@
package pro.taskana.common.test.rest;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ActiveProfiles;
/** Use this annotation to test with a spring context and a standardized configuration. */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
// DirtiesContext is required to make the integration tests run with embedded LDAP.
// Otherwise the LDAP server is not shut down correctly and will not come up again. (socket busy)
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
@ActiveProfiles({"test"})
@SpringBootTest(
classes = TestConfiguration.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public @interface TaskanaSpringBootTest {}

View File

@ -0,0 +1,30 @@
package pro.taskana.common.test.rest;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.DependsOn;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import pro.taskana.sampledata.SampleDataGenerator;
@SpringBootApplication
@ComponentScan("pro.taskana")
@DependsOn("getTaskanaEngine") // wait for schema to be created BEFORE inserting test data
public class TestConfiguration {
@Autowired
public TestConfiguration(
@Value("${taskana.schemaName:TASKANA}") String schemaName, DataSource dataSource) {
new SampleDataGenerator(dataSource, schemaName).generateSampleData();
}
@Bean
public PlatformTransactionManager txManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}

View File

@ -22,6 +22,7 @@ import pro.taskana.workbasket.rest.models.WorkbasketSummaryRepresentationModel;
public class AbstractAccTest {
protected RestHelper restHelper = new RestHelper(8080);
protected static final String DEPENDENCY_VERSION = "4.12.1-SNAPSHOT";
protected TaskRepresentationModel getTaskResourceSample() {
ClassificationSummaryRepresentationModel classificationResource =

View File

@ -47,7 +47,7 @@ public class TaskanaWildflyWithHistoryLoggerEnabledTest extends AbstractAccTest
MavenCoordinates.createCoordinate(
"pro.taskana.history",
"taskana-loghistory-provider",
"${project.version}",
DEPENDENCY_VERSION,
PackagingType.JAR,
null);

View File

@ -53,7 +53,7 @@ public class TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabledTest extends
MavenCoordinates.createCoordinate(
"pro.taskana.history",
"taskana-simplehistory-rest-spring",
"${project.version}",
DEPENDENCY_VERSION,
PackagingType.JAR,
null);
@ -64,7 +64,7 @@ public class TaskanaWildflyWithSimpleHistoryAndHistoryLoggerEnabledTest extends
MavenCoordinates.createCoordinate(
"pro.taskana.history",
"taskana-loghistory-provider",
"${project.version}",
DEPENDENCY_VERSION,
PackagingType.JAR,
null);

View File

@ -53,7 +53,7 @@ public class TaskanaWildflyWithSimpleHistoryEnabledTest extends AbstractAccTest
MavenCoordinates.createCoordinate(
"pro.taskana.history",
"taskana-simplehistory-rest-spring",
"${project.version}",
DEPENDENCY_VERSION,
PackagingType.JAR,
null);

View File

@ -4,7 +4,7 @@
<resources>
<!--the name of your driver -->
<resource-root path="postgresql-42.2.18.jar"/>
<resource-root path="postgresql-42.3.1.jar"/>
</resources>
<dependencies>

View File

@ -0,0 +1,449 @@
######################
# Base Structure
######################
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=other-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 General
########################
dn: uid=monitor,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Monitor
description: desc
uid: monitor
sn: Monitor
ou: Organisationseinheit/Organisationseinheit IT
cn: monitor monitor
userPassword: monitor
dn: uid=taskadmin,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Task
description: desc
uid: taskadmin
sn: Admin
ou: Organisationseinheit/Organisationseinheit IT
cn: Task admin
userPassword: taskadmin
dn: uid=admin,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Admin
description: desc
uid: admin
sn: Admin
ou: Organisationseinheit/Organisationseinheit IT
cn: Admin Admin
userPassword: admin
dn: uid=businessadmin,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Business
description: desc
memberOf: cn=business-admins,cn=groups,OU=Test,O=TASKANA
uid: businessadmin
sn: Admin
ou: Organisationseinheit/Organisationseinheit IT
cn: Business Admin
userPassword: businessadmin
########################
# Users KSC 1
########################
dn: uid=teamlead-1,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Titus
description: desc
phoneNumber: 012345678
mobileNumber: 09876554321
email: Titus.Toll@taskana.de
orgLevel1: ABC
orgLevel2: DEF/GHI
someDepartement: JKL
orgLevel4: MNO/PQR
memberOf: cn=Organisationseinheit KSC 1,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
memberOf: cn=monitor-users,cn=groups,OU=Test,O=TASKANA
memberOf: cn=business-admins,cn=groups,OU=Test,O=TASKANA
memberOf: cn=ksc-teamleads,cn=groups,OU=Test,O=TASKANA
uid: teamlead-1
sn: Toll
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 1
cn: Titus Toll
userPassword: teamlead-1
dn: uid=user-1-1,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Max
description: desc
memberOf: cn=ksc-users,cn=groups,OU=Test,O=TASKANA
memberOf: cn=Organisationseinheit KSC 1,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-1-1
sn: Mustermann
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 1
cn: Max Mustermann
userPassword: user-1-1
dn: uid=user-1-2,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Elena
description: desc
memberOf: cn=ksc-users,cn=groups,OU=Test,O=TASKANA
memberOf: cn=Organisationseinheit KSC 1,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-1-2
sn: Eifrig
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 1
cn: Elena Eifrig
userPassword: user-1-2
dn: uid=user-1-3,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Elena
description: desc
uid: user-1-3
sn: Faul
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 1
cn: Elena Faul
userPassword: user-1-3
########################
# Users KSC 2
########################
dn: uid=teamlead-2,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Frauke
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
memberOf: cn=monitor-users,cn=groups,OU=Test,O=TASKANA
memberOf: cn=business-admins,cn=groups,OU=Test,O=TASKANA
memberOf: cn=ksc-teamleads,cn=groups,OU=Test,O=TASKANA
uid: teamlead-2
sn: Faul
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Frauke Faul
userPassword: teamlead-2
dn: uid=user-2-1,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Simone
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
memberOf: cn=ksc-users,cn=groups,OU=Test,O=TASKANA
uid: user-2-1
sn: Müller
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Simone Müller
userPassword: user-2-1
dn: uid=user-2-2,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Tim
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
memberOf: cn=ksc-users,cn=groups,OU=Test,O=TASKANA
uid: user-2-2
sn:: U2NobMOkZnJpZw==
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn:: VGltIFNjaGzDpGZyaWc=
userPassword: user-2-2
dn: uid=user-2-3,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Thomas
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-3
sn: Bach
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Thomas Bach
userPassword: user-2-3
dn: uid=user-2-4,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Rolf
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-4
sn: Wieland
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Rolf Wieland
userPassword: user-2-4
dn: uid=user-2-5,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Heike
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-5
sn: Schmidt
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Heike Schmidt
userPassword: user-2-5
dn: uid=user-2-6,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Kurt
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-6
sn: Maier
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Kurt Maier
userPassword: user-2-6
dn: uid=user-2-7,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Wiebke
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-7
sn: Meyer
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Wiebke Meyer
userPassword: user-2-7
dn: uid=user-2-8,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Jana
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-8
sn: Heeg
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Jana Heeg
userPassword: user-2-8
dn: uid=user-2-9,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Nathalie
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-9
sn: Fuchs
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Nathalie Fuchs
userPassword: user-2-9
dn: uid=user-2-10,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Johannes
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: user-2-10
sn: Renz
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Johannes Renz
userPassword: user-2-10
dn: uid=das_ist_eine_sehr_sehr_sehr_sehr_sehr_lange_user_id,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Max
description: desc
memberOf: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uid: das_ist_eine_sehr_sehr_sehr_sehr_sehr_lange_user_id
sn: Renz
ou: Organisationseinheit/Organisationseinheit KSC/Organisationseinheit KSC 2
cn: Max Renz
userPassword: user-2-11
########################
# Users Domäne B
########################
dn: uid=user-b-1,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Bernd
description: desc
uid: user-b-1
sn: Bern
ou: Organisationseinheit/Organisationseinheit B
cn: Bernd Bern
userPassword: user-b-1
dn: uid=User-b-2,cn=users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Brunhilde
description: desc
uid: User-b-2
sn: Bio
ou: Organisationseinheit/Organisationseinheit B
cn: Brunhilde Bio
userPassword: user-b-2
########################
# Users in other cn
########################
dn: uid=otheruser,cn=other-users,OU=Test,O=TASKANA
objectclass: inetorgperson
objectclass: organizationalperson
objectclass: person
objectclass: top
givenName: Other
description: User in other cn than search root
uid: otheruser
sn: User
ou: Other
cn: Other User
userPassword: otheruser
########################
# 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
uniquemember: uid=user-2-1,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-2,cn=users,OU=Test,O=TASKANA
cn: ksc-users
objectclass: groupofuniquenames
objectclass: top
dn: cn=ksc-teamleads,cn=groups,OU=Test,O=TASKANA
uniquemember: uid=teamlead-1,cn=users,OU=Test,O=TASKANA
uniquemember: uid=teamlead-2,cn=users,OU=Test,O=TASKANA
cn: ksc-teamleads
objectclass: groupofuniquenames
objectclass: top
dn: cn=business-admins,cn=groups,OU=Test,O=TASKANA
uniquemember: uid=teamlead-1,cn=users,OU=Test,O=TASKANA
uniquemember: uid=teamlead-2,cn=users,OU=Test,O=TASKANA
uniquemember: uid=businessadmin,cn=users,OU=Test,O=TASKANA
cn: business-admins
objectclass: groupofuniquenames
objectclass: top
dn: cn=monitor-users,cn=groups,OU=Test,O=TASKANA
uniquemember: uid=teamlead-1,cn=users,OU=Test,O=TASKANA
uniquemember: uid=teamlead-2,cn=users,OU=Test,O=TASKANA
cn: monitor-users
objectclass: groupofuniquenames
objectclass: top
######################
# Organizational Units
######################
dn: cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
cn: Organisationseinheit KSC
uniquemember: cn=Organisationseinheit KSC 1,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uniquemember: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
objectclass: groupofuniquenames
objectclass: top
dn: cn=Organisationseinheit KSC 1,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uniquemember: uid=teamlead-1,cn=users,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
dn: cn=Organisationseinheit KSC 2,cn=Organisationseinheit KSC,cn=organisation,OU=Test,O=TASKANA
uniquemember: uid=teamlead-2,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-1,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-2,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-3,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-4,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-5,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-6,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-7,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-8,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-9,cn=users,OU=Test,O=TASKANA
uniquemember: uid=user-2-10,cn=users,OU=Test,O=TASKANA
cn: Organisationseinheit KSC 2
objectclass: groupofuniquenames
objectclass: top
dn: cn=Organisationseinheit B,cn=organisation,OU=Test,O=TASKANA
cn: Organisationseinheit B
objectclass: groupofuniquenames
objectclass: top