keycloak-uncached

Details

diff --git a/testsuite/integration-arquillian/pom.xml b/testsuite/integration-arquillian/pom.xml
index f26cb46..2eacdd3 100644
--- a/testsuite/integration-arquillian/pom.xml
+++ b/testsuite/integration-arquillian/pom.xml
@@ -84,7 +84,6 @@
             <dependency>
                 <groupId>org.jboss.shrinkwrap.resolver</groupId>
                 <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
-                <version>${version.shrinkwrap.resolvers}</version>
                 <scope>test</scope>
             </dependency>
             <dependency>
diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/common/cli/add-secured-deployments.cli b/testsuite/integration-arquillian/servers/app-server/jboss/common/cli/add-secured-deployments.cli
new file mode 100644
index 0000000..04528ae
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/jboss/common/cli/add-secured-deployments.cli
@@ -0,0 +1,19 @@
+embed-server --server-config=standalone.xml
+
+/subsystem=keycloak/secure-deployment=customer-portal-subsystem.war/:add( \
+    realm=demo, \
+    resource=customer-portal-subsystem, \
+    auth-server-url=${auth.server.actual.protocol:http}://localhost:${auth.server.actual.http.port:8180}/auth, \
+    ssl-required=EXTERNAL, \
+    realm-public-key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB \
+)
+/subsystem=keycloak/secure-deployment=customer-portal-subsystem.war/credential=secret/:add(value=password)
+
+/subsystem=keycloak/secure-deployment=product-portal-subsystem.war/:add( \
+    realm=demo, \
+    resource=product-portal-subsystem, \
+    auth-server-url=${auth.server.actual.protocol:http}://localhost:${auth.server.actual.http.port:8180}/auth, \
+    ssl-required=EXTERNAL, \
+    realm-public-key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB \
+)
+/subsystem=keycloak/secure-deployment=product-portal-subsystem.war/credential=secret/:add(value=password)
diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/common/cli/configure-cluster-config.cli b/testsuite/integration-arquillian/servers/app-server/jboss/common/cli/configure-cluster-config.cli
new file mode 100644
index 0000000..a279557
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/jboss/common/cli/configure-cluster-config.cli
@@ -0,0 +1,18 @@
+embed-server --server-config=standalone-ha.xml
+
+/subsystem=jgroups/stack=tcpping:add
+/subsystem=jgroups/stack=tcpping/transport=TCP:add(socket-binding=jgroups-tcp)
+/subsystem=jgroups/stack=tcpping/protocol=TCPPING:add
+/subsystem=jgroups/stack=tcpping/protocol=TCPPING/property=initial_hosts:add(value=${initial.hosts:localhost[7900],localhost[8000]})
+/subsystem=jgroups/stack=tcpping/protocol=TCPPING/property=port_range:add(value=0)
+/subsystem=jgroups/stack=tcpping/protocol=MERGE3:add
+/subsystem=jgroups/stack=tcpping/protocol=FD_SOCK:add(socket-binding=jgroups-tcp-fd)
+/subsystem=jgroups/stack=tcpping/protocol=FD:add
+/subsystem=jgroups/stack=tcpping/protocol=VERIFY_SUSPECT:add
+/subsystem=jgroups/stack=tcpping/protocol=pbcast.NAKACK2:add
+/subsystem=jgroups/stack=tcpping/protocol=UNICAST3:add
+/subsystem=jgroups/stack=tcpping/protocol=pbcast.STABLE:add
+/subsystem=jgroups/stack=tcpping/protocol=pbcast.GMS:add
+/subsystem=jgroups/stack=tcpping/protocol=MFC:add
+/subsystem=jgroups/stack=tcpping/protocol=FRAG2:add
+/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcpping)
diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml b/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml
index bad93df..21af789 100644
--- a/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml
+++ b/testsuite/integration-arquillian/servers/app-server/jboss/pom.xml
@@ -189,6 +189,36 @@
                                     </nonFilteredFileExtensions>
                                 </configuration>
                             </execution>
+                            <execution>
+                                <id>copy-configs-cluster</id>
+                                <phase>generate-test-sources</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>${app.server.jboss.home}/standalone-cluster</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${app.server.jboss.home}/standalone</directory>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>copy-configs-crossdc</id>
+                                <phase>generate-test-sources</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>${app.server.jboss.home}/standalone-crossdc</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${app.server.jboss.home}/standalone</directory>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
                         </executions>
                     </plugin>
 
@@ -359,6 +389,35 @@
                                     </arguments>
                                 </configuration>
                             </execution>
+                            <execution>
+                                <id>add-secured-deployments</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <workingDirectory>${app.server.jboss.home}/bin</workingDirectory>
+                                    <executable>./jboss-cli.sh</executable>
+                                    <arguments>
+                                        <argument>--file=${common.resources}/cli/add-secured-deployments.cli</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>configure-cluster-config</id>
+                                <phase>generate-test-sources</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <workingDirectory>${app.server.jboss.home}/bin</workingDirectory>
+                                    <executable>./jboss-cli.sh</executable>
+                                    <arguments>
+                                        <argument>--file=${common.resources}/cli/configure-cluster-config.cli</argument>
+                                        <argument>-Djboss.server.config.dir=${app.server.jboss.home}/standalone-cluster/configuration</argument>
+                                    </arguments>
+                                </configuration>
+                            </execution>
                         </executions>
                     </plugin>
 
diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/pom.xml b/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/pom.xml
index 3bfdc96..b9c08c5 100644
--- a/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/pom.xml
+++ b/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/pom.xml
@@ -26,8 +26,8 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>integration-arquillian-servers-app-server-wildfly</artifactId>
-    <packaging>pom</packaging>
-    <name>App Server - JBoss - Wildfly</name>
+    <packaging>jar</packaging>
+    <name>App Server - Wildfly</name>
     
     <properties>
         <app.server.jboss>wildfly</app.server.jboss>
@@ -43,4 +43,15 @@
         <skip.elytron.adapter.installation>false</skip.elytron.adapter.installation>
     </properties>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.keycloak.testsuite</groupId>
+            <artifactId>integration-arquillian-servers-app-server-spi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.wildfly.arquillian</groupId>
+            <artifactId>wildfly-arquillian-container-managed</artifactId>
+        </dependency>
+    </dependencies>
 </project>
diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/src/main/java/org/keycloak/testsuite/arquillian/wildfly/container/WildflyAppServerProvider.java b/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/src/main/java/org/keycloak/testsuite/arquillian/wildfly/container/WildflyAppServerProvider.java
new file mode 100644
index 0000000..a3865cf
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/src/main/java/org/keycloak/testsuite/arquillian/wildfly/container/WildflyAppServerProvider.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package org.keycloak.testsuite.arquillian.wildfly.container;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.jboss.arquillian.core.spi.Validate;
+import org.jboss.as.arquillian.container.managed.ManagedDeployableContainer;
+import org.jboss.shrinkwrap.descriptor.spi.node.Node;
+import org.keycloak.testsuite.arquillian.container.AppServerContainerSPI;
+
+/**
+ * @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
+ */
+public class WildflyAppServerProvider implements AppServerContainerSPI {
+
+    private Node configuration;
+    private static final String containerName = "wildfly";
+
+    private final String appServerHome;
+    private final String appServerJavaHome;
+    private final String appServerPortOffset;
+    private final String managementProtocol;
+    private final String managementPort;
+    private final String startupTimeoutInSeconds;
+
+    public WildflyAppServerProvider() {
+        appServerHome = System.getProperty("app.server.home");
+        appServerJavaHome = System.getProperty("app.server.java.home");
+        appServerPortOffset = System.getProperty("app.server.port.offset");
+        managementProtocol = System.getProperty("app.server.management.protocol");
+        managementPort = System.getProperty("app.server.management.port");
+        startupTimeoutInSeconds = System.getProperty("app.server.startup.timeout");
+
+        Validate.notNullOrEmpty(appServerHome, "app.server.home is not set.");
+        Validate.notNullOrEmpty(appServerJavaHome, "app.server.java.home is not set.");
+        Validate.notNullOrEmpty(appServerPortOffset, "app.server.port.offset is not set.");
+        Validate.notNullOrEmpty(managementProtocol, "app.server.management.protocol is not set.");
+        Validate.notNullOrEmpty(managementPort, "app.server.management.port is not set.");
+        Validate.notNullOrEmpty(startupTimeoutInSeconds, "app.server.startup.timeout is not set.");
+    }
+
+    @Override
+    public String getName() {
+        return containerName;
+    }
+
+    @Override
+    public List<Node> getContainers() {
+        List<Node> containers = new ArrayList<>();
+
+        containers.add(standaloneContainer());
+        containers.add(clusterGroup());
+
+        return containers;
+    }
+
+    private void createChild(String name, String text) {
+        configuration.createChild("property").attribute("name", name).text(text);
+    }
+
+    private Node standaloneContainer() {
+        Node container = new Node("container");
+        container.attribute("mode", "manual");
+        container.attribute("qualifier", AppServerContainerSPI.APP_SERVER + "-" + containerName);
+
+        configuration = container.createChild("configuration");
+        createChild("enabled", "true");
+        createChild("adapterImplClass", ManagedDeployableContainer.class.getName());
+        createChild("jbossHome", appServerHome);
+        createChild("javaHome", appServerJavaHome);
+        createChild("jbossArguments", 
+                "-Djboss.socket.binding.port-offset=" + appServerPortOffset + " " +
+                System.getProperty("adapter.test.props", "")
+        );
+        createChild("javaVmArguments", 
+                System.getProperty("app.server.jboss.jvm.debug.args", "") + " " +
+                System.getProperty("app.server.memory.settings", "") + " " +
+                "-Djava.net.preferIPv4Stack=true"
+        );
+        createChild("managementProtocol", managementProtocol);
+        createChild("managementPort", managementPort);
+        createChild("startupTimeoutInSeconds", startupTimeoutInSeconds);
+
+        return container;
+    }
+
+    private Node clusterGroup() {
+        Node group = new Node("group");
+        group.attribute("qualifier", "app-server-wildfly-clustered");
+        addHaNodeContainer(group, 1);
+        addHaNodeContainer(group, 2);
+        return group;
+    }
+
+    private void addHaNodeContainer(Node group, int number) {
+        String portOffset = System.getProperty("app.server." + number + ".port.offset");
+        String managementPort = System.getProperty("app.server." + number + ".management.port");
+
+        Validate.notNullOrEmpty(portOffset, "app.server." + number + ".port.offset is not set.");
+        Validate.notNullOrEmpty(managementPort, "app.server." + number + ".management.port is not set.");
+
+        Node container = group.createChild("container");
+        container.attribute("mode", "manual");
+        container.attribute("qualifier", AppServerContainerSPI.APP_SERVER + "-" + containerName + "-ha-node-" + number);
+
+        configuration = container.createChild("configuration");
+        createChild("enabled", "true");
+        createChild("adapterImplClass", ManagedDeployableContainer.class.getName());
+        createChild("jbossHome", appServerHome);
+        createChild("javaHome", appServerJavaHome);
+        //cleanServerBaseDir cannot be used until WFARQ-44 is fixed
+//        createChild("cleanServerBaseDir", appServerHome + "/standalone-ha-node-" + number);
+        createChild("serverConfig", "standalone-ha.xml");
+        createChild("jbossArguments", 
+                "-Djboss.server.base.dir=" + appServerHome + "/standalone-ha-node-" + number + " " +
+                "-Djboss.socket.binding.port-offset=" + portOffset + " " +
+                "-Djboss.node.name=ha-node-" + number + " " +
+                getCrossDCProperties(number, portOffset) +
+                System.getProperty("adapter.test.props", "")
+        );
+        createChild("javaVmArguments", 
+                "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=790" + number + " " +
+                System.getProperty("app.server.memory.settings", "") + " " +
+                "-Djava.net.preferIPv4Stack=true"
+        );
+        createChild("managementProtocol", managementProtocol);
+        createChild("managementPort", managementPort);
+        createChild("startupTimeoutInSeconds", startupTimeoutInSeconds);
+    }
+    
+    private String getCrossDCProperties(int number, String portOffset) {
+        if (System.getProperty("cache.server") == null || System.getProperty("cache.server").equals("undefined")) {
+            return "";
+        }
+        String cacheHotrodPortString = System.getProperty("cache.server." + number + ".port.offset");
+        Validate.notNullOrEmpty(cacheHotrodPortString, "cache.server." + number + ".port.offset is not set.");
+
+        int tcppingPort = 7600 + Integer.parseInt(portOffset);
+        int cacheHotrodPort = 11222 + Integer.parseInt(cacheHotrodPortString);
+        
+        //properties used in servers/app-server/jboss/common/cli/configure-crossdc-config.cli
+        return "-Dtcpping.port=" + tcppingPort + " -Dcache.hotrod.port=" + cacheHotrodPort + " ";
+    }
+}
diff --git a/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerSPI b/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerSPI
new file mode 100644
index 0000000..b539592
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/jboss/wildfly/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerSPI
@@ -0,0 +1 @@
+org.keycloak.testsuite.arquillian.wildfly.container.WildflyAppServerProvider
diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml
index 7a222f8..63c9533 100644
--- a/testsuite/integration-arquillian/tests/base/pom.xml
+++ b/testsuite/integration-arquillian/tests/base/pom.xml
@@ -282,7 +282,7 @@
                             <tag>0.5</tag>
                         </configuration>
                     </execution>
-                  </executions>
+                </executions>
             </plugin>
 
         </plugins>
@@ -309,7 +309,38 @@
                 </plugins>
             </build>
         </profile>
-
+        <profile>
+            <id>app-server-wildfly</id>
+            <activation>
+                <property>
+                    <name>app.server</name>
+                    <value>wildfly</value>
+                </property>
+            </activation>
+            <properties>
+                <app.server>wildfly</app.server> <!--in case the profile is called directly-->
+                <app.server.skip.unpack>false</app.server.skip.unpack>
+            </properties>
+            <dependencies>
+                <dependency>
+                    <groupId>org.keycloak.testsuite</groupId>
+                    <artifactId>integration-arquillian-servers-app-server-wildfly</artifactId>
+                    <version>${project.version}</version>
+                    <scope>runtime</scope>
+                </dependency>
+                <dependency>
+                    <groupId>org.wildfly.arquillian</groupId>
+                    <artifactId>wildfly-arquillian-container-managed</artifactId>
+                </dependency>
+                <!--required by creaper-core-->
+                <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>
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java
index f38cc8c..ce5ec6d 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AppServerTestEnricher.java
@@ -49,8 +49,12 @@ public class AppServerTestEnricher {
     protected final Logger log = Logger.getLogger(this.getClass());
 
     public static final String APP_SERVER_PREFIX = "app-server-";
+
     public static final String APP_SERVER_UNDERTOW = APP_SERVER_PREFIX + "undertow";
 
+    public static final String APP_SERVER_WILDFLY = APP_SERVER_PREFIX + "wildfly";
+    public static final String APP_SERVER_WILDFLY_CLUSTER = APP_SERVER_WILDFLY + "-ha-node-1;"+ APP_SERVER_WILDFLY + "-ha-node-2";
+
     public static final String CURRENT_APP_SERVER = System.getProperty("app.server", "undertow");
 
     @Inject private Instance<ContainerController> containerConrollerInstance;
@@ -150,9 +154,8 @@ public class AppServerTestEnricher {
     }
 
     public static OnlineManagementClient getManagementClient() {
-        OnlineManagementClient managementClient;
         try {
-            managementClient = ManagementClient.online(OnlineOptions
+            return ManagementClient.online(OnlineOptions
                     .standalone()
                     .hostAndPort(System.getProperty("app.server.host"), System.getProperty("app.server","").startsWith("eap6") ? 10199 : 10190)
                     .protocol(System.getProperty("app.server","").startsWith("eap6") ? ManagementProtocol.REMOTE : ManagementProtocol.HTTP_REMOTING)
@@ -161,8 +164,6 @@ public class AppServerTestEnricher {
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
-
-        return managementClient;
     }
 
     public void startAppServer(@Observes(precedence = -1) BeforeClass event) throws MalformedURLException, InterruptedException, IOException {
diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/common/xslt/arquillian.xsl b/testsuite/integration-arquillian/tests/other/adapters/jboss/common/xslt/arquillian.xsl
index e6a96da..67a494a 100644
--- a/testsuite/integration-arquillian/tests/other/adapters/jboss/common/xslt/arquillian.xsl
+++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/common/xslt/arquillian.xsl
@@ -65,7 +65,6 @@
                     <property name="javaVmArguments">
                         -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7901
                         ${app.server.memory.settings}
-                        ${app.server.cluster.tests.memory.settings}
                         -Djava.net.preferIPv4Stack=true
                     </property>
                     <property name="managementProtocol">${app.server.management.protocol}</property>
@@ -90,7 +89,6 @@
                     <property name="javaVmArguments">
                         -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7902
                         ${app.server.memory.settings}
-                        ${app.server.cluster.tests.memory.settings}
                         -Djava.net.preferIPv4Stack=true
                     </property>
                     <property name="managementProtocol">${app.server.management.protocol}</property>
diff --git a/testsuite/integration-arquillian/tests/other/adapters/pom.xml b/testsuite/integration-arquillian/tests/other/adapters/pom.xml
index b7f64f3..bbc6c35 100644
--- a/testsuite/integration-arquillian/tests/other/adapters/pom.xml
+++ b/testsuite/integration-arquillian/tests/other/adapters/pom.xml
@@ -50,9 +50,8 @@
         <app.server.management.port>10190</app.server.management.port>
         <app.server.management.port.jmx>10199</app.server.management.port.jmx>
         <app.server.startup.timeout>60</app.server.startup.timeout>
-        <app.server.memory.settings>-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m</app.server.memory.settings>
         <!-- Cluster tests are failing with -Xmx512 for insufficient physical memory -->
-        <app.server.cluster.tests.memory.settings>-Xmx384m</app.server.cluster.tests.memory.settings>
+        <app.server.memory.settings>-Xms64m -Xmx384m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m</app.server.memory.settings>
 
         <!--debug properties-->
         <app.server.debug.port>5006</app.server.debug.port>
@@ -216,7 +215,6 @@
 
                                 <app.server.startup.timeout>${app.server.startup.timeout}</app.server.startup.timeout>
                                 <app.server.memory.settings>${app.server.memory.settings}</app.server.memory.settings>
-                                <app.server.cluster.tests.memory.settings>${app.server.cluster.tests.memory.settings}</app.server.cluster.tests.memory.settings>
                                 <app.server.jboss.jvm.debug.args>${app.server.jboss.jvm.debug.args}</app.server.jboss.jvm.debug.args>
                                 
                                 <app.server.reverse-proxy.port.offset>${app.server.reverse-proxy.port.offset}</app.server.reverse-proxy.port.offset>
@@ -236,7 +234,6 @@
                     <plugin>
                         <groupId>org.jboss.shrinkwrap.resolver</groupId>
                         <artifactId>shrinkwrap-resolver-maven-plugin</artifactId>
-                        <version>${version.shrinkwrap.resolvers}</version>
                         <executions>
                             <execution>
                                 <goals>
diff --git a/testsuite/integration-arquillian/tests/pom.xml b/testsuite/integration-arquillian/tests/pom.xml
index c656bd2..a2a0e25 100755
--- a/testsuite/integration-arquillian/tests/pom.xml
+++ b/testsuite/integration-arquillian/tests/pom.xml
@@ -78,6 +78,21 @@
         <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>
+
         <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>
@@ -165,6 +180,25 @@
                                 <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>
                     </executions>
                 </plugin>
                 <plugin>
@@ -265,6 +299,21 @@
                             <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.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>
+
                             <frontend.console.output>${frontend.console.output}</frontend.console.output>
                             <backends.console.output>${backend.console.output}</backends.console.output>