pom.xml

1717 lines | 92.649 kB Blame History Raw Download
<?xml version="1.0"?>
<!--
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
~ and other contributors as indicated by the @author tags.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.keycloak.testsuite</groupId>
        <artifactId>integration-arquillian</artifactId>
        <version>4.8.0.Final</version>
    </parent>

    <packaging>pom</packaging>

    <artifactId>integration-arquillian-tests</artifactId>

    <name>Tests</name>

    <modules>
        <module>base</module>
        <module>other</module>
    </modules>

    <properties>
        <auth.server>undertow</auth.server>
        <auth.server.undertow>true</auth.server.undertow>

        <auth.server.cluster>false</auth.server.cluster>
        <auth.server.undertow.cluster>false</auth.server.undertow.cluster>
        <auth.server.jboss.cluster>false</auth.server.jboss.cluster>

        <auth.server.crossdc>false</auth.server.crossdc>
        <auth.server.undertow.crossdc>false</auth.server.undertow.crossdc>
        <auth.server.jboss.crossdc>false</auth.server.jboss.crossdc>
        <cache.server.lifecycle.skip>false</cache.server.lifecycle.skip>

        <auth.server.container>auth-server-${auth.server}</auth.server.container>
        <auth.server.home>${containers.home}/${auth.server.container}</auth.server.home>
        <auth.server.config.dir>${auth.server.home}</auth.server.config.dir>

        <auth.server.host>localhost</auth.server.host>
        <auth.server.browserHost/> <!-- if set, this host will be used by the browser instead of auth.server.host -->
        <auth.server.port.offset>100</auth.server.port.offset>
        <auth.server.http.port>8180</auth.server.http.port>
        <auth.server.events.http.port>8089</auth.server.events.http.port>
        <auth.server.https.port>8543</auth.server.https.port>
        <auth.server.management.port>10090</auth.server.management.port>
        <auth.server.management.port.jmx>10099</auth.server.management.port.jmx>
        <auth.server.ssl.required>false</auth.server.ssl.required>
        <auth.server.memory.settings>-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m</auth.server.memory.settings>
        <auth.server.config.property.name>serverConfig</auth.server.config.property.name>
        <auth.server.adapter.impl.class>org.jboss.as.arquillian.container.managed.ManagedDeployableContainer</auth.server.adapter.impl.class>
        <auth.server.truststore>&#36;{jboss.home.dir}/standalone/configuration/keycloak.truststore</auth.server.truststore>
        <auth.server.truststore.password>secret</auth.server.truststore.password>
        <auth.server.jvm.args.extra/>

        <auth.server.jboss.artifactId>integration-arquillian-servers-auth-server-${auth.server}</auth.server.jboss.artifactId>
        <auth.server.jboss.skip.unpack>${auth.server.undertow}</auth.server.jboss.skip.unpack>
        <auth.server.jboss.startup.timeout>300</auth.server.jboss.startup.timeout>

        <!--debug properties-->
        <auth.server.debug.port>5005</auth.server.debug.port>
        <auth.server.debug.suspend>n</auth.server.debug.suspend>
        <auth.server.jboss.jvm.debug.args>-agentlib:jdwp=transport=dt_socket,server=y,suspend=${auth.server.debug.suspend},address=${auth.server.host}:${auth.server.debug.port}</auth.server.jboss.jvm.debug.args>

        <auth.server.remote>false</auth.server.remote>
        <auth.server.profile/>
        <auth.server.feature/>

        <app.server.skip.unpack>true</app.server.skip.unpack>
        <app.server.artifactId>integration-arquillian-servers-app-server-${app.server}</app.server.artifactId>
        <app.server.home>${containers.home}/app-server-${app.server}</app.server.home>
        <app.server.port.offset>200</app.server.port.offset>
        <app.server.http.port>8280</app.server.http.port>
        <app.server.https.port>8643</app.server.https.port>
        <app.server.management.protocol>http-remoting</app.server.management.protocol>
        <app.server.management.port>10190</app.server.management.port>
        <app.server.startup.timeout>60</app.server.startup.timeout>
        <app.server.reverse-proxy.port.offset>500</app.server.reverse-proxy.port.offset>
        <app.server.1.port.offset>300</app.server.1.port.offset>
        <app.server.1.management.port>10290</app.server.1.management.port>
        <app.server.2.port.offset>400</app.server.2.port.offset>
        <app.server.2.management.port>10390</app.server.2.management.port>
        <app.server.debug.port>5006</app.server.debug.port>
        <app.server.debug.suspend>n</app.server.debug.suspend>
        <app.server.jboss.jvm.debug.args>-agentlib:jdwp=transport=dt_socket,server=y,suspend=${app.server.debug.suspend},address=localhost:${app.server.debug.port}</app.server.jboss.jvm.debug.args>
        <!-- Cluster tests are failing with -Xmx512 for insufficient physical memory -->
        <app.server.memory.settings>-Xms64m -Xmx384m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m</app.server.memory.settings>
        <app.server.ssl.required>false</app.server.ssl.required>
        <app.server.jvm.args.extra/>

        <cache.server>undefined</cache.server>
        <cache.server.container>cache-server-${cache.server}</cache.server.container>
        <cache.server.home>${containers.home}/${cache.server.container}</cache.server.home>
        <cache.server.1.port.offset>1010</cache.server.1.port.offset>
        <cache.server.management.port>11000</cache.server.management.port>
        <cache.server.2.port.offset>2010</cache.server.2.port.offset>
        <cache.server.2.management.port>12000</cache.server.2.management.port>
        <cache.server.console.output>true</cache.server.console.output>

        <keycloak.connectionsInfinispan.remoteStoreServer>localhost</keycloak.connectionsInfinispan.remoteStoreServer>
        <keycloak.connectionsInfinispan.remoteStorePort>12232</keycloak.connectionsInfinispan.remoteStorePort>
        <keycloak.connectionsInfinispan.remoteStorePort.2>13232</keycloak.connectionsInfinispan.remoteStorePort.2>
        <keycloak.connectionsJpa.url.crossdc>jdbc:h2:mem:test-dc-shared</keycloak.connectionsJpa.url.crossdc>
        <keycloak.testsuite.logging.pattern>%d{HH:mm:ss,SSS} %-5p [%c] %m%n</keycloak.testsuite.logging.pattern>

        <!--KEYCLOAK-4793-->
        <maven.repo.local>${user.home}/.m2/repository</maven.repo.local>
        <settings.path>${user.home}/.m2/settings.xml</settings.path>
        <repo.url/>
        <kie.maven.settings>
            -Dkie.maven.settings.custom=${settings.path}
            -Dkie.maven.repo.local=${maven.repo.local}
            -Drepo.url=${repo.url}
        </kie.maven.settings>

        <adapter.test.props>
            -Dkeycloak.x509cert.lookup.provider=${keycloak.x509cert.lookup.provider}
            -Dapp.server.base.url=http://localhost:${app.server.http.port}
            -Dauth.server.base.url=http://localhost:${auth.server.http.port}
            -Dapp.server.ssl.base.url=https://localhost:${app.server.https.port}
            -Dapp.server.ssl.required=${app.server.ssl.required}
            -Dauth.server.ssl.base.url=https://localhost:${auth.server.https.port}
            -Dauth.server.ssl.required=${auth.server.ssl.required}
            -Dmy.host.name=localhost
            -Djava.security.krb5.conf=${project.build.directory}/dependency/kerberos/test-krb5.conf
        </adapter.test.props>

        <examples.home>${project.build.directory}/examples</examples.home>
        <examples.basedir>${keycloak-parent.basedir}/examples</examples.basedir> <!--keycloak/examples directory-->
        <examples.version.suffix>${project.version}</examples.version.suffix>

        <browser>htmlUnit</browser>
        <webdriverDownloadBinaries>true</webdriverDownloadBinaries>
        <droneInstantiationTimeoutInSeconds>60</droneInstantiationTimeoutInSeconds>
        <github.username/>
        <github.secretToken/>
        <ieDriverArch>Win32</ieDriverArch>
        <js.browser>phantomjs</js.browser>
        <js.chromeArguments>--headless</js.chromeArguments>
        <htmlUnitBrowserVersion>chrome</htmlUnitBrowserVersion>
        <firefox_binary/> <!-- the path is set automatically based on the OS -->
        <firefoxLegacyDriver>false</firefoxLegacyDriver>
        <chromeBinary/>
        <chromeArguments/>

        <appium.platformName/>
        <appium.deviceName/>
        <appium.browserName/>
        <appium.avd/>
        <appium.automationName/>
        <appium.noReset/>
        <appium.fullReset/>

        <frontend.console.output>true</frontend.console.output>
        <backends.console.output>true</backends.console.output>

        <testsuite.constants>${project.build.directory}/dependency/test-constants.properties</testsuite.constants>
        <testsuite.ui.layout>0</testsuite.ui.layout> <!-- this is to tell the UI tests what type of layout to expect (doesn't setup the layout, just what to expect); 0 == desktop layout, 1 == smartphone layout, 2 == tablet layout -->

        <skip.add.user.json>false</skip.add.user.json>
        <skip.clean.second.cache>true</skip.clean.second.cache>
        <skip.copy.auth.crossdc.nodes>true</skip.copy.auth.crossdc.nodes>
        <client.certificate.keystore>${auth.server.config.dir}/client.jks</client.certificate.keystore>
        <client.certificate.keystore.passphrase>secret</client.certificate.keystore.passphrase>
        <client.truststore>${auth.server.config.dir}/keycloak.truststore</client.truststore>
        <client.truststore.passphrase>secret</client.truststore.passphrase>
        <client.certificate.ca.path>${auth.server.config.dir}/ca.crt</client.certificate.ca.path>
        <client.certificate.file>${auth.server.config.dir}/client.crt</client.certificate.file>
        <client.key.file>${auth.server.config.dir}/client.key</client.key.file>
        <client.key.passphrase>secret</client.key.passphrase>

        <!-- KEYCLOAK-6771 Certificate Bound Token -->
        <hok.client.certificate.keystore>${auth.server.config.dir}/other_client.jks</hok.client.certificate.keystore>
        <hok.client.certificate.keystore.passphrase>secret</hok.client.certificate.keystore.passphrase>

        <auth.server.ocsp.responder.enabled>false</auth.server.ocsp.responder.enabled>
        <keycloak.x509cert.lookup.provider>default</keycloak.x509cert.lookup.provider>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>unpack-auth-server-jboss</id>
                            <phase>generate-resources</phase>
                            <goals>
                                <goal>unpack</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>${auth.server.jboss.artifactId}</artifactId>
                                        <version>${project.version}</version>
                                        <type>zip</type>
                                    </artifactItem>
                                </artifactItems>
                                <outputDirectory>${containers.home}</outputDirectory>
                                <overWriteIfNewer>true</overWriteIfNewer>
                                <skip>${auth.server.jboss.skip.unpack}</skip>
                            </configuration>
                        </execution>
                        <execution>
                            <id>unpack-app-server</id>
                            <phase>generate-test-resources</phase>
                            <goals>
                                <goal>unpack</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>${app.server.artifactId}</artifactId>
                                        <version>${project.version}</version>
                                        <type>zip</type>
                                    </artifactItem>
                                </artifactItems>
                                <outputDirectory>${containers.home}</outputDirectory>
                                <skip>${app.server.skip.unpack}</skip>
                            </configuration>
                        </execution>
                        <execution>
                            <id>example-wars</id>
                            <phase>generate-test-resources</phase>
                            <goals>
                                <goal>copy</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>hello-world-authz-service</artifactId>
                                        <version>${project.version}</version>
                                        <type>war</type>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>photoz-html5-client</artifactId>
                                        <version>${project.version}</version>
                                        <type>war</type>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>photoz-restful-api</artifactId>
                                        <version>${project.version}</version>
                                        <type>war</type>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>servlet-authz-app</artifactId>
                                        <version>${project.version}</version>
                                        <type>war</type>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>servlet-policy-enforcer</artifactId>
                                        <version>${project.version}</version>
                                        <type>war</type>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>integration-arquillian-test-apps-cors-angular-product</artifactId>
                                        <version>${project.version}</version>
                                        <type>war</type>
                                    </artifactItem>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>integration-arquillian-test-apps-cors-database-service</artifactId>
                                        <version>${project.version}</version>
                                        <type>war</type>
                                    </artifactItem>
                                </artifactItems>
                                <outputDirectory>${examples.home}</outputDirectory>
                                <overWriteIfNewer>true</overWriteIfNewer>
                            </configuration>
                        </execution>
                        <execution>
                            <id>test-apps-realms</id>
                            <phase>generate-test-resources</phase>
                            <goals>
                                <goal>unpack</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>org.keycloak.testsuite</groupId>
                                        <artifactId>integration-arquillian-test-apps-dist</artifactId>
                                        <version>${project.version}</version>
                                        <type>zip</type>
                                        <includes>**/*realm.json,**/*authz-service.json,**/testsaml.json,**/*-keycloak.json</includes>
                                    </artifactItem>
                                </artifactItems>
                                <outputDirectory>${examples.home}</outputDirectory>
                                <overWriteIfNewer>true</overWriteIfNewer>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-admin-user-json-file</id>
                            <phase>generate-resources</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <skip>${skip.add.user.json}</skip>
                                <outputDirectory>${auth.server.config.dir}</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>src/test/resources</directory>
                                        <includes>
                                            <include>keycloak-add-user.json</include>
                                        </includes>
                                        <filtering>true</filtering>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                        <execution>
                            <id>copy-truststore</id>
                            <phase>generate-resources</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/dependency</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>src/test/resources</directory>
                                        <includes>
                                            <include>keystore/keycloak.truststore</include>
                                        </includes>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                        <execution>
                            <id>example-realms</id>
                            <phase>generate-test-resources</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <skip>${app.server.skip.unpack}</skip>
                                <outputDirectory>${examples.home}/example-realms</outputDirectory>
                                <overWriteIfNewer>true</overWriteIfNewer>
                                <resources>
                                    <resource>
                                        <directory>${examples.basedir}</directory>
                                        <filtering>true</filtering>
                                        <includes>
                                            <include>**/*.json</include>
                                        </includes>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>clean-second-cache-server-arquillian-bug-workaround</id><!--https://issues.jboss.org/browse/WFARQ-44-->
                            <phase>process-test-resources</phase>
                            <goals><goal>run</goal></goals>
                            <configuration>
                                <skip>${skip.clean.second.cache}</skip>
                                <target>
                                    <echo>${cache.server.home}/standalone-dc-2</echo>
                                    <delete failonerror="false" dir="${cache.server.home}/standalone-dc-2" />
                                    <mkdir dir="${cache.server.home}/standalone-dc-2/deployments" />
                                </target>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemPropertyVariables>
                            <project.build.directory>${project.build.directory}</project.build.directory>
                            <arquillian.xml>${project.build.directory}/dependency/arquillian.xml</arquillian.xml>
                            <log4j.configuration>file:${project.build.directory}/dependency/log4j.properties</log4j.configuration> <!-- for the logging to properly work with tests in the 'other' module -->

                            <auth.server>${auth.server}</auth.server>
                            <auth.server.container>${auth.server.container}</auth.server.container>

                            <auth.server.undertow>${auth.server.undertow}</auth.server.undertow>
                            <auth.server.jboss>${auth.server.jboss}</auth.server.jboss>
                            <auth.server.memory.settings>${auth.server.memory.settings}</auth.server.memory.settings>

                            <auth.server.home>${auth.server.home}</auth.server.home>
                            <auth.server.java.home>${auth.server.java.home}</auth.server.java.home>

                            <auth.server.host>${auth.server.host}</auth.server.host>
                            <auth.server.browserHost>${auth.server.browserHost}</auth.server.browserHost>
                            <auth.server.port.offset>${auth.server.port.offset}</auth.server.port.offset>
                            <auth.server.http.port>${auth.server.http.port}</auth.server.http.port>
                            <auth.server.events.http.port>${auth.server.events.http.port}</auth.server.events.http.port>
                            <auth.server.https.port>${auth.server.https.port}</auth.server.https.port>
                            <auth.server.management.port>${auth.server.management.port}</auth.server.management.port>
                            <auth.server.management.port.jmx>${auth.server.management.port.jmx}</auth.server.management.port.jmx>
                            <auth.server.ssl.required>${auth.server.ssl.required}</auth.server.ssl.required>
                            <auth.server.jboss.startup.timeout>${auth.server.jboss.startup.timeout}</auth.server.jboss.startup.timeout>
                            <auth.server.config.dir>${auth.server.config.dir}</auth.server.config.dir>
                            <auth.server.config.property.name>${auth.server.config.property.name}</auth.server.config.property.name>
                            <auth.server.config.property.value>${auth.server.config.property.value}</auth.server.config.property.value>
                            <auth.server.adapter.impl.class>${auth.server.adapter.impl.class}</auth.server.adapter.impl.class>
                            <auth.server.jboss.jvm.debug.args>${auth.server.jboss.jvm.debug.args}</auth.server.jboss.jvm.debug.args>
                            <auth.server.truststore>${auth.server.truststore}</auth.server.truststore>
                            <auth.server.truststore.password>${auth.server.truststore.password}</auth.server.truststore.password>
                            <auth.server.jvm.args.extra>${auth.server.jvm.args.extra}</auth.server.jvm.args.extra>

                            <auth.server.profile>${auth.server.profile}</auth.server.profile>
                            <auth.server.feature>${auth.server.feature}</auth.server.feature>

                            <app.server>${app.server}</app.server>
                            <app.server.home>${app.server.home}</app.server.home>
                            <app.server.java.home>${app.server.java.home}</app.server.java.home>
                            <app.server.memory.settings>${app.server.memory.settings}</app.server.memory.settings>
                            <app.server.port.offset>${app.server.port.offset}</app.server.port.offset>
                            <app.server.http.port>${app.server.http.port}</app.server.http.port>
                            <app.server.https.port>${app.server.https.port}</app.server.https.port>
                            <app.server.management.protocol>${app.server.management.protocol}</app.server.management.protocol>
                            <app.server.management.port>${app.server.management.port}</app.server.management.port>
                            <app.server.startup.timeout>${app.server.startup.timeout}</app.server.startup.timeout>
                            <app.server.reverse-proxy.port.offset>${app.server.reverse-proxy.port.offset}</app.server.reverse-proxy.port.offset>
                            <app.server.1.port.offset>${app.server.1.port.offset}</app.server.1.port.offset>
                            <app.server.1.management.port>${app.server.1.management.port}</app.server.1.management.port>
                            <app.server.2.port.offset>${app.server.2.port.offset}</app.server.2.port.offset>
                            <app.server.2.management.port>${app.server.2.management.port}</app.server.2.management.port>
                            <app.server.jboss.jvm.debug.args>${app.server.jboss.jvm.debug.args}</app.server.jboss.jvm.debug.args>
                            <app.server.jvm.args.extra>${app.server.jvm.args.extra}</app.server.jvm.args.extra>

                            <frontend.console.output>${frontend.console.output}</frontend.console.output>
                            <backends.console.output>${backend.console.output}</backends.console.output>

                            <auth.server.remote>${auth.server.remote}</auth.server.remote>

                            <adapter.test.props>${adapter.test.props}</adapter.test.props>
                            <examples.home>${examples.home}</examples.home>
                            <examples.version.suffix>${examples.version.suffix}</examples.version.suffix>

                            <kie.maven.settings>${kie.maven.settings}</kie.maven.settings>

                            <testsuite.constants>${testsuite.constants}</testsuite.constants>
                            <testsuite.ui.layout>${testsuite.ui.layout}</testsuite.ui.layout>
                            <cli.log.output>${cli.log.output}</cli.log.output>
                            <test.intermittent>${test.intermittent}</test.intermittent>

                            <browser>${browser}</browser>
                            <js.browser>${js.browser}</js.browser>
                            <js.chromeArguments>${js.chromeArguments}</js.chromeArguments>
                            <htmlUnitBrowserVersion>${htmlUnitBrowserVersion}</htmlUnitBrowserVersion>
                            <webdriverDownloadBinaries>${webdriverDownloadBinaries}</webdriverDownloadBinaries>
                            <droneInstantiationTimeoutInSeconds>${droneInstantiationTimeoutInSeconds}</droneInstantiationTimeoutInSeconds>

                            <github.username>${github.username}</github.username>
                            <github.secretToken>${github.secretToken}</github.secretToken>
                            <ieDriverArch>${ieDriverArch}</ieDriverArch>

                            <firefox_binary>${firefox_binary}</firefox_binary>
                            <chromeBinary>${chromeBinary}</chromeBinary>
                            <chromeArguments>${chromeArguments}</chromeArguments>

                            <firefoxLegacyDriver>${firefoxLegacyDriver}</firefoxLegacyDriver>

                            <appium.platformName>${appium.platformName}</appium.platformName>
                            <appium.deviceName>${appium.deviceName}</appium.deviceName>
                            <appium.browserName>${appium.browserName}</appium.browserName>
                            <appium.avd>${appium.avd}</appium.avd>
                            <appium.automationName>${appium.automationName}</appium.automationName>
                            <appium.noReset>${appium.noReset}</appium.noReset>
                            <appium.fullReset>${appium.fullReset}</appium.fullReset>

                            <project.version>${project.version}</project.version>

                            <client.certificate.ca.path>${client.certificate.ca.path}</client.certificate.ca.path>
                            <client.certificate.keystore>${client.certificate.keystore}</client.certificate.keystore>
                            <client.certificate.keystore.passphrase>${client.certificate.keystore.passphrase}</client.certificate.keystore.passphrase>
                            <client.truststore>${client.truststore}</client.truststore>
                            <client.truststore.passphrase>${client.truststore.passphrase}</client.truststore.passphrase>
                            <client.certificate.file>${client.certificate.file}</client.certificate.file>
                            <client.key.file>${client.key.file}</client.key.file>
                            <client.key.passphrase>${client.key.passphrase}</client.key.passphrase>

                            <!-- KEYCLOAK-6771 Certificate Bound Token -->
                            <hok.client.certificate.keystore>${hok.client.certificate.keystore}</hok.client.certificate.keystore>
                            <hok.client.certificate.keystore.passphrase>${hok.client.certificate.keystore.passphrase}</hok.client.certificate.keystore.passphrase>

                            <auth.server.ocsp.responder.enabled>${auth.server.ocsp.responder.enabled}</auth.server.ocsp.responder.enabled>

                            <!-- cluster properties -->
                            <auth.server.cluster>${auth.server.cluster}</auth.server.cluster>
                            <auth.server.undertow.cluster>${auth.server.undertow.cluster}</auth.server.undertow.cluster>
                            <auth.server.jboss.cluster>${auth.server.jboss.cluster}</auth.server.jboss.cluster>

                            <!--cache server properties-->
                            <auth.server.crossdc>${auth.server.crossdc}</auth.server.crossdc>
                            <auth.server.undertow.crossdc>${auth.server.undertow.crossdc}</auth.server.undertow.crossdc>
                            <auth.server.jboss.crossdc>${auth.server.jboss.crossdc}</auth.server.jboss.crossdc>
                            <cache.server.lifecycle.skip>${cache.server.lifecycle.skip}</cache.server.lifecycle.skip>

                            <cache.server>${cache.server}</cache.server>
                            <cache.server.1.port.offset>${cache.server.1.port.offset}</cache.server.1.port.offset>
                            <cache.server.container>${cache.server.container}</cache.server.container>
                            <cache.server.home>${cache.server.home}</cache.server.home>
                            <cache.server.console.output>${cache.server.console.output}</cache.server.console.output>
                            <cache.server.management.port>${cache.server.management.port}</cache.server.management.port>
                            <cache.server.2.port.offset>${cache.server.2.port.offset}</cache.server.2.port.offset>
                            <cache.server.2.management.port>${cache.server.2.management.port}</cache.server.2.management.port>

                            <keycloak.connectionsInfinispan.remoteStorePort>${keycloak.connectionsInfinispan.remoteStorePort}</keycloak.connectionsInfinispan.remoteStorePort>
                            <keycloak.connectionsInfinispan.remoteStorePort.2>${keycloak.connectionsInfinispan.remoteStorePort.2}</keycloak.connectionsInfinispan.remoteStorePort.2>
                            <keycloak.connectionsInfinispan.remoteStoreServer>${keycloak.connectionsInfinispan.remoteStoreServer}</keycloak.connectionsInfinispan.remoteStoreServer>
                            <keycloak.testsuite.logging.pattern>${keycloak.testsuite.logging.pattern}</keycloak.testsuite.logging.pattern>

                            <keycloak.connectionsJpa.url.crossdc>${keycloak.connectionsJpa.url.crossdc}</keycloak.connectionsJpa.url.crossdc>

                            <!-- used by PasswordPolicyTest.testBlacklistPasswordPolicyWithTestBlacklist, see KEYCLOAK-5244 -->
                            <keycloak.password.blacklists.path>${project.build.directory}/dependency/password-blacklists</keycloak.password.blacklists.path>
                        </systemPropertyVariables>
                        <properties>
                            <property>
                                <name>listener</name>
                                <value>org.keycloak.testsuite.util.TestEventsLogger,org.keycloak.testsuite.util.NonIDERunListener</value>
                            </property>
                        </properties>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.commonjava.maven.plugins</groupId>
                    <artifactId>directory-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>keycloak-parent-basedir</id>
                            <goals>
                                <goal>directory-of</goal>
                            </goals>
                            <phase>initialize</phase>
                            <configuration>
                                <property>keycloak-parent.basedir</property>
                                <project>
                                    <groupId>org.keycloak</groupId>
                                    <artifactId>keycloak-parent</artifactId>
                                </project>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <!--
                    Required for Filter Adapter tests - this plugin has to be here to prevent
                    org.jboss.shrinkwrap.resolver.api.maven.InvalidEnvironmentException

                    ShrinkWrap Maven Resolver Plugin sets automatically following properties:
                        maven.execution.pom-file
                        maven.execution.offline
                        maven.execution.user-settings
                        maven.execution.global-settings
                        maven.execution.active-profiles
                -->
                <groupId>org.jboss.shrinkwrap.resolver</groupId>
                <artifactId>shrinkwrap-resolver-maven-plugin</artifactId>
                <version>${shrinkwrap-resolver.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>propagate-execution-context</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>

        <profile>
            <id>auth-server-remote</id>
            <properties>
                <auth.server>remote</auth.server>
                <auth.server.remote>true</auth.server.remote>
                <auth.server.undertow>false</auth.server.undertow>
                <auth.server.jboss.skip.unpack>true</auth.server.jboss.skip.unpack>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-remote</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.wildfly.core</groupId>
                    <artifactId>wildfly-cli</artifactId>
                    <scope>test</scope>
                    <version>${wildfly.core.version}</version>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>auth-server-wildfly</id>
            <properties>
                <auth.server>wildfly</auth.server>
                <auth.server.jboss>true</auth.server.jboss>
                <auth.server.undertow>false</auth.server.undertow>
                <auth.server.config.property.value>standalone.xml</auth.server.config.property.value>
                <auth.server.config.dir>${auth.server.home}/standalone/configuration</auth.server.config.dir>
                <h2.version>1.3.173</h2.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-managed</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.wildfly.core</groupId>
                    <artifactId>wildfly-cli</artifactId>
                    <scope>test</scope>
                    <version>${wildfly.core.version}</version>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>auth-server-eap</id>
            <properties>
                <auth.server>eap</auth.server>
                <auth.server.jboss>true</auth.server.jboss>
                <auth.server.undertow>false</auth.server.undertow>
                <auth.server.config.property.value>standalone.xml</auth.server.config.property.value>
                <auth.server.config.dir>${auth.server.home}/standalone/configuration</auth.server.config.dir>
                <h2.version>1.3.173</h2.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-managed</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.wildfly.core</groupId>
                    <artifactId>wildfly-cli</artifactId>
                    <scope>test</scope>
                    <version>${wildfly.core.version}</version>
                </dependency>
            </dependencies>
        </profile>

        <profile>
            <id>auth-servers-crossdc-undertow</id>
            <properties>
                <auth.servers.crossdc>true</auth.servers.crossdc>
                <auth.server.undertow.crossdc>true</auth.server.undertow.crossdc>
                <node.name>undertow</node.name>

                <cache.server.crossdc1.jvm.debug.port>6001</cache.server.crossdc1.jvm.debug.port>
                <cache.server.crossdc2.jvm.debug.port>6002</cache.server.crossdc2.jvm.debug.port>


                <!-- default is "n", possible to override by e.g. -Dcache.server.crossdc1.debug.suspend=y -->
                <cache.server.crossdc1.debug.suspend>${auth.server.debug.suspend}</cache.server.crossdc1.debug.suspend>
                <cache.server.crossdc2.debug.suspend>${auth.server.debug.suspend}</cache.server.crossdc2.debug.suspend>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>enforce-profile-activation</id>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireProperty>
                                            <property>cache.server.jboss</property>
                                            <message>Profile "auth-servers-crossdc-undertow" requires activation of another profile: either "cache-server-infinispan" or "cache-server-jdg".</message>
                                            <regex>true</regex>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <node.name>${node.name}</node.name>
                                <pageload.timeout>20000</pageload.timeout>

                                <!-- TODO Same props config is duplicated for undertow. Use separate profile? -->
                                <cache.server.crossdc1.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${cache.server.crossdc1.debug.suspend},address=localhost:${cache.server.crossdc1.jvm.debug.port}
                                </cache.server.crossdc1.jvm.debug.args>
                                <cache.server.crossdc2.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${cache.server.crossdc2.debug.suspend},address=localhost:${cache.server.crossdc2.jvm.debug.port}
                                </cache.server.crossdc2.jvm.debug.args>

                                <keycloak.connectionsInfinispan.hotrodProtocolVersion>${keycloak.connectionsInfinispan.hotrodProtocolVersion}</keycloak.connectionsInfinispan.hotrodProtocolVersion>

                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>auth-servers-crossdc-jboss</id>
            <properties>
                <auth.servers.crossdc>true</auth.servers.crossdc>
                <auth.server.jboss.crossdc>true</auth.server.jboss.crossdc>
                <node.name>jboss</node.name>

                <auth.server.crossdc01.home>${containers.home}/auth-server-${auth.server}-crossdc01</auth.server.crossdc01.home>
                <auth.server.crossdc02.home>${containers.home}/auth-server-${auth.server}-crossdc02</auth.server.crossdc02.home>
                <auth.server.crossdc11.home>${containers.home}/auth-server-${auth.server}-crossdc11</auth.server.crossdc11.home>
                <auth.server.crossdc12.home>${containers.home}/auth-server-${auth.server}-crossdc12</auth.server.crossdc12.home>

                <!-- property specifies keycloak-add-user.json file destination -->
                <auth.server.config.dir>${auth.server.crossdc01.home}/standalone/configuration</auth.server.config.dir>

                <cache.server.crossdc1.jvm.debug.port>6001</cache.server.crossdc1.jvm.debug.port>
                <cache.server.crossdc2.jvm.debug.port>6002</cache.server.crossdc2.jvm.debug.port>
                <auth.server.crossdc01.jvm.debug.port>5001</auth.server.crossdc01.jvm.debug.port>
                <auth.server.crossdc02.jvm.debug.port>5002</auth.server.crossdc02.jvm.debug.port>
                <auth.server.crossdc11.jvm.debug.port>5011</auth.server.crossdc11.jvm.debug.port>
                <auth.server.crossdc12.jvm.debug.port>5012</auth.server.crossdc12.jvm.debug.port>

                <!-- default is "n", possible to override by e.g. -Dauth.server.crossdc01.debug.suspend=y -->
                <cache.server.crossdc1.debug.suspend>${auth.server.debug.suspend}</cache.server.crossdc1.debug.suspend>
                <cache.server.crossdc2.debug.suspend>${auth.server.debug.suspend}</cache.server.crossdc2.debug.suspend>
                <auth.server.crossdc01.debug.suspend>${auth.server.debug.suspend}</auth.server.crossdc01.debug.suspend>
                <auth.server.crossdc02.debug.suspend>${auth.server.debug.suspend}</auth.server.crossdc02.debug.suspend>
                <auth.server.crossdc11.debug.suspend>${auth.server.debug.suspend}</auth.server.crossdc11.debug.suspend>
                <auth.server.crossdc12.debug.suspend>${auth.server.debug.suspend}</auth.server.crossdc12.debug.suspend>
            </properties>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <artifactId>maven-antrun-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>copy-auth-server-crossdc-nodes</id>
                                    <phase>process-resources</phase>
                                    <goals>
                                        <goal>run</goal>
                                    </goals>
                                    <configuration>
                                        <skip>${skip.copy.auth.crossdc.nodes}</skip>
                                        <target>
                                            <move todir="${auth.server.crossdc01.home}">
                                                <fileset dir="${auth.server.home}"/>
                                            </move>
                                            <copy todir="${auth.server.crossdc02.home}">
                                                <fileset dir="${auth.server.crossdc01.home}"/>
                                            </copy>
                                            <copy todir="${auth.server.crossdc11.home}">
                                                <fileset dir="${auth.server.crossdc01.home}"/>
                                            </copy>
                                            <copy todir="${auth.server.crossdc12.home}">
                                                <fileset dir="${auth.server.crossdc01.home}"/>
                                            </copy>
                                        </target>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>enforce-profiles-activation</id>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireProperty>
                                            <property>cache.server.jboss</property>
                                            <message>Profile "auth-servers-crossdc-jboss" requires activation of another profile: either "cache-server-infinispan" or "cache-server-jdg".</message>
                                            <regex>true</regex>
                                        </requireProperty>
                                        <requireProperty>
                                            <property>auth.server.jboss</property>
                                            <message>Profile "auth-servers-crossdc-jboss" requires activation of another profile: either "auth-server-wildfly" or "auth-server-eap".</message>
                                            <regex>true</regex>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>

                                <pageload.timeout>20000</pageload.timeout>

                                <run.h2>true</run.h2>
                                <node.name>${node.name}</node.name>

                                <auth.server.crossdc01.home>${auth.server.crossdc01.home}</auth.server.crossdc01.home>
                                <auth.server.crossdc02.home>${auth.server.crossdc02.home}</auth.server.crossdc02.home>
                                <auth.server.crossdc11.home>${auth.server.crossdc11.home}</auth.server.crossdc11.home>
                                <auth.server.crossdc12.home>${auth.server.crossdc12.home}</auth.server.crossdc12.home>

                                <keycloak.connectionsInfinispan.default.remoteStoreSecurityEnabled>${keycloak.connectionsInfinispan.default.remoteStoreSecurityEnabled}</keycloak.connectionsInfinispan.default.remoteStoreSecurityEnabled>
                                <keycloak.connectionsInfinispan.hotrodProtocolVersion>${keycloak.connectionsInfinispan.hotrodProtocolVersion}</keycloak.connectionsInfinispan.hotrodProtocolVersion>

                                <!--8101-->
                                <auth.server.crossdc01.port.offset>21</auth.server.crossdc01.port.offset>
                                <!--8102-->
                                <auth.server.crossdc02.port.offset>22</auth.server.crossdc02.port.offset>
                                <!--8111-->
                                <auth.server.crossdc11.port.offset>31</auth.server.crossdc11.port.offset>
                                <!--8112-->
                                <auth.server.crossdc12.port.offset>32</auth.server.crossdc12.port.offset>

                                <auth.server.crossdc01.management.port>10011</auth.server.crossdc01.management.port>
                                <auth.server.crossdc02.management.port>10012</auth.server.crossdc02.management.port>
                                <auth.server.crossdc11.management.port>10021</auth.server.crossdc11.management.port>
                                <auth.server.crossdc12.management.port>10022</auth.server.crossdc12.management.port>

                                <!-- TODO Same props config is duplicated for undertow. Use separate profile? -->
                                <cache.server.crossdc1.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${cache.server.crossdc1.debug.suspend},address=localhost:${cache.server.crossdc1.jvm.debug.port}
                                </cache.server.crossdc1.jvm.debug.args>
                                <cache.server.crossdc2.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${cache.server.crossdc2.debug.suspend},address=localhost:${cache.server.crossdc2.jvm.debug.port}
                                </cache.server.crossdc2.jvm.debug.args>

                                <auth.server.crossdc01.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${auth.server.crossdc01.debug.suspend},address=localhost:${auth.server.crossdc01.jvm.debug.port}
                                </auth.server.crossdc01.jvm.debug.args>
                                <auth.server.crossdc02.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${auth.server.crossdc02.debug.suspend},address=localhost:${auth.server.crossdc02.jvm.debug.port}
                                </auth.server.crossdc02.jvm.debug.args>
                                <auth.server.crossdc11.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${auth.server.crossdc11.debug.suspend},address=localhost:${auth.server.crossdc11.jvm.debug.port}
                                </auth.server.crossdc11.jvm.debug.args>
                                <auth.server.crossdc12.jvm.debug.args>
                                    -agentlib:jdwp=transport=dt_socket,server=y,suspend=${auth.server.crossdc12.debug.suspend},address=localhost:${auth.server.crossdc12.jvm.debug.port}
                                </auth.server.crossdc12.jvm.debug.args>

                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>cache-server-infinispan</id>
            <properties>
                <cache.server>infinispan</cache.server>
                <auth.server.crossdc>true</auth.server.crossdc>
                <cache.server.jboss>true</cache.server.jboss>
                <cache.server.config.dir>${cache.server.home}/standalone/configuration</cache.server.config.dir>
                <keycloak.testsuite.logging.pattern>%d{HH:mm:ss,SSS} [%t] %-5p [%c{1.}] %m%n</keycloak.testsuite.logging.pattern>
                <keycloak.connectionsInfinispan.default.remoteStoreSecurityEnabled>false</keycloak.connectionsInfinispan.default.remoteStoreSecurityEnabled>
                <keycloak.connectionsInfinispan.hotrodProtocolVersion>2.8</keycloak.connectionsInfinispan.hotrodProtocolVersion>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-managed</artifactId>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>enforce-profile-activation</id>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireProperty>
                                            <property>auth.servers.crossdc</property>
                                            <message>Profile "cache-server-infinispan" requires activation of another profile: either "auth-servers-crossdc-undertow" or "auth-servers-crossdc-jboss".</message>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <artifactId>maven-dependency-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>unpack-cache-server-infinispan</id>
                                    <phase>generate-resources</phase>
                                    <goals>
                                        <goal>unpack</goal>
                                    </goals>
                                    <configuration>
                                        <artifactItems>
                                            <artifactItem>
                                                <groupId>org.keycloak.testsuite</groupId>
                                                <artifactId>integration-arquillian-servers-cache-server-infinispan</artifactId>
                                                <version>${project.version}</version>
                                                <type>zip</type>
                                                <outputDirectory>${containers.home}</outputDirectory>
                                            </artifactItem>
                                        </artifactItems>
                                        <overWriteIfNewer>true</overWriteIfNewer>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>cache-server-jdg</id>
            <properties>
                <cache.server>jdg</cache.server>
                <auth.server.crossdc>true</auth.server.crossdc>
                <cache.server.jboss>true</cache.server.jboss>
                <cache.server.config.dir>${cache.server.home}/standalone/configuration</cache.server.config.dir>
                <keycloak.testsuite.logging.pattern>%d{HH:mm:ss,SSS} [%t] %-5p [%c{1.}] %m%n</keycloak.testsuite.logging.pattern>
                <keycloak.connectionsInfinispan.default.remoteStoreSecurityEnabled>false</keycloak.connectionsInfinispan.default.remoteStoreSecurityEnabled>
                <keycloak.connectionsInfinispan.hotrodProtocolVersion>2.6</keycloak.connectionsInfinispan.hotrodProtocolVersion>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.wildfly.arquillian</groupId>
                    <artifactId>wildfly-arquillian-container-managed</artifactId>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>enforce-profile-activation</id>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireProperty>
                                            <property>auth.servers.crossdc</property>
                                            <message>Profile "cache-server-jdg" requires activation of another profile: either "auth-servers-crossdc-undertow" or "auth-servers-crossdc-jboss".</message>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <artifactId>maven-dependency-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>unpack-cache-server-jdg</id>
                                    <phase>generate-resources</phase>
                                    <goals>
                                        <goal>unpack</goal>
                                    </goals>
                                    <configuration>
                                        <artifactItems>
                                            <artifactItem>
                                                <groupId>org.keycloak.testsuite</groupId>
                                                <artifactId>integration-arquillian-servers-cache-server-jdg</artifactId>
                                                <version>${project.version}</version>
                                                <type>zip</type>
                                                <outputDirectory>${containers.home}</outputDirectory>
                                            </artifactItem>
                                        </artifactItems>
                                        <overWriteIfNewer>true</overWriteIfNewer>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>auth-server-profile</id>
            <activation>
                <property>
                    <name>keycloak.profile</name>
                </property>
            </activation>
            <properties>
                <auth.server.profile>-Dkeycloak.profile=${keycloak.profile}</auth.server.profile>
            </properties>
        </profile>

        <!--
            profile that enables/disables specified feature, for more details see
            https://keycloak.gitbooks.io/documentation/content/server_installation/topics/profiles.html
        -->
        <profile>
            <id>auth-server-enable-disable-feature</id>
            <properties>
                <auth.server.feature>-Dkeycloak.profile.feature.${feature.name}=${feature.value}</auth.server.feature>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireProperty>
                                            <property>feature.name</property>
                                        </requireProperty>
                                        <requireProperty>
                                            <property>feature.value</property>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>auth-server-cluster-undertow</id>
            <properties>
                <!--disable exclusion pattern for cluster test which is enabled by default in base/pom.xml-->
                <exclude.cluster>-</exclude.cluster>

                <auth.server.undertow>false</auth.server.undertow>
                <auth.server.cluster>true</auth.server.cluster>
                <auth.server.undertow.cluster>true</auth.server.undertow.cluster>

                <auth.server.jboss.skip.unpack>true</auth.server.jboss.skip.unpack>

            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <pageload.timeout>20000</pageload.timeout>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>


        <!-- This is profile for auth-server cluster on JBoss (Wildfly, EAP) -->
        <profile>
            <id>auth-server-cluster</id>
            <properties>
                <!--disable exclusion pattern for cluster test which is enabled by default in base/pom.xml-->
                <exclude.cluster>-</exclude.cluster>

                <auth.server.cluster>true</auth.server.cluster>
                <auth.server.jboss.cluster>true</auth.server.jboss.cluster>

                <auth.server.backend1.home>${containers.home}/auth-server-${auth.server}-backend1</auth.server.backend1.home>
                <auth.server.backend2.home>${containers.home}/auth-server-${auth.server}-backend2</auth.server.backend2.home>

                <auth.server.config.dir>${auth.server.backend1.home}/standalone/configuration</auth.server.config.dir>

                <keycloak.testsuite.logging.pattern>%d{HH:mm:ss,SSS} [%t] %-5p [%c{1.}] %m%n</keycloak.testsuite.logging.pattern>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <!--requireActiveProfile 'auth-server-wildfly/eap' doesn't work unless the profiles are defined in all submodule poms
                                        using requireProperty instead-->
                                        <requireProperty>
                                            <property>auth.server</property>
                                            <regex>(wildfly)|(eap)</regex>
                                            <regexMessage>Profile "auth-server-cluster" requires activation of profile "auth-server-wildfly" or "auth-server-eap".</regexMessage>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <artifactId>maven-antrun-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>copy-auth-server-backend-nodes</id>
                                    <phase>process-resources</phase>
                                    <goals>
                                        <goal>run</goal>
                                    </goals>
                                    <configuration>
                                        <target>
                                            <move todir="${auth.server.backend1.home}">
                                                <fileset dir="${auth.server.home}"/>
                                            </move>
                                            <copy todir="${auth.server.backend2.home}">
                                                <fileset dir="${auth.server.backend1.home}"/>
                                            </copy>
                                        </target>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                        <plugin>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <configuration>
                                <systemPropertyVariables>
                                    <run.h2>true</run.h2>

                                    <auth.server.jboss>false</auth.server.jboss>

                                    <auth.server.backend1.home>${auth.server.backend1.home}</auth.server.backend1.home>
                                    <auth.server.backend2.home>${auth.server.backend2.home}</auth.server.backend2.home>

                                    <!--100-->
                                    <auth.server.backend1.port.offset>101</auth.server.backend1.port.offset>
                                    <auth.server.backend2.port.offset>102</auth.server.backend2.port.offset>
                                    <!--8180-->
                                    <auth.server.backend1.http.port>8181</auth.server.backend1.http.port>
                                    <auth.server.backend2.http.port>8182</auth.server.backend2.http.port>
                                    <!--8543-->
                                    <auth.server.backend1.https.port>8544</auth.server.backend1.https.port>
                                    <auth.server.backend2.https.port>8545</auth.server.backend2.https.port>
                                    <!--10090-->
                                    <auth.server.backend1.management.port>10091</auth.server.backend1.management.port>
                                    <auth.server.backend2.management.port>10092</auth.server.backend2.management.port>
                                    <!--10099-->
                                    <auth.server.backend1.management.port.jmx>10100</auth.server.backend1.management.port.jmx>
                                    <auth.server.backend2.management.port.jmx>10101</auth.server.backend2.management.port.jmx>
                                </systemPropertyVariables>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>


        <profile>
            <id>clean-jpa</id>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.liquibase</groupId>
                            <artifactId>liquibase-maven-plugin</artifactId>
                            <configuration>
                                <changeLogFile>META-INF/jpa-changelog-master.xml</changeLogFile>

                                <url>${keycloak.connectionsJpa.url}</url>
                                <driver>${keycloak.connectionsJpa.driver}</driver>
                                <username>${keycloak.connectionsJpa.user}</username>
                                <password>${keycloak.connectionsJpa.password}</password>

                                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                                <databaseClass>${keycloak.connectionsJpa.liquibaseDatabaseClass}</databaseClass>
                            </configuration>
                            <executions>
                                <execution>
                                    <id>clean-jpa</id>
                                    <phase>clean</phase>
                                    <goals>
                                        <goal>dropAll</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>jdbc-driver-dependency</id>
            <activation>
                <property>
                    <name>jdbc.mvn.artifactId</name>
                </property>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>${jdbc.mvn.groupId}</groupId>
                    <artifactId>${jdbc.mvn.artifactId}</artifactId>
                    <version>${jdbc.mvn.version}</version>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireProperty>
                                            <property>jdbc.mvn.groupId</property>
                                        </requireProperty>
                                        <requireProperty>
                                            <property>jdbc.mvn.version</property>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- Profiles for migration tests-->

        <profile>
            <id>auth-server-migration</id>
            <properties>
                <migration.import.file>target/test-classes/migration-test/migration-realm-${migrated.auth.server.version}.json</migration.import.file>
                <migration.import.props.previous>
                    -Dkeycloak.migration.action=import
                    -Dkeycloak.migration.provider=singleFile
                    -Dkeycloak.migration.file=${migration.import.file}
                    -Dkeycloak.migration.strategy=OVERWRITE_EXISTING
                </migration.import.props.previous>
                <skip.add.user.json>true</skip.add.user.json>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <configuration>
                                    <rules>
                                        <requireProperty>
                                            <property>migrated.auth.server.version</property>
                                        </requireProperty>
                                        <requireProperty>
                                            <property>migration.mode</property>
                                        </requireProperty>
                                    </rules>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <artifactId>maven-dependency-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>unpack-migrated-auth-server-jboss</id>
                                    <phase>generate-resources</phase>
                                    <goals>
                                        <goal>unpack</goal>
                                    </goals>
                                    <configuration>
                                        <artifactItems>
                                            <artifactItem>
                                                <groupId>org.keycloak.testsuite</groupId>
                                                <artifactId>integration-arquillian-migration-server</artifactId>
                                                <version>${project.version}</version>
                                                <type>zip</type>
                                            </artifactItem>
                                        </artifactItems>
                                        <outputDirectory>${containers.home}</outputDirectory>
                                        <overWriteIfNewer>true</overWriteIfNewer>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                        <plugin>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <configuration>
                                <systemPropertyVariables>
                                    <migrated.auth.server.version>${migrated.auth.server.version}</migrated.auth.server.version>
                                    <auth.server.jboss.migration>true</auth.server.jboss.migration>
                                    <keycloak.migration.home>${containers.home}/auth-server-migration</keycloak.migration.home>
                                    <migration.import.props.previous>${migration.import.props.previous}</migration.import.props.previous>
                                </systemPropertyVariables>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>migration-prod</id>
            <activation>
                <property>
                    <name>migration.import.file.name</name>
                </property>
            </activation>
            <properties>
                <migration.import.file>target/test-classes/migration-test/${migration.import.file.name}</migration.import.file>
            </properties>
        </profile>

        <profile>
            <id>common-test-dependencies</id>
            <activation>
                <file>
                    <exists>src/test</exists>
                    <!--    ^ only activate this profile in submodules that have actual tests -->
                </file>
            </activation>
            <dependencies>
                <!-- TEST DEPENDENCIES -->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </dependency>

                <!--Dependencies for creaper:-->

                <dependency>
                    <groupId>org.wildfly.extras.creaper</groupId>
                    <artifactId>creaper-commands</artifactId>
                    <version>${version.org.wildfly.extras.creaper}</version>
                    <exclusions>
                        <exclusion>
                            <groupId>com.google.guava</groupId>
                            <artifactId>guava</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.junit</groupId>
                    <artifactId>arquillian-junit-container</artifactId>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.graphene</groupId>
                    <artifactId>graphene-webdriver</artifactId>
                    <version>${arquillian-graphene.version}</version>
                    <type>pom</type>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.protocol</groupId>
                    <artifactId>arquillian-protocol-servlet</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.extension</groupId>
                    <artifactId>arquillian-phantom-driver</artifactId>
                    <version>1.2.1.Final</version>
                </dependency>
                <dependency>
                    <groupId>org.jboss.arquillian.graphene</groupId>
                    <artifactId>arquillian-browser-screenshooter</artifactId>
                    <version>${arquillian-graphene.version}</version>
                    <exclusions>
                        <exclusion>
                            <groupId>org.apache.commons</groupId>
                            <artifactId>commons-io</artifactId>
                        </exclusion>
                        <exclusion>
                            <groupId>com.google.guava</groupId>
                            <artifactId>guava</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>

                <dependency>
                    <groupId>io.appium</groupId>
                    <artifactId>java-client</artifactId>
                    <version>${appium.client.version}</version>
                </dependency>

                <dependency>
                    <groupId>org.apache.httpcomponents</groupId>
                    <artifactId>httpclient</artifactId>
                    <version>4.5.3</version>
                </dependency>
                <dependency>
                    <groupId>jfree</groupId>
                    <artifactId>jfreechart</artifactId>
                    <version>1.0.13</version>
                </dependency>

                <dependency>
                    <groupId>org.keycloak.testsuite</groupId>
                    <artifactId>integration-arquillian-test-apps-servlets</artifactId>
                    <version>${project.version}</version>
                </dependency>

                <dependency>
                    <groupId>org.keycloak.testsuite</groupId>
                    <artifactId>integration-arquillian-util</artifactId>
                    <version>${project.version}</version>
                </dependency>

                <!--                <dependency>
                    <groupId>org.arquillian.extension</groupId>
                    <artifactId>arquillian-recorder-reporter-impl</artifactId>
                    <version>1.1.0.Final</version>
                </dependency>-->

                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </dependency>

                <dependency>
                    <groupId>org.apache.ant</groupId>
                    <artifactId>ant</artifactId>
                    <version>1.9.2</version>
                    <type>jar</type>
                </dependency>

                <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                    <scope>compile</scope>
                </dependency>

                <dependency>
                    <groupId>org.apache.sshd</groupId>
                    <artifactId>sshd-core</artifactId>
                    <version>1.2.0</version>
                </dependency>

                <!-- Email Test Server -->
                <dependency>
                    <groupId>com.icegreen</groupId>
                    <artifactId>greenmail</artifactId>
                    <exclusions>
                        <exclusion>
                            <groupId>org.slf4j</groupId>
                            <artifactId>slf4j-api</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
                <dependency>
                    <groupId>org.subethamail</groupId>
                    <artifactId>subethasmtp</artifactId>
                    <exclusions>
                        <exclusion>
                            <groupId>org.slf4j</groupId>
                            <artifactId>slf4j-api</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>

                <!-- Keycloak deps for tests -->

                <dependency>
                    <groupId>org.keycloak</groupId>
                    <artifactId>keycloak-dependencies-server-all</artifactId>
                    <type>pom</type>
                    <exclusions>
                        <exclusion>
                            <groupId>com.google.guava</groupId>
                            <artifactId>guava</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>

                <dependency>
                    <groupId>org.keycloak</groupId>
                    <artifactId>keycloak-admin-client</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.keycloak</groupId>
                    <artifactId>keycloak-client-registration-api</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.keycloak</groupId>
                    <artifactId>keycloak-services</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.keycloak</groupId>
                    <artifactId>keycloak-authz-client</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.keycloak</groupId>
                    <artifactId>keycloak-wildfly-adduser</artifactId>
                </dependency>

                <!--UNDERTOW-->

                <dependency>
                    <groupId>org.keycloak.testsuite</groupId>
                    <artifactId>integration-arquillian-servers-auth-server-undertow</artifactId>
                    <version>${project.version}</version>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.container</groupId>
                    <artifactId>undertow-embedded</artifactId>
                    <version>${undertow-embedded.version}</version>
                </dependency>

                <dependency>
                    <groupId>org.jboss.resteasy</groupId>
                    <artifactId>resteasy-client</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.resteasy</groupId>
                    <artifactId>resteasy-undertow</artifactId>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.jboss.resteasy</groupId>
                    <artifactId>resteasy-multipart-provider</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.jboss.resteasy</groupId>
                    <artifactId>resteasy-jackson2-provider</artifactId>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-annotations</artifactId>
                </dependency>

                <dependency>
                    <groupId>org.bouncycastle</groupId>
                    <artifactId>bcprov-jdk15on</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.bouncycastle</groupId>
                    <artifactId>bcpkix-jdk15on</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-all</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.infinispan</groupId>
                    <artifactId>infinispan-core</artifactId>
                </dependency>

                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>${postgresql.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.mariadb.jdbc</groupId>
                    <artifactId>mariadb-java-client</artifactId>
                    <version>${mariadb.version}</version>
                </dependency>

                <!-- CLI -->
                <!--
                  - This dependency must come after org.bouncycastle dependencies since it contains BC classes,
                  - and MAC signature check on classes would fail otherwise with:
                  - 'java.lang.SecurityException: JCE cannot authenticate the provider BC'
                -->
                <dependency>
                    <groupId>org.keycloak</groupId>
                    <artifactId>keycloak-client-cli-dist</artifactId>
                    <type>zip</type>
                </dependency>

                <dependency>
                    <groupId>org.osgi</groupId>
                    <artifactId>org.osgi.enterprise</artifactId>
                    <scope>provided</scope>
                </dependency>

            </dependencies>

            <dependencyManagement>
                <dependencies>
                    <!-- we need to specify the correct version because of conflict in arquillian-drone-webdriver-depchain -->
                    <dependency>
                        <groupId>org.seleniumhq.selenium</groupId>
                        <artifactId>htmlunit-driver</artifactId>
                        <version>2.27</version>
                    </dependency>
                </dependencies>
            </dependencyManagement>

            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <artifactId>maven-dependency-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>xml-maven-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.liquibase</groupId>
                        <artifactId>liquibase-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>no-offset</id>
            <properties>
                <auth.server.port.offset>0</auth.server.port.offset>
                <auth.server.http.port>8080</auth.server.http.port>
                <auth.server.https.port>8443</auth.server.https.port>
                <auth.server.management.port>9990</auth.server.management.port>
                <auth.server.management.port.jmx>9999</auth.server.management.port.jmx>
            </properties>
        </profile>

        <profile>
            <id>java11-auth-server</id> <!-- a temporary workaround; TODO remove this once Java 11 is officially supported by Arquillian -->
            <properties>
                <auth.server.jvm.args.extra>--add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED --add-modules=java.se</auth.server.jvm.args.extra>
            </properties>
        </profile>

        <profile>
            <id>java11-app-server</id> <!-- a temporary workaround; TODO remove this once Java 11 is officially supported by Arquillian -->
            <properties>
                <app.server.jvm.args.extra>--add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED --add-modules=java.se</app.server.jvm.args.extra>
            </properties>
        </profile>

    </profiles>

</project>