keycloak-developers
Changes
forms/common-themes/src/main/resources/theme/base/admin/resources/templates/kc-provider-config.html 5(+4 -1)
services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticator.java 42(+29 -13)
services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticatorFactory.java 20(+13 -7)
services/src/main/java/org/keycloak/protocol/oidc/installation/KeycloakOIDCClientInstallation.java 2(+1 -1)
testsuite/integration-arquillian/servers/eap7/pom.xml 289(+143 -146)
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/SAMLServletWithLogout.java 2(+1 -1)
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java 103(+84 -19)
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/roles/RoleCompositeRoles.java 2(+1 -1)
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java 1(+0 -1)
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java 18(+10 -8)
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/AbstractClientTest.java 2(+1 -1)
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/ClientInstallationTest.java 4(+2 -2)
testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json 125(+89 -36)
testsuite/integration-arquillian/tests/pom.xml 119(+58 -61)
Details
diff --git a/docbook/auth-server-docs/reference/en/en-US/modules/events.xml b/docbook/auth-server-docs/reference/en/en-US/modules/events.xml
index bb25a28..af86075 100755
--- a/docbook/auth-server-docs/reference/en/en-US/modules/events.xml
+++ b/docbook/auth-server-docs/reference/en/en-US/modules/events.xml
@@ -55,7 +55,7 @@
You can exclude one or more events by editing <literal>standalone/configuration/keycloak-server.json</literal>
and adding for example:
<programlisting><![CDATA[
-"eventListener": {
+"eventsListener": {
"email": {
"exclude-events": [ "UPDATE_TOTP", "REMOVE_TOTP" ]
}
diff --git a/forms/common-themes/src/main/resources/theme/base/account/totp.ftl b/forms/common-themes/src/main/resources/theme/base/account/totp.ftl
index 1f261e7..3fa4ae9 100755
--- a/forms/common-themes/src/main/resources/theme/base/account/totp.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/account/totp.ftl
@@ -48,7 +48,7 @@
</div>
<div class="col-sm-10 col-md-10">
- <input type="text" class="form-control" id="totp" name="totp" autofocus>
+ <input type="text" class="form-control" id="totp" name="totp" autocomplete="off" autofocus>
<input type="hidden" id="totpSecret" name="totpSecret" value="${totp.totpSecret}" />
</div>
</div>
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/templates/kc-provider-config.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/templates/kc-provider-config.html
index 54ebdae..e847c59 100755
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/templates/kc-provider-config.html
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/templates/kc-provider-config.html
@@ -2,9 +2,12 @@
<div data-ng-repeat="option in properties" class="form-group" data-ng-controller="ProviderConfigCtrl">
<label class="col-md-2 control-label">{{:: option.label | translate}}</label>
- <div class="col-sm-6" data-ng-hide="option.type == 'boolean' || option.type == 'List' || option.type == 'Role' || option.type == 'ClientList'">
+ <div class="col-sm-6" data-ng-hide="option.type == 'boolean' || option.type == 'List' || option.type == 'Role' || option.type == 'ClientList' || option.type == 'Password'">
<input class="form-control" type="text" data-ng-model="config[ option.name ]" >
</div>
+ <div class="col-sm-6" data-ng-show="option.type == 'Password'">
+ <input class="form-control" type="password" data-ng-model="config[ option.name ]" >
+ </div>
<div class="col-sm-6" data-ng-show="option.type == 'boolean'">
<input ng-model="config[ option.name ]" value="'true'" name="option.name" id="option.name" onoffswitchstring on-text="{{:: 'onText' | translate}}" off-text="{{:: 'offText' | translate}}"/>
</div>
diff --git a/forms/common-themes/src/main/resources/theme/base/login/login-config-totp.ftl b/forms/common-themes/src/main/resources/theme/base/login/login-config-totp.ftl
index fc264f9..649a833 100755
--- a/forms/common-themes/src/main/resources/theme/base/login/login-config-totp.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/login-config-totp.ftl
@@ -11,7 +11,7 @@
<label for="otp" class="${properties.kcLabelClass!}">${msg("loginTotpOneTime")}</label>
</div>
<div class="${properties.kcInputWrapperClass!}">
- <input type="text" id="totp" name="totp" class="${properties.kcInputClass!}" />
+ <input type="text" id="totp" name="totp" autocomplete="off" class="${properties.kcInputClass!}" />
</div>
<input type="hidden" id="totpSecret" name="totpSecret" value="${totp.totpSecret}" />
</div>
diff --git a/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl b/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl
index 12cda21..f7068a6 100755
--- a/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl
+++ b/forms/common-themes/src/main/resources/theme/base/login/login-totp.ftl
@@ -12,7 +12,7 @@
</div>
<div class="${properties.kcInputWrapperClass!}">
- <input id="totp" name="totp" type="text" class="${properties.kcInputClass!}" autofocus />
+ <input id="totp" name="totp" autocomplete="off" type="text" class="${properties.kcInputClass!}" autofocus />
</div>
</div>
diff --git a/model/api/src/main/java/org/keycloak/provider/ProviderConfigProperty.java b/model/api/src/main/java/org/keycloak/provider/ProviderConfigProperty.java
index 55524a0..04857ec 100755
--- a/model/api/src/main/java/org/keycloak/provider/ProviderConfigProperty.java
+++ b/model/api/src/main/java/org/keycloak/provider/ProviderConfigProperty.java
@@ -10,6 +10,7 @@ public class ProviderConfigProperty {
public static final String ROLE_TYPE="Role";
public static final String LIST_TYPE="List";
public static final String CLIENT_LIST_TYPE="ClientList";
+ public static final String PASSWORD="Password";
protected String name;
protected String label;
diff --git a/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticator.java b/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticator.java
index 02aaa01..99afa93 100644
--- a/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticator.java
+++ b/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticator.java
@@ -37,8 +37,9 @@ import static org.keycloak.models.utils.KeycloakModelUtils.hasRole;
* </p>
* <p>
* <h2>Role</h2>
- * A role can be used to control the OTP authentication. If the user has the specified role the OTP authentication is forced.
- * Otherwise if no role is selected the setting is ignored.
+ * A role can be used to control the OTP authentication. If the user has the specified skip OTP role then OTP authentication is skipped for the user.
+ * If the user has the specified force OTP role, then the OTP authentication is required for the user.
+ * If not configured, e.g. if no role is selected, then this setting is ignored.
* <p>
* </p>
* <p>
@@ -67,9 +68,11 @@ public class ConditionalOtpFormAuthenticator extends OTPFormAuthenticator {
public static final String OTP_CONTROL_USER_ATTRIBUTE = "otpControlAttribute";
+ public static final String SKIP_OTP_ROLE = "skipOtpRole";
+
public static final String FORCE_OTP_ROLE = "forceOtpRole";
- public static final String NO_OTP_REQUIRED_FOR_HTTP_HEADER = "noOtpRequiredForHeaderPattern";
+ public static final String SKIP_OTP_FOR_HTTP_HEADER = "noOtpRequiredForHeaderPattern";
public static final String FORCE_OTP_FOR_HTTP_HEADER = "forceOtpForHeaderPattern";
@@ -88,7 +91,7 @@ public class ConditionalOtpFormAuthenticator extends OTPFormAuthenticator {
return;
}
- if (tryConcludeBasedOn(voteForUserForceOtpRole(context, config), context)) {
+ if (tryConcludeBasedOn(voteForUserRole(context, config), context)) {
return;
}
@@ -96,14 +99,14 @@ public class ConditionalOtpFormAuthenticator extends OTPFormAuthenticator {
return;
}
- if (tryConcludeBasedOn(voteForDefaultFallback(context, config), context)) {
+ if (tryConcludeBasedOn(voteForDefaultFallback(config), context)) {
return;
}
showOtpForm(context);
}
- private OtpDecision voteForDefaultFallback(AuthenticationFlowContext context, Map<String, String> config) {
+ private OtpDecision voteForDefaultFallback(Map<String, String> config) {
if (!config.containsKey(DEFAULT_OTP_OUTCOME)) {
return ABSTAIN;
@@ -171,14 +174,14 @@ public class ConditionalOtpFormAuthenticator extends OTPFormAuthenticator {
private OtpDecision voteForHttpHeaderMatchesPattern(AuthenticationFlowContext context, Map<String, String> config) {
- if (!config.containsKey(FORCE_OTP_FOR_HTTP_HEADER) && !config.containsKey(NO_OTP_REQUIRED_FOR_HTTP_HEADER)) {
+ if (!config.containsKey(FORCE_OTP_FOR_HTTP_HEADER) && !config.containsKey(SKIP_OTP_FOR_HTTP_HEADER)) {
return ABSTAIN;
}
MultivaluedMap<String, String> requestHeaders = context.getHttpRequest().getHttpHeaders().getRequestHeaders();
//Inverted to allow white-lists, e.g. for specifying trusted remote hosts: X-Forwarded-Host: (1.2.3.4|1.2.3.5)
- if (containsMatchingRequestHeader(requestHeaders, config.get(NO_OTP_REQUIRED_FOR_HTTP_HEADER))) {
+ if (containsMatchingRequestHeader(requestHeaders, config.get(SKIP_OTP_FOR_HTTP_HEADER))) {
return SKIP_OTP;
}
@@ -216,19 +219,32 @@ public class ConditionalOtpFormAuthenticator extends OTPFormAuthenticator {
return false;
}
- private OtpDecision voteForUserForceOtpRole(AuthenticationFlowContext context, Map<String, String> config) {
+ private OtpDecision voteForUserRole(AuthenticationFlowContext context, Map<String, String> config) {
- if (!config.containsKey(FORCE_OTP_ROLE)) {
+ if (!config.containsKey(SKIP_OTP_ROLE) && !config.containsKey(FORCE_OTP_ROLE)) {
return ABSTAIN;
}
- RoleModel forceOtpRole = getRoleFromString(context.getRealm(), config.get(FORCE_OTP_ROLE));
- UserModel user = context.getUser();
+ if (userHasRole(context, config.get(SKIP_OTP_ROLE))) {
+ return SKIP_OTP;
+ }
- if (hasRole(user.getRoleMappings(), forceOtpRole)) {
+ if (userHasRole(context, config.get(FORCE_OTP_ROLE))) {
return SHOW_OTP;
}
return ABSTAIN;
}
+
+ private boolean userHasRole(AuthenticationFlowContext context, String roleName) {
+
+ if (roleName == null) {
+ return false;
+ }
+
+ RoleModel role = getRoleFromString(context.getRealm(), roleName);
+ UserModel user = context.getUser();
+
+ return hasRole(user.getRoleMappings(), role);
+ }
}
diff --git a/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticatorFactory.java b/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticatorFactory.java
index 17c9620..8dd5ade 100755
--- a/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticatorFactory.java
+++ b/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticatorFactory.java
@@ -98,20 +98,26 @@ public class ConditionalOtpFormAuthenticatorFactory implements AuthenticatorFact
"If attribute value is 'force' then OTP is always required. " +
"If value is 'skip' the OTP auth is skipped. Otherwise this check is ignored.");
+ ProviderConfigProperty skipOtpRole = new ProviderConfigProperty();
+ skipOtpRole.setType(ROLE_TYPE);
+ skipOtpRole.setName(SKIP_OTP_ROLE);
+ skipOtpRole.setLabel("Skip OTP for Role");
+ skipOtpRole.setHelpText("OTP is always skipped if user has the given Role.");
+
ProviderConfigProperty forceOtpRole = new ProviderConfigProperty();
forceOtpRole.setType(ROLE_TYPE);
forceOtpRole.setName(FORCE_OTP_ROLE);
forceOtpRole.setLabel("Force OTP for Role");
forceOtpRole.setHelpText("OTP is always required if user has the given Role.");
- ProviderConfigProperty noOtpRequiredForHttpHeader = new ProviderConfigProperty();
- noOtpRequiredForHttpHeader.setType(STRING_TYPE);
- noOtpRequiredForHttpHeader.setName(NO_OTP_REQUIRED_FOR_HTTP_HEADER);
- noOtpRequiredForHttpHeader.setLabel("No OTP for Header");
- noOtpRequiredForHttpHeader.setHelpText("OTP required if a HTTP request header does not match the given pattern." +
+ ProviderConfigProperty skipOtpForHttpHeader = new ProviderConfigProperty();
+ skipOtpForHttpHeader.setType(STRING_TYPE);
+ skipOtpForHttpHeader.setName(SKIP_OTP_FOR_HTTP_HEADER);
+ skipOtpForHttpHeader.setLabel("Skip OTP for Header");
+ skipOtpForHttpHeader.setHelpText("OTP is skipped if a HTTP request header does matches the given pattern." +
"Can be used to specify trusted networks via: X-Forwarded-Host: (1.2.3.4|1.2.3.5)." +
"In this case requests from 1.2.3.4 and 1.2.3.5 come from a trusted source.");
- noOtpRequiredForHttpHeader.setDefaultValue("");
+ skipOtpForHttpHeader.setDefaultValue("");
ProviderConfigProperty forceOtpForHttpHeader = new ProviderConfigProperty();
forceOtpForHttpHeader.setType(STRING_TYPE);
@@ -127,6 +133,6 @@ public class ConditionalOtpFormAuthenticatorFactory implements AuthenticatorFact
defaultOutcome.setDefaultValue(asList(SKIP, FORCE));
defaultOutcome.setHelpText("What to do in case of every check abstains. Defaults to force OTP authentication.");
- return asList(forceOtpUserAttribute, forceOtpRole, noOtpRequiredForHttpHeader, forceOtpForHttpHeader, defaultOutcome);
+ return asList(forceOtpUserAttribute, skipOtpRole, forceOtpRole, skipOtpForHttpHeader, forceOtpForHttpHeader, defaultOutcome);
}
}
diff --git a/services/src/main/java/org/keycloak/protocol/oidc/installation/KeycloakOIDCClientInstallation.java b/services/src/main/java/org/keycloak/protocol/oidc/installation/KeycloakOIDCClientInstallation.java
index bd87517..8a60449 100755
--- a/services/src/main/java/org/keycloak/protocol/oidc/installation/KeycloakOIDCClientInstallation.java
+++ b/services/src/main/java/org/keycloak/protocol/oidc/installation/KeycloakOIDCClientInstallation.java
@@ -78,7 +78,7 @@ public class KeycloakOIDCClientInstallation implements ClientInstallationProvide
@Override
public String getDisplayType() {
- return "Keycloak OIDC keycloak.json";
+ return "Keycloak OIDC JSON";
}
@Override
diff --git a/testsuite/integration-arquillian/pom.xml b/testsuite/integration-arquillian/pom.xml
index 65bc4ab..a2a35d0 100644
--- a/testsuite/integration-arquillian/pom.xml
+++ b/testsuite/integration-arquillian/pom.xml
@@ -30,7 +30,7 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
- <version>1.0</version>
+ <version>1.0.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
diff --git a/testsuite/integration-arquillian/servers/eap7/src/main/xslt/add-dialect-logger.xsl b/testsuite/integration-arquillian/servers/eap7/src/main/xslt/add-dialect-logger.xsl
new file mode 100644
index 0000000..b5dc8c4
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/eap7/src/main/xslt/add-dialect-logger.xsl
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ version="2.0"
+ exclude-result-prefixes="xalan">
+
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xalan:indent-amount="4" standalone="no"/>
+
+ <xsl:variable name="nsDS" select="'urn:jboss:domain:logging:'"/>
+
+ <xsl:template match="//*[local-name()='subsystem' and starts-with(namespace-uri(), $nsDS)]
+ /*[local-name()='root-logger' and starts-with(namespace-uri(), $nsDS)]">
+ <logger category="org.hibernate.dialect.Dialect">
+ <level name="ALL"/>
+ </logger>
+ <xsl:copy>
+ <xsl:apply-templates select="@* | node()" />
+ </xsl:copy>
+ </xsl:template>
+
+ <!-- Copy everything else. -->
+ <xsl:template match="@* | node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@* | node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/testsuite/integration-arquillian/servers/pom.xml b/testsuite/integration-arquillian/servers/pom.xml
index 39111cb..c91ada5 100644
--- a/testsuite/integration-arquillian/servers/pom.xml
+++ b/testsuite/integration-arquillian/servers/pom.xml
@@ -24,10 +24,9 @@
</modules>
</profile>
<profile>
- <id>auth-server-eap6</id>
+ <id>auth-server-eap7</id>
<modules>
- <!--doesn't work yet, WIP-->
- <module>eap6</module>
+ <module>eap7</module>
</modules>
</profile>
</profiles>
diff --git a/testsuite/integration-arquillian/servers/wildfly/pom.xml b/testsuite/integration-arquillian/servers/wildfly/pom.xml
index c6fc965..99fc577 100644
--- a/testsuite/integration-arquillian/servers/wildfly/pom.xml
+++ b/testsuite/integration-arquillian/servers/wildfly/pom.xml
@@ -209,31 +209,6 @@
</execution>
</executions>
</plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>xml-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>configure-adapter-subsystem</id>
- <phase>process-resources</phase>
- <goals>
- <goal>transform</goal>
- </goals>
- <configuration>
- <transformationSets>
- <transformationSet>
- <dir>${keycloak.server.home}/standalone/configuration</dir>
- <includes>
- <include>standalone.xml</include>
- </includes>
- <stylesheet>src/main/xslt/standalone.xsl</stylesheet>
- <outputDir>${keycloak.server.home}/standalone/configuration</outputDir>
- </transformationSet>
- </transformationSets>
- </configuration>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
</profile>
@@ -273,7 +248,6 @@
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
<executions>
<execution>
<id>copy-keystore</id>
@@ -309,7 +283,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
- <version>1.4</version>
<executions>
<execution>
<id>enforce-properties</id>
diff --git a/testsuite/integration-arquillian/servers/wildfly/src/main/xslt/datasource.xsl b/testsuite/integration-arquillian/servers/wildfly/src/main/xslt/datasource.xsl
index 0c6b3e2..66e80fe 100644
--- a/testsuite/integration-arquillian/servers/wildfly/src/main/xslt/datasource.xsl
+++ b/testsuite/integration-arquillian/servers/wildfly/src/main/xslt/datasource.xsl
@@ -30,7 +30,7 @@
<xsl:param name="pool.prefill" select="'true'"/>
<xsl:variable name="newDatasourceDefinition">
- <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
+ <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" use-java-context="true">
<connection-url>
<xsl:value-of select="$jdbc.url"/>
</connection-url>
diff --git a/testsuite/integration-arquillian/tests/adapters/as7/pom.xml b/testsuite/integration-arquillian/tests/adapters/as7/pom.xml
index 6abbae8..e48bab0 100644
--- a/testsuite/integration-arquillian/tests/adapters/as7/pom.xml
+++ b/testsuite/integration-arquillian/tests/adapters/as7/pom.xml
@@ -15,22 +15,28 @@
<as7.version>7.1.1.Final</as7.version>
<app.server.as7.home>${containers.home}/jboss-as-${as7.version}</app.server.as7.home>
<adapter.libs.as7>${containers.home}/keycloak-as7-adapter-dist</adapter.libs.as7>
+ <startup.timeout.sec>150</startup.timeout.sec>
</properties>
<dependencies>
<dependency>
+ <groupId>org.wildfly</groupId>
+ <artifactId>wildfly-arquillian-container-managed</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-dist</artifactId>
<version>${as7.version}</version>
<type>zip</type>
</dependency>
<dependency>
- <groupId>org.wildfly</groupId>
- <artifactId>wildfly-arquillian-container-managed</artifactId>
+ <groupId>org.keycloak</groupId>
+ <artifactId>keycloak-as7-adapter-dist</artifactId>
+ <type>zip</type>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
- <artifactId>keycloak-eap6-adapter-dist</artifactId>
+ <artifactId>keycloak-saml-as7-adapter-dist</artifactId>
<type>zip</type>
</dependency>
</dependencies>
@@ -70,6 +76,13 @@
<type>zip</type>
<outputDirectory>${adapter.libs.as7}</outputDirectory>
</artifactItem>
+ <artifactItem>
+ <groupId>org.keycloak</groupId>
+ <artifactId>keycloak-saml-as7-adapter-dist</artifactId>
+ <version>${project.version}</version>
+ <type>zip</type>
+ <outputDirectory>${adapter.libs.as7}</outputDirectory>
+ </artifactItem>
</artifactItems>
</configuration>
</execution>
@@ -79,15 +92,36 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<app.server.as7>true</app.server.as7>
<app.server.as7.home>${app.server.as7.home}</app.server.as7.home>
<adapter.libs.as7>${adapter.libs.as7}</adapter.libs.as7>
+ <startup.timeout.sec>${startup.timeout.sec}</startup.timeout.sec>
+ <adapter.as7.jdk7.path>${adapter.as7.jdk7.path}</adapter.as7.jdk7.path>
</systemPropertyVariables>
</configuration>
</plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>enforce-properties</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireProperty>
+ <property>adapter.as7.jdk7.path</property>
+ </requireProperty>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
@@ -102,35 +136,6 @@
<properties>
<adapter.libs.as7>${app.server.as7.home}</adapter.libs.as7>
</properties>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>xml-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>configure-adapter-subsystem</id>
- <phase>process-resources</phase>
- <goals>
- <goal>transform</goal>
- </goals>
- <configuration>
- <transformationSets>
- <transformationSet>
- <dir>${app.server.as7.home}/standalone/configuration</dir>
- <includes>
- <include>standalone.xml</include>
- </includes>
- <stylesheet>src/main/xslt/standalone.xsl</stylesheet>
- <outputDir>${app.server.as7.home}/standalone/configuration</outputDir>
- </transformationSet>
- </transformationSets>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
</profile>
</profiles>
</project>
diff --git a/testsuite/integration-arquillian/tests/adapters/as7/src/main/xslt/arquillian.xsl b/testsuite/integration-arquillian/tests/adapters/as7/src/main/xslt/arquillian.xsl
index 9ba1e94..1ffc5c3 100644
--- a/testsuite/integration-arquillian/tests/adapters/as7/src/main/xslt/arquillian.xsl
+++ b/testsuite/integration-arquillian/tests/adapters/as7/src/main/xslt/arquillian.xsl
@@ -20,6 +20,8 @@
<property name="managementAddress">localhost</property>
<property name="managementProtocol">remote</property>
<property name="managementPort">${app.server.management.port.jmx}</property>
+ <property name="startupTimeoutInSeconds">${startup.timeout.sec}</property>
+ <property name="javaHome">${adapter.as7.jdk7.path}</property>
</configuration>
</container>
diff --git a/testsuite/integration-arquillian/tests/adapters/eap6/pom.xml b/testsuite/integration-arquillian/tests/adapters/eap6/pom.xml
index a427bdb..300d4b6 100644
--- a/testsuite/integration-arquillian/tests/adapters/eap6/pom.xml
+++ b/testsuite/integration-arquillian/tests/adapters/eap6/pom.xml
@@ -14,20 +14,21 @@
<properties>
<app.server.eap6.home>${containers.home}/jboss-eap-6.4</app.server.eap6.home>
<adapter.libs.eap6>${containers.home}/keycloak-eap6-adapter-dist</adapter.libs.eap6>
+ <version.adapter.dist>${project.version}</version.adapter.dist>
</properties>
<dependencies>
<dependency>
+ <groupId>org.wildfly</groupId>
+ <artifactId>wildfly-arquillian-container-managed</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-dist</artifactId>
<version>${jboss.version}</version>
<type>zip</type>
</dependency>
<dependency>
- <groupId>org.wildfly</groupId>
- <artifactId>wildfly-arquillian-container-managed</artifactId>
- </dependency>
- <dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-eap6-adapter-dist</artifactId>
<type>zip</type>
@@ -50,10 +51,21 @@
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemPropertyVariables>
+ <app.server.eap6>true</app.server.eap6>
+ <app.server.eap6.home>${app.server.eap6.home}</app.server.eap6.home>
+ <adapter.libs.eap6>${adapter.libs.eap6}</adapter.libs.eap6>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
- <id>unpack-as7-and-adapter</id>
+ <id>unpack-eap6-with-adapters</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
@@ -70,7 +82,7 @@
<artifactItem>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-eap6-adapter-dist</artifactId>
- <version>${project.version}</version>
+ <version>${version.adapter.dist}</version>
<type>zip</type>
<outputDirectory>${adapter.libs.eap6}</outputDirectory>
</artifactItem>
@@ -86,58 +98,17 @@
</execution>
</executions>
</plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.18.1</version>
- <configuration>
- <systemPropertyVariables>
- <app.server.eap6>true</app.server.eap6>
- <app.server.eap6.home>${app.server.eap6.home}</app.server.eap6.home>
- <adapter.libs.eap6>${adapter.libs.eap6}</adapter.libs.eap6>
- </systemPropertyVariables>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>xml-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>configure-adapter-subsystem</id>
- <phase>process-resources</phase>
- <goals>
- <goal>transform</goal>
- </goals>
- <configuration>
- <transformationSets>
- <transformationSet>
- <dir>${app.server.eap6.home}/standalone/configuration</dir>
- <includes>
- <include>standalone.xml</include>
- </includes>
- <stylesheet>src/main/xslt/standalone.xsl</stylesheet>
- <outputDir>${app.server.eap6.home}/standalone/configuration</outputDir>
- </transformationSet>
- </transformationSets>
- </configuration>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
<profiles>
<profile>
- <id>adapter-libs-provided</id>
- <activation>
+ <id>adapter-jdk</id>
+ <activation>
<property>
- <name>!adapter.libs.bundled</name>
+ <name>adapter.jdk</name>
</property>
</activation>
- <properties>
- <adapter.libs.eap6>${app.server.eap6.home}</adapter.libs.eap6>
- </properties>
<build>
<plugins>
<plugin>
@@ -145,7 +116,7 @@
<artifactId>xml-maven-plugin</artifactId>
<executions>
<execution>
- <id>configure-adapter-subsystem</id>
+ <id>add-java-home-to-arquillian-xml</id>
<phase>process-resources</phase>
<goals>
<goal>transform</goal>
@@ -153,12 +124,18 @@
<configuration>
<transformationSets>
<transformationSet>
- <dir>${app.server.eap6.home}/standalone/configuration</dir>
+ <dir>${project.build.directory}/dependency</dir>
<includes>
- <include>standalone.xml</include>
+ <include>arquillian.xml</include>
</includes>
- <stylesheet>src/main/xslt/standalone.xsl</stylesheet>
- <outputDir>${app.server.eap6.home}/standalone/configuration</outputDir>
+ <stylesheet>src/main/xslt/arquillian_jdk.xsl</stylesheet>
+ <parameters>
+ <parameter>
+ <name>javaHome</name>
+ <value>${adapter.jdk}</value>
+ </parameter>
+ </parameters>
+ <outputDir>${project.build.directory}/dependency</outputDir>
</transformationSet>
</transformationSets>
</configuration>
@@ -169,6 +146,17 @@
</build>
</profile>
<profile>
+ <id>adapter-libs-provided</id>
+ <activation>
+ <property>
+ <name>!adapter.libs.bundled</name>
+ </property>
+ </activation>
+ <properties>
+ <adapter.libs.eap6>${app.server.eap6.home}</adapter.libs.eap6>
+ </properties>
+ </profile>
+ <profile>
<id>ssl</id>
<activation>
<property>
@@ -204,7 +192,6 @@
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
<executions>
<execution>
<id>copy-keystore</id>
@@ -213,20 +200,20 @@
<goal>copy-resources</goal>
</goals>
<configuration>
- <outputDirectory>${app.server.eap6.home}/standalone/configuration</outputDirectory>
- <resources>
- <resource>
- <directory>src/main/keystore</directory>
- <includes>
- <include>adapter.jks</include>
- <include>keycloak.truststore</include>
- </includes>
- </resource>
- </resources>
- <nonFilteredFileExtensions>
+ <outputDirectory>${app.server.eap6.home}/standalone/configuration</outputDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/keystore</directory>
+ <includes>
+ <include>adapter.jks</include>
+ <include>keycloak.truststore</include>
+ </includes>
+ </resource>
+ </resources>
+ <nonFilteredFileExtensions>
<nonFilteredFileExtension>jks</nonFilteredFileExtension>
<nonFilteredFileExtension>truststore</nonFilteredFileExtension>
- </nonFilteredFileExtensions>
+ </nonFilteredFileExtensions>
</configuration>
</execution>
</executions>
diff --git a/testsuite/integration-arquillian/tests/adapters/eap6/src/main/xslt/arquillian_jdk.xsl b/testsuite/integration-arquillian/tests/adapters/eap6/src/main/xslt/arquillian_jdk.xsl
new file mode 100644
index 0000000..53d0b2a
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/adapters/eap6/src/main/xslt/arquillian_jdk.xsl
@@ -0,0 +1,30 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:a="http://jboss.org/schema/arquillian"
+ version="2.0"
+ exclude-result-prefixes="xalan a">
+
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xalan:indent-amount="4" standalone="no"/>
+ <xsl:strip-space elements="*"/>
+
+ <xsl:param name="javaHome"/>
+
+ <xsl:template match="//*[local-name()='container' and @qualifier='app-server-eap6']/*[local-name()='configuration']">
+ <xsl:copy>
+ <xsl:apply-templates select="node()|@*"/>
+
+ <property name="javaHome">
+ <xsl:value-of select="$javaHome"/>
+ </property>
+ </xsl:copy>
+ </xsl:template>
+
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()" />
+ </xsl:copy>
+ </xsl:template>
+
+
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/testsuite/integration-arquillian/tests/adapters/pom.xml b/testsuite/integration-arquillian/tests/adapters/pom.xml
index 87d5617..4c2afc4 100644
--- a/testsuite/integration-arquillian/tests/adapters/pom.xml
+++ b/testsuite/integration-arquillian/tests/adapters/pom.xml
@@ -23,6 +23,7 @@
<exclude.adapters>-</exclude.adapters>
<arquillian.xml.stylesheet>src/main/xslt/arquillian.xsl</arquillian.xml.stylesheet>
+ <skip.install.adapters>false</skip.install.adapters>
</properties>
<build>
@@ -50,12 +51,29 @@
</artifactItems>
</configuration>
</execution>
+ <execution>
+ <id>unpack-add-user-json</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.keycloak.testsuite</groupId>
+ <artifactId>integration-arquillian-tests-base</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <includes>**/keycloak-add-user.json</includes>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
- <version>1.0</version>
<executions>
<execution>
<id>add-app-server-to-arquillian-xml</id>
@@ -109,6 +127,31 @@
</excludes>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-admin-user-json-file</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${jboss.server.config.dir}</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${project.build.directory}/dependency</directory>
+ <includes>
+ <include>keycloak-add-user.json</include>
+ </includes>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</pluginManagement>
</build>
@@ -190,7 +233,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
- <version>2.10</version>
<executions>
<execution>
<id>example-wars</id>
@@ -343,6 +385,12 @@
</modules>
</profile>
<profile>
+ <id>app-server-eap6</id>
+ <modules>
+ <module>eap6</module>
+ </modules>
+ </profile>
+ <profile>
<id>app-server-wildfly</id>
<modules>
<module>wildfly</module>
@@ -373,18 +421,19 @@
</modules>
</profile>
<profile>
- <id>app-server-eap6</id>
- <modules>
- <module>eap6</module>
- </modules>
- </profile>
- <profile>
<id>no-adapter-tests</id>
<properties>
<!-- Exclude all adapters tests. -->
<exclude.adapters>**/adapter/**/*Test.java</exclude.adapters>
</properties>
</profile>
+ <profile>
+ <id>no-relative</id>
+ <properties>
+ <!-- Exclude relative adapters tests. -->
+ <exclude.adapters>**/adapter/**/WildflyRelative*Test.java</exclude.adapters>
+ </properties>
+ </profile>
</profiles>
diff --git a/testsuite/integration-arquillian/tests/adapters/wildfly/pom.xml b/testsuite/integration-arquillian/tests/adapters/wildfly/pom.xml
index 4f2bb53..a8d7326 100644
--- a/testsuite/integration-arquillian/tests/adapters/wildfly/pom.xml
+++ b/testsuite/integration-arquillian/tests/adapters/wildfly/pom.xml
@@ -31,6 +31,11 @@
<artifactId>keycloak-wildfly-adapter-dist</artifactId>
<type>zip</type>
</dependency>
+ <dependency>
+ <groupId>org.keycloak</groupId>
+ <artifactId>keycloak-saml-wildfly-adapter-dist</artifactId>
+ <type>zip</type>
+ </dependency>
</dependencies>
<build>
@@ -68,6 +73,13 @@
<type>zip</type>
<outputDirectory>${adapter.libs.wildfly}</outputDirectory>
</artifactItem>
+ <artifactItem>
+ <groupId>org.keycloak</groupId>
+ <artifactId>keycloak-saml-wildfly-adapter-dist</artifactId>
+ <version>${project.version}</version>
+ <type>zip</type>
+ <outputDirectory>${adapter.libs.wildfly}</outputDirectory>
+ </artifactItem>
</artifactItems>
</configuration>
</execution>
@@ -77,7 +89,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<app.server.wildfly>true</app.server.wildfly>
@@ -100,35 +111,6 @@
<properties>
<adapter.libs.wildfly>${app.server.wildfly.home}</adapter.libs.wildfly>
</properties>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>xml-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>configure-adapter-subsystem</id>
- <phase>process-resources</phase>
- <goals>
- <goal>transform</goal>
- </goals>
- <configuration>
- <transformationSets>
- <transformationSet>
- <dir>${app.server.wildfly.home}/standalone/configuration</dir>
- <includes>
- <include>standalone.xml</include>
- </includes>
- <stylesheet>src/main/xslt/standalone.xsl</stylesheet>
- <outputDir>${app.server.wildfly.home}/standalone/configuration</outputDir>
- </transformationSet>
- </transformationSets>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
</profile>
<profile>
<id>ssl</id>
@@ -166,7 +148,6 @@
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
<executions>
<execution>
<id>copy-keystore</id>
@@ -175,20 +156,20 @@
<goal>copy-resources</goal>
</goals>
<configuration>
- <outputDirectory>${app.server.wildfly.home}/standalone/configuration</outputDirectory>
- <resources>
- <resource>
- <directory>src/main/keystore</directory>
- <includes>
- <include>adapter.jks</include>
- <include>keycloak.truststore</include>
- </includes>
- </resource>
- </resources>
- <nonFilteredFileExtensions>
+ <outputDirectory>${app.server.wildfly.home}/standalone/configuration</outputDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/keystore</directory>
+ <includes>
+ <include>adapter.jks</include>
+ <include>keycloak.truststore</include>
+ </includes>
+ </resource>
+ </resources>
+ <nonFilteredFileExtensions>
<nonFilteredFileExtension>jks</nonFilteredFileExtension>
<nonFilteredFileExtension>truststore</nonFilteredFileExtension>
- </nonFilteredFileExtensions>
+ </nonFilteredFileExtensions>
</configuration>
</execution>
</executions>
diff --git a/testsuite/integration-arquillian/tests/adapters/wildfly8/pom.xml b/testsuite/integration-arquillian/tests/adapters/wildfly8/pom.xml
index de42ce3..0828eda 100644
--- a/testsuite/integration-arquillian/tests/adapters/wildfly8/pom.xml
+++ b/testsuite/integration-arquillian/tests/adapters/wildfly8/pom.xml
@@ -79,7 +79,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.18.1</version>
<configuration>
<systemPropertyVariables>
<app.server.wildfly>true</app.server.wildfly>
@@ -102,35 +101,6 @@
<properties>
<adapter.libs.wildfly>${app.server.wildfly.home}</adapter.libs.wildfly>
</properties>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>xml-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>configure-adapter-subsystem</id>
- <phase>process-resources</phase>
- <goals>
- <goal>transform</goal>
- </goals>
- <configuration>
- <transformationSets>
- <transformationSet>
- <dir>${app.server.wildfly.home}/standalone/configuration</dir>
- <includes>
- <include>standalone.xml</include>
- </includes>
- <stylesheet>src/main/xslt/standalone.xsl</stylesheet>
- <outputDir>${app.server.wildfly.home}/standalone/configuration</outputDir>
- </transformationSet>
- </transformationSets>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
</profile>
</profiles>
</project>
diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml
index 4242503..97e0565 100644
--- a/testsuite/integration-arquillian/tests/base/pom.xml
+++ b/testsuite/integration-arquillian/tests/base/pom.xml
@@ -14,6 +14,8 @@
<properties>
<exclude.console>-</exclude.console>
<exclude.account>-</exclude.account>
+ <exclude.client>-</exclude.client>
+ <exclude.migration>-</exclude.migration>
</properties>
<dependencies>
<dependency>
@@ -48,6 +50,8 @@
<excludes>
<exclude>${exclude.console}</exclude>
<exclude>${exclude.account}</exclude>
+ <exclude>${exclude.client}</exclude>
+ <exclude>${exclude.migration}</exclude>
</excludes>
</configuration>
</plugin>
@@ -70,10 +74,19 @@
</properties>
</profile>
<profile>
+ <id>no-client</id>
+ <properties>
+ <!-- Exclude all account management tests. -->
+ <exclude.account>**/client/**/*Test.java</exclude.account>
+ </properties>
+ </profile>
+ <profile>
<id>adapters-only</id>
<properties>
<exclude.console>**/console/**/*Test.java</exclude.console>
<exclude.account>**/account/**/*Test.java</exclude.account>
+ <exclude.client>**/client/**/*Test.java</exclude.client>
+ <exclude.migration>**/migration/**/*Test.java</exclude.migration>
</properties>
</profile>
</profiles>
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/SAMLServletWithLogout.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/SAMLServletWithLogout.java
index 2656fd4..c85ac68 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/SAMLServletWithLogout.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/SAMLServletWithLogout.java
@@ -11,7 +11,7 @@ public abstract class SAMLServletWithLogout extends AbstractPageWithInjectedUrl
public void logout() {
driver.navigate().to(getUriBuilder().queryParam("GLO", "true").build().toASCIIString());
- getUriBuilder().replaceQueryParam("GLO", null);
+ getUriBuilder().replaceQueryParam("GLO", new Object());
pause(300);
}
}
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java
index 50beaa6..b2175d3 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainersTestEnricher.java
@@ -1,10 +1,14 @@
package org.keycloak.testsuite.arquillian;
+import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
+import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.jboss.arquillian.container.spi.Container;
import org.jboss.arquillian.container.spi.ContainerRegistry;
@@ -30,6 +34,7 @@ import org.keycloak.testsuite.util.OAuthClient;
import static org.keycloak.testsuite.auth.page.AuthRealm.ADMIN;
import static org.keycloak.testsuite.auth.page.AuthRealm.MASTER;
+import static org.keycloak.testsuite.util.WaitUtils.pause;
/**
*
@@ -73,17 +78,20 @@ public class ContainersTestEnricher {
private ContainerController controller;
private LinkedList<Container> containers;
+ private String jbossHomePath;
private final boolean migrationTests = System.getProperty("migration", "false").equals("true");
+ private final boolean skipInstallAdapters = System.getProperty("skip.install.adapters", "false").equals("true");
+ private boolean alreadyInstalled = false;
private boolean alreadyStopped = false;
private boolean init = false;
private void init() {
if (!init) {
- containers = new LinkedList(containerRegistry.get().getContainers());
+ containers = new LinkedList<>(containerRegistry.get().getContainers());
}
init = true;
}
-
+
/*
* non-javadoc
*
@@ -103,32 +111,34 @@ public class ContainersTestEnricher {
* After start container. Server logs are checked (in case jboss based container).
* In case of migration scenario: previous container is stopped.
*/
- public void afterStart(@Observes AfterStart event) throws IOException {
- if (System.getProperty("check.server.log", "true").equals("true")) {
- checkServerLog();
+ public void afterStart(@Observes AfterStart event) throws IOException, InterruptedException {
+ Container container = containers.pollFirst();
+
+ if (isJBossBased(container)) {
+ jbossHomePath = container.getContainerConfiguration().getContainerProperties().get("jbossHome");
+ log.debug("jbossHome: " + jbossHomePath + "\n");
}
+ checkServerLog(jbossHomePath);
if (migrationTests && !alreadyStopped) {
log.info("\n\n### Stopping keycloak " + System.getProperty("version", "- previous") + " ###\n");
stopSuiteContainers.fire(new StopSuiteContainers());
log.info("\n\n### Starting keycloak current version ###\n");
+ alreadyStopped = true;
}
- alreadyStopped = true;
+
+ installAdapters(container);
}
/*
* non-javadoc
*
- * check server logs (in case jboss based container) whether there are no ERRORs or SEVEREs
+ * check server logs whether there are no ERRORs or SEVEREs
*/
- private void checkServerLog() throws IOException {
- Container container = containers.removeFirst();
- if (container.getName().equals("auth-server-wildfly")
- || container.getName().matches("auth-server-eap.")) {
- String jbossHomePath = container.getContainerConfiguration().getContainerProperties().get("jbossHome");
- log.debug("jbossHome: " + jbossHomePath + "\n");
-
- String serverLogContent = FileUtils.readFileToString(new File(jbossHomePath + "/standalone/log/server.log"));
+ private void checkServerLog(String jbossHomePath) throws IOException {
+ if (jbossHomePath != null && System.getProperty("check.server.log", "true").equals("true")) {
+ File serverLog = new File(jbossHomePath + "/standalone/log/server.log");
+ String serverLogContent = FileUtils.readFileToString(serverLog);
boolean containsError
= serverLogContent.contains("ERROR")
@@ -138,9 +148,10 @@ public class ContainersTestEnricher {
//singleton org.keycloak.services.resources.ModelExceptionMapper
if (containsError) {
- throw new RuntimeException(container.getName() + ": Server log contains ERROR.");
+ throw new RuntimeException(serverLog.getPath() + " contains ERROR.");
}
- }
+ log.info(serverLog.getPath() + " doesn't contain Error");
+ }
}
public void beforeSuite(@Observes BeforeSuite event) {
@@ -154,9 +165,7 @@ public class ContainersTestEnricher {
appServerQualifier = getAppServerQualifier(testClass);
if (!controller.isStarted(appServerQualifier)) {
- log.info("\nSTARTING APP SERVER: " + appServerQualifier + "\n");
controller.start(appServerQualifier);
- log.info("");
}
initializeTestContext(testClass);
@@ -264,4 +273,60 @@ public class ContainersTestEnricher {
return "http://localhost:" + Integer.parseInt(System.getProperty("app.server.http.port", "8280"));
}
+ private void installAdapters(Container container) throws InterruptedException, IOException {
+ if (!alreadyInstalled && !skipInstallAdapters && isJBossBased(container)) {
+ String jbossCliPath = jbossHomePath + "/bin/jboss-cli.sh";
+ String adapterScriptPathArg = "--file=" + jbossHomePath + "/bin/adapter-install.cli";
+ String samlAdapterScriptPathArg = "--file=" + jbossHomePath + "/bin/adapter-install-saml.cli";
+ String managementPort = container.getContainerConfiguration().getContainerProperties().get("managementPort");
+ String controllerArg = "--controller=localhost:" + managementPort;
+
+ log.info("Installing adapter to app server via cli script");
+ execCommand(new String[]{"/bin/sh", jbossCliPath, "--connect", adapterScriptPathArg, controllerArg});
+ log.info("Installing saml adapter to app server via cli script");
+ execCommand(new String[]{"/bin/sh", jbossCliPath, "--connect", samlAdapterScriptPathArg, controllerArg});
+ log.info("Restarting container");
+ execCommand(new String[]{"/bin/sh", jbossCliPath, "--connect", "--command=:reload", controllerArg});
+ pause(5000);
+ log.info("Container restarted");
+ checkServerLog(jbossHomePath);
+ if (container.getName().startsWith("app-server")) {
+ alreadyInstalled = true;
+ }
+ }
+ }
+
+ private void execCommand(String... command) throws IOException, InterruptedException {
+ Process process = Runtime.getRuntime().exec(command);
+
+ if (process.waitFor(10, TimeUnit.SECONDS)) {
+ if (process.exitValue() != 0) {
+ throw new RuntimeException("Adapter installation failed. Process exitValue: "
+ + process.exitValue() + "; <error output>\n" + getOutput(process.getErrorStream())
+ + "</error output>");
+ }
+ log.debug("process.isAlive(): " + process.isAlive());
+ } else {
+ process.destroyForcibly();
+ throw new RuntimeException("Timeout after 10 seconds.");
+ }
+ }
+
+ private String getOutput(InputStream is) throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+ StringBuilder builder = new StringBuilder();
+ while (reader.ready()) {
+ builder.append(reader.readLine());
+ }
+ return builder.toString();
+ }
+
+ private boolean isJBossBased(Container container) {
+ if (container == null) {
+ return false;
+ }
+ return container.getName().matches("a.*-server-wildfly")
+ || container.getName().matches("a.*-server-eap.")
+ || container.getName().equals("app-server-as7");
+ }
}
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/roles/RoleCompositeRoles.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/roles/RoleCompositeRoles.java
index 833acdd..070f49a 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/roles/RoleCompositeRoles.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/roles/RoleCompositeRoles.java
@@ -53,7 +53,7 @@ public class RoleCompositeRoles extends Form {
Map<String, List<String>> clientRoles = new HashMap<>();
for (String client : getSelectValues(clientSelect)) {
clientSelect.selectByVisibleText(client);
- clientRoles.put(client, new ArrayList(getSelectValues(assignedClientRolesSelect)));
+ clientRoles.put(client, new ArrayList<>(getSelectValues(assignedClientRolesSelect)));
}
composites.setClient(clientRoles);
return composites;
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
index 13ec96e..ba45728 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
@@ -25,7 +25,6 @@ import org.keycloak.testsuite.util.OAuthClient;
import org.openqa.selenium.WebDriver;
import org.keycloak.testsuite.auth.page.AuthServer;
import org.keycloak.testsuite.auth.page.AuthServerContextRoot;
-import static org.keycloak.testsuite.util.URLAssert.*;
import org.keycloak.testsuite.auth.page.AuthRealm;
import static org.keycloak.testsuite.auth.page.AuthRealm.ADMIN;
import static org.keycloak.testsuite.auth.page.AuthRealm.MASTER;
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java
index 4a6f1c3..11c17f0 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java
@@ -80,14 +80,16 @@ public abstract class AbstractAdapterTest extends AbstractAuthTest {
}
protected void modifyClientUrls(RealmRepresentation realm, String regex, String replacement) {
- for (ClientRepresentation client : realm.getClients()) {
- String baseUrl = client.getBaseUrl();
- if (baseUrl != null) {
- client.setBaseUrl(baseUrl.replaceAll(regex, replacement));
- }
- String adminUrl = client.getAdminUrl();
- if (adminUrl != null) {
- client.setAdminUrl(adminUrl.replaceAll(regex, replacement));
+ if (realm.getClients() != null) {
+ for (ClientRepresentation client : realm.getClients()) {
+ String baseUrl = client.getBaseUrl();
+ if (baseUrl != null) {
+ client.setBaseUrl(baseUrl.replaceAll(regex, replacement));
+ }
+ String adminUrl = client.getAdminUrl();
+ if (adminUrl != null) {
+ client.setAdminUrl(adminUrl.replaceAll(regex, replacement));
+ }
}
}
}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/AbstractClientTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/AbstractClientTest.java
index a3a1463..211406c 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/AbstractClientTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/AbstractClientTest.java
@@ -119,7 +119,7 @@ public abstract class AbstractClientTest extends AbstractConsoleTest {
}
private static void setRedirectUris(ClientRepresentation client, String... redirectUris) {
- List<String> redirectUrisList = new ArrayList();
+ List<String> redirectUrisList = new ArrayList<>();
redirectUrisList.addAll(Arrays.asList(redirectUris));
client.setRedirectUris(redirectUrisList);
}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/ClientInstallationTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/ClientInstallationTest.java
index 3ee6335..bf7bb06 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/ClientInstallationTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/console/clients/ClientInstallationTest.java
@@ -55,13 +55,13 @@ public class ClientInstallationTest extends AbstractClientTest {
@Test
public void jsonTest() {
- clientInstallationPage.form().setConfigFormat("Keycloak JSON");
+ clientInstallationPage.form().setConfigFormat("Keycloak OIDC JSON");
assertTrue(clientInstallationPage.form().getTextareaContent().contains("\"realm\": \"test\""));
}
@Test
public void wildflySubsystemTest() {
- clientInstallationPage.form().setConfigFormat("Wildfly/EAP Subsystem XML");
+ clientInstallationPage.form().setConfigFormat("Keycloak OIDC JBoss Subsystem XML");
assertTrue(clientInstallationPage.form().getTextareaContent().contains("<realm>test</realm>"));
}
}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json
index 5b82ec6..70dc85a 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json
+++ b/testsuite/integration-arquillian/tests/base/src/test/resources/adapter-test/demorealm.json
@@ -21,7 +21,7 @@
{ "type" : "password",
"value" : "password" }
],
- "realmRoles": [ "user", "admin" ],
+ "realmRoles": [ "user" ],
"applicationRoles": {
"account": [ "manage-account" ]
}
@@ -34,12 +34,36 @@
"lastName": "Posolda",
"credentials" : [
{ "type" : "password",
- "value" : "password" }
+ "value" : "password" }
],
"realmRoles": [ "user" ],
"applicationRoles": {
"account": [ "manage-account" ]
}
+ },
+ {
+ "username" : "topGroupUser",
+ "enabled": true,
+ "email" : "top@redhat.com",
+ "credentials" : [
+ { "type" : "password",
+ "value" : "password" }
+ ],
+ "groups": [
+ "/top"
+ ]
+ },
+ {
+ "username" : "level2GroupUser",
+ "enabled": true,
+ "email" : "level2@redhat.com",
+ "credentials" : [
+ { "type" : "password",
+ "value" : "password" }
+ ],
+ "groups": [
+ "/top/level2"
+ ]
}
],
"roles" : {
@@ -54,6 +78,29 @@
}
]
},
+ "groups" : [
+ {
+ "name": "top",
+ "attributes": {
+ "topAttribute": ["true"]
+
+ },
+ "realmRoles": ["user"],
+ "clientRoles": {
+ "account": ["manage-account"]
+ },
+ "subGroups": [
+ {
+ "name": "level2",
+ "realmRoles": ["admin"],
+ "attributes": {
+ "level2Attribute": ["true"]
+
+ }
+ }
+ ]
+ }
+ ],
"scopeMappings": [
{
"client": "third-party",
@@ -69,38 +116,39 @@
}
],
- "clients": [
+ "applications": [
{
- "clientId": "customer-portal",
+ "name": "customer-portal",
"enabled": true,
- "adminUrl": "/customer-portal",
- "baseUrl": "/customer-portal",
+ "directAccessGrantsEnabled": true,
+ "adminUrl": "http://localhost:8081/customer-portal",
+ "baseUrl": "http://localhost:8081/customer-portal",
"redirectUris": [
- "/customer-portal/*"
+ "http://localhost:8081/customer-portal/*"
],
"secret": "password"
},
{
- "clientId": "customer-cookie-portal",
+ "name": "customer-cookie-portal",
"enabled": true,
- "baseUrl": "/customer-cookie-portal",
+ "baseUrl": "http://localhost:8081/customer-cookie-portal",
"redirectUris": [
- "/customer-cookie-portal/*"
+ "http://localhost:8081/customer-cookie-portal/*"
],
"secret": "password"
},
{
- "clientId": "customer-portal-js",
+ "name": "customer-portal-js",
"enabled": true,
"publicClient": true,
- "adminUrl": "/customer-portal-js",
- "baseUrl": "/customer-portal-js",
+ "adminUrl": "http://localhost:8081/customer-portal-js",
+ "baseUrl": "http://localhost:8081/customer-portal-js",
"redirectUris": [
- "/customer-portal-js/*"
+ "http://localhost:8080/customer-portal-js/*"
]
},
{
- "clientId": "customer-portal-cli",
+ "name": "customer-portal-cli",
"enabled": true,
"publicClient": true,
"redirectUris": [
@@ -109,51 +157,56 @@
]
},
{
- "clientId": "product-portal",
+ "name": "product-portal",
"enabled": true,
- "adminUrl": "/product-portal",
- "baseUrl": "/product-portal",
+ "adminUrl": "http://localhost:8081/product-portal",
+ "baseUrl": "http://localhost:8081/product-portal",
"redirectUris": [
- "/product-portal/*"
+ "http://localhost:8081/product-portal/*"
],
"secret": "password"
},
{
- "clientId": "secure-portal",
+ "name": "secure-portal",
"enabled": true,
- "adminUrl": "/secure-portal",
- "baseUrl": "/secure-portal",
+ "adminUrl": "http://localhost:8081/secure-portal",
+ "baseUrl": "http://localhost:8081/secure-portal",
+ "clientAuthenticatorType": "client-jwt",
"redirectUris": [
- "/secure-portal/*"
+ "http://localhost:8081/secure-portal/*"
],
- "secret": "password"
+ "attributes": {
+ "jwt.credential.certificate": "MIICnTCCAYUCBgFPPLDaTzANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdjbGllbnQxMB4XDTE1MDgxNzE3MjI0N1oXDTI1MDgxNzE3MjQyN1owEjEQMA4GA1UEAwwHY2xpZW50MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIUjjgv+V3s96O+Za9002Lp/trtGuHBeaeVL9dFKMKzO2MPqdRmHB4PqNlDdd28Rwf5Xn6iWdFpyUKOnI/yXDLhdcuFpR0sMNK/C9Lt+hSpPFLuzDqgtPgDotlMxiHIWDOZ7g9/gPYNXbNvjv8nSiyqoguoCQiiafW90bPHsiVLdP7ZIUwCcfi1qQm7FhxRJ1NiW5dvUkuCnnWEf0XR+Wzc5eC9EgB0taLFiPsSEIlWMm5xlahYyXkPdNOqZjiRnrTWm5Y4uk8ZcsD/KbPTf/7t7cQXipVaswgjdYi1kK2/zRwOhg1QwWFX/qmvdd+fLxV0R6VqRDhn7Qep2cxwMxLsCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAKE6OA46sf20bz8LZPoiNsqRwBUDkaMGXfnob7s/hJZIIwDEx0IAQ3uKsG7q9wb+aA6s+v7S340zb2k3IxuhFaHaZpAd4CyR5cn1FHylbzoZ7rI/3ASqHDqpljdJaFqPH+m7nZWtyDvtZf+gkZ8OjsndwsSBK1d/jMZPp29qYbl1+XfO7RCp/jDqro/R3saYFaIFiEZPeKn1hUJn6BO48vxH1xspSu9FmlvDOEAOz4AuM58z4zRMP49GcFdCWr1wkonJUHaSptJaQwmBwLFUkCbE5I1ixGMb7mjEud6Y5jhfzJiZMo2U8RfcjNbrN0diZl3jB6LQIwESnhYSghaTjNQ=="
+ }
},
{
- "clientId": "session-portal",
+ "name": "session-portal",
"enabled": true,
- "adminUrl": "/session-portal",
- "baseUrl": "/session-portal",
+ "adminUrl": "http://localhost:8081/session-portal",
+ "baseUrl": "http://localhost:8081/session-portal",
"redirectUris": [
- "/session-portal/*"
+ "http://localhost:8081/session-portal/*"
],
"secret": "password"
},
{
- "clientId": "input-portal",
+ "name": "input-portal",
"enabled": true,
- "adminUrl": "/input-portal",
- "baseUrl": "/input-portal",
+ "adminUrl": "http://localhost:8081/input-portal",
+ "baseUrl": "http://localhost:8081/input-portal",
"redirectUris": [
- "/input-portal/*"
+ "http://localhost:8081/input-portal/*"
],
"secret": "password"
- },
+ }
+ ],
+ "oauthClients": [
{
- "clientId": "third-party",
+ "name": "third-party",
"enabled": true,
"redirectUris": [
- "/oauth-client/*",
- "/oauth-client-cdi/*"
+ "http://localhost:8081/oauth-client/*",
+ "http://localhost:8081/oauth-client-cdi/*"
],
"secret": "password"
}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml b/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml
index e347903..afc3334 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml
+++ b/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml
@@ -7,6 +7,7 @@
<extension qualifier="webdriver">
<property name="browser">${browser}</property>
+ <property name="firefox_binary">${firefox_binary}</property>
</extension>
<extension qualifier="graphene">
@@ -18,6 +19,7 @@
<extension qualifier="graphene-secondbrowser">
<property name="browser">${browser}</property>
+ <property name="firefox_binary">${firefox_binary}</property>
</extension>
<engine>
@@ -92,7 +94,7 @@
<configuration>
<property name="enabled">${migration.kc12}</property>
<property name="adapterImplClass">org.jboss.as.arquillian.container.managed.ManagedDeployableContainer</property>
- <property name="jbossHome">${keycloak.migration.homee}</property>
+ <property name="jbossHome">${keycloak.migration.home}</property>
<property name="javaVmArguments">-Djboss.socket.binding.port-offset=${auth.server.port.offset} -Xms64m -Xmx512m -XX:MaxPermSize=256m</property>
<property name="managementPort">${auth.server.management.port}</property>
<property name="startupTimeoutInSeconds">${startup.timeout.sec}</property>
@@ -114,21 +116,20 @@
<configuration>
<property name="enabled">${auth.server.wildfly}</property>
<property name="adapterImplClass">org.jboss.as.arquillian.container.managed.ManagedDeployableContainer</property>
- <property name="jbossHome">${auth.server.wildfly.home}</property>
+ <property name="jbossHome">${keycloak.home}</property>
<property name="javaVmArguments">-Djboss.socket.binding.port-offset=${auth.server.port.offset} -Xms64m -Xmx512m -XX:MaxPermSize=256m ${adapter.test.props}</property>
<property name="managementPort">${auth.server.management.port}</property>
<property name="startupTimeoutInSeconds">${startup.timeout.sec}</property>
</configuration>
</container>
- <container qualifier="auth-server-eap6" mode="suite" >
+ <container qualifier="auth-server-eap7" mode="suite" >
<configuration>
- <property name="enabled">${auth.server.eap6}</property>
+ <property name="enabled">${auth.server.eap7}</property>
<property name="adapterImplClass">org.jboss.as.arquillian.container.managed.ManagedDeployableContainer</property>
- <property name="jbossHome">${auth.server.eap6.home}</property>
+ <property name="jbossHome">${keycloak.home}</property>
<property name="javaVmArguments">-Djboss.socket.binding.port-offset=${auth.server.port.offset} -Xms64m -Xmx512m -XX:MaxPermSize=256m ${adapter.test.props}</property>
- <property name="managementAddress">localhost</property>
- <property name="managementPort">${auth.server.management.port.jmx}</property>
+ <property name="managementPort">${auth.server.management.port}</property>
<property name="startupTimeoutInSeconds">${startup.timeout.sec}</property>
</configuration>
</container>
diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/keycloak-add-user.json b/testsuite/integration-arquillian/tests/base/src/test/resources/keycloak-add-user.json
index 635f144..60c0f09 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/resources/keycloak-add-user.json
+++ b/testsuite/integration-arquillian/tests/base/src/test/resources/keycloak-add-user.json
@@ -5,12 +5,11 @@
"enabled" : true,
"credentials" : [ {
"type" : "password",
- "hashedSaltedValue" : "6K5rvcPu3dXndZOhpzLAVbFtcdlUhbGCrUyV0NNzeS61IdhMpjH8Mf4y/Ag/vHZkw4Ayvtvb9/1iMNOzxR0M6g==",
- "salt" : "/6M1jTMUB0uR8EOkksFn/A==",
+ "hashedSaltedValue" : "dqalJHLkWhUJZO/q6+z1fvXOohTcGCXcvoU8xCEyvTxGN4wmLx7DtyhKuefggh6Bkx1I2eBTEX4tiWggwyXMDw==",
+ "salt" : "3fBAt5GAGGxFrV9fznpZHQ==",
"hashIterations" : 100000,
"algorithm" : "pbkdf2"
} ],
"realmRoles" : [ "admin" ]
- } ],
- "identityFederationEnabled" : false
+ } ]
} ]
\ No newline at end of file
testsuite/integration-arquillian/tests/pom.xml 119(+58 -61)
diff --git a/testsuite/integration-arquillian/tests/pom.xml b/testsuite/integration-arquillian/tests/pom.xml
index ce114d1..f8c817e 100644
--- a/testsuite/integration-arquillian/tests/pom.xml
+++ b/testsuite/integration-arquillian/tests/pom.xml
@@ -31,6 +31,7 @@
<startup.timeout.sec>60</startup.timeout.sec>
<browser>phantomjs</browser>
+ <firefox_binary>/usr/bin/firefox</firefox_binary>
<arquillian-core.version>1.1.8.Final</arquillian-core.version>
<selenium.version>2.45.0</selenium.version>
@@ -38,7 +39,9 @@
<arquillian-graphene.version>2.1.0.Alpha2</arquillian-graphene.version>
<arquillian-wildfly-container.version>8.2.0.Final</arquillian-wildfly-container.version>
<version.shrinkwrap.resolvers>2.1.1</version.shrinkwrap.resolvers>
+ <skip.unpack.server>true</skip.unpack.server>
<skip.unpack.previous>true</skip.unpack.previous>
+ <skip.install.adapters>true</skip.install.adapters>
</properties>
<dependencyManagement>
@@ -81,6 +84,7 @@
<configuration>
<systemPropertyVariables>
<browser>${browser}</browser>
+ <firefox_binary>${firefox_binary}</firefox_binary>
<shouldDeploy>false</shouldDeploy>
<auth.server.container>${auth.server.container}</auth.server.container>
<auth.server.undertow>true</auth.server.undertow>
@@ -92,6 +96,7 @@
<auth.server.ssl.required>${auth.server.ssl.required}</auth.server.ssl.required>
<startup.timeout.sec>${startup.timeout.sec}</startup.timeout.sec>
<jboss.server.config.dir>${project.build.directory}/undertow-configuration</jboss.server.config.dir>
+ <skip.install.adapters>${skip.install.adapters}</skip.install.adapters>
</systemPropertyVariables>
<properties>
<property>
@@ -117,6 +122,26 @@
<artifactItems>
<artifactItem>
<groupId>org.keycloak.testsuite</groupId>
+ <artifactId>${migrated.server.artifactId}</artifactId>
+ <version>${project.version}</version>
+ <type>zip</type>
+ </artifactItem>
+ </artifactItems>
+ <outputDirectory>${containers.home}</outputDirectory>
+ <overWriteIfNewer>true</overWriteIfNewer>
+ </configuration>
+ </execution>
+ <execution>
+ <id>unpack</id>
+ <phase>generate-test-resources</phase>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <configuration>
+ <skip>${skip.unpack.server}</skip>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.keycloak.testsuite</groupId>
<artifactId>${server.artifactId}</artifactId>
<version>${project.version}</version>
<type>zip</type>
@@ -129,8 +154,8 @@
</executions>
</plugin>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
<executions>
<execution>
<id>copy-admin-user-json-file</id>
@@ -198,7 +223,7 @@
<version>2.1.0.Alpha3</version><!-- TODO upgrade <arquillian-graphene.version> and use ${arquillian-graphene.version} -->
</dependency>
-<!-- <dependency>
+ <!-- <dependency>
<groupId>org.arquillian.extension</groupId>
<artifactId>arquillian-recorder-reporter-impl</artifactId>
<version>1.1.0.Final</version>
@@ -388,60 +413,37 @@
<profile>
<id>auth-server-wildfly</id>
<properties>
+ <skip.unpack.server>false</skip.unpack.server>
+ <server.artifactId>integration-arquillian-server-wildfly</server.artifactId>
<auth.server.container>auth-server-wildfly</auth.server.container>
- <auth.server.wildfly.home>${containers.home}/keycloak-${project.version}</auth.server.wildfly.home>
<startup.timeout.sec>300</startup.timeout.sec>
<adapter.test.props/>
+ <keycloak.home>${containers.home}/keycloak-${project.version}</keycloak.home>
+ <jboss.server.config.dir>${keycloak.home}/standalone/configuration</jboss.server.config.dir>
</properties>
<dependencies>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
- </dependency>
+ </dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>unpack</id>
- <phase>generate-test-resources</phase>
- <goals>
- <goal>unpack</goal>
- </goals>
- <configuration>
- <artifactItems>
- <artifactItem>
- <groupId>org.keycloak.testsuite</groupId>
- <artifactId>integration-arquillian-server-wildfly</artifactId>
- <version>${project.version}</version>
- <type>zip</type>
- </artifactItem>
- </artifactItems>
- <outputDirectory>${containers.home}</outputDirectory>
- <overWriteIfNewer>true</overWriteIfNewer>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<auth.server.wildfly>true</auth.server.wildfly>
<auth.server.undertow>false</auth.server.undertow>
- <auth.server.wildfly.home>${auth.server.wildfly.home}</auth.server.wildfly.home>
+ <keycloak.home>${keycloak.home}</keycloak.home>
<adapter.test.props>${adapter.test.props}</adapter.test.props>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
<executions>
<execution>
<id>copy-admin-user-json-file</id>
@@ -450,7 +452,7 @@
<goal>copy-resources</goal>
</goals>
<configuration>
- <outputDirectory>${auth.server.wildfly.home}/standalone/configuration</outputDirectory>
+ <outputDirectory>${jboss.server.config.dir}</outputDirectory>
<resources>
<resource>
<directory>src/test/resources</directory>
@@ -470,18 +472,20 @@
</profile>
<profile>
- <id>auth-server-eap6</id>
+ <id>auth-server-eap7</id>
<properties>
- <auth.server.container>auth-server-eap6</auth.server.container>
- <auth.server.eap6.home>${containers.home}/keycloak-${project.version}</auth.server.eap6.home>
+ <skip.unpack.server>false</skip.unpack.server>
+ <server.artifactId>integration-arquillian-server-eap7</server.artifactId>
+ <auth.server.container>auth-server-eap7</auth.server.container>
<startup.timeout.sec>300</startup.timeout.sec>
<adapter.test.props/>
+ <keycloak.home>${containers.home}/keycloak-${version.server.dist}</keycloak.home>
+ <jboss.server.config.dir>${keycloak.home}/standalone/configuration</jboss.server.config.dir>
</properties>
<dependencies>
<dependency>
- <groupId>org.jboss.as</groupId>
- <artifactId>jboss-as-arquillian-container-managed</artifactId>
- <version>7.2.0.Final</version>
+ <groupId>org.wildfly</groupId>
+ <artifactId>wildfly-arquillian-container-managed</artifactId>
</dependency>
</dependencies>
<build>
@@ -489,25 +493,19 @@
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
+ <artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
- <id>unpack</id>
- <phase>generate-test-resources</phase>
+ <id>enforce-properties</id>
<goals>
- <goal>unpack</goal>
+ <goal>enforce</goal>
</goals>
<configuration>
- <artifactItems>
- <artifactItem>
- <groupId>org.keycloak.testsuite</groupId>
- <artifactId>integration-arquillian-server-eap6</artifactId>
- <version>${project.version}</version>
- <type>zip</type>
- </artifactItem>
- </artifactItems>
- <outputDirectory>${containers.home}</outputDirectory>
- <overWriteIfNewer>true</overWriteIfNewer>
+ <rules>
+ <requireProperty>
+ <property>version.server.dist</property>
+ </requireProperty>
+ </rules>
</configuration>
</execution>
</executions>
@@ -517,16 +515,15 @@
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
- <auth.server.eap6>true</auth.server.eap6>
+ <auth.server.eap7>true</auth.server.eap7>
<auth.server.undertow>false</auth.server.undertow>
- <auth.server.eap6.home>${auth.server.eap6.home}</auth.server.eap6.home>
+ <keycloak.home>${keycloak.home}</keycloak.home>
<adapter.test.props>${adapter.test.props}</adapter.test.props>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
<executions>
<execution>
<id>copy-admin-user-json-file</id>
@@ -535,7 +532,7 @@
<goal>copy-resources</goal>
</goals>
<configuration>
- <outputDirectory>${auth.server.eap6.home}/standalone/configuration</outputDirectory>
+ <outputDirectory>${jboss.server.config.dir}</outputDirectory>
<resources>
<resource>
<directory>src/test/resources</directory>
@@ -561,7 +558,7 @@
<properties>
<skip.unpack.previous>false</skip.unpack.previous>
<server.version>1.6.1.Final</server.version>
- <server.artifactId>integration-arquillian-server-wildfly-kc16</server.artifactId>
+ <migrated.server.artifactId>integration-arquillian-server-wildfly-kc16</migrated.server.artifactId>
</properties>
<build>
<pluginManagement>
@@ -589,7 +586,7 @@
<properties>
<skip.unpack.previous>false</skip.unpack.previous>
<server.version>1.5.1.Final</server.version>
- <server.artifactId>integration-arquillian-server-wildfly-kc15</server.artifactId>
+ <migrated.server.artifactId>integration-arquillian-server-wildfly-kc15</migrated.server.artifactId>
</properties>
<build>
<pluginManagement>
@@ -617,7 +614,7 @@
<properties>
<skip.unpack.previous>false</skip.unpack.previous>
<server.version>1.4.0.Final</server.version>
- <server.artifactId>integration-arquillian-server-wildfly-kc14</server.artifactId>
+ <migrated.server.artifactId>integration-arquillian-server-wildfly-kc14</migrated.server.artifactId>
</properties>
<build>
<pluginManagement>
@@ -643,7 +640,7 @@
<properties>
<skip.unpack.previous>false</skip.unpack.previous>
<server.version>1.3.1.Final</server.version>
- <server.artifactId>integration-arquillian-server-wildfly-kc13</server.artifactId>
+ <migrated.server.artifactId>integration-arquillian-server-wildfly-kc13</migrated.server.artifactId>
</properties>
<build>
<pluginManagement>
@@ -669,7 +666,7 @@
<properties>
<skip.unpack.previous>false</skip.unpack.previous>
<server.version>1.2.0.Final</server.version>
- <server.artifactId>integration-arquillian-server-wildfly-kc12</server.artifactId>
+ <migrated.server.artifactId>integration-arquillian-server-wildfly-kc12</migrated.server.artifactId>
</properties>
<build>
<pluginManagement>