keycloak-uncached

Changes

Details

diff --git a/testsuite/integration-arquillian/pom.xml b/testsuite/integration-arquillian/pom.xml
index 1c7a710..f26cb46 100644
--- a/testsuite/integration-arquillian/pom.xml
+++ b/testsuite/integration-arquillian/pom.xml
@@ -39,6 +39,7 @@
         <containers.home>${project.build.directory}/containers</containers.home>
         <auth.server.java.home>${java.home}</auth.server.java.home>
         <app.server.java.home>${java.home}</app.server.java.home>
+        <app.server>undertow</app.server>
 
         <!--component versions-->
         <!--to update arquillian-core to 1.3.0.Final or higher see https://issues.jboss.org/browse/ARQ-2181 -->
diff --git a/testsuite/integration-arquillian/servers/app-server/pom.xml b/testsuite/integration-arquillian/servers/app-server/pom.xml
index b97e0bf..508f40d 100644
--- a/testsuite/integration-arquillian/servers/app-server/pom.xml
+++ b/testsuite/integration-arquillian/servers/app-server/pom.xml
@@ -40,6 +40,7 @@
         <module>jboss</module>
         <module>karaf</module>
         <module>tomcat</module>
+        <module>undertow</module>
     </modules>
 
 </project>
diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/pom.xml b/testsuite/integration-arquillian/servers/app-server/undertow/pom.xml
new file mode 100644
index 0000000..0432e2b
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/undertow/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<!--
+~ Copyright 2018 Red Hat, Inc. and/or its affiliates
+~ and other contributors as indicated by the @author tags.
+~
+<?xml version="1.0"?>
+~ http://www.apache.org/licenses/LICENSE-2.0
+~
+~ Unless required by applicable law or agreed to in writing, software
+~ distributed under the License is distributed on an "AS IS" BASIS,
+~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~ See the License for the specific language governing permissions and
+~ limitations under the License.
+-->
+
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <parent>
+        <groupId>org.keycloak.testsuite</groupId>
+        <artifactId>integration-arquillian-servers-app-server</artifactId>
+        <version>4.0.0.Final-SNAPSHOT</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>integration-arquillian-servers-app-server-undertow</artifactId>
+    <packaging>jar</packaging>
+    <name>App Server - Undertow</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.keycloak</groupId>
+            <artifactId>keycloak-undertow-adapter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.keycloak.testsuite</groupId>
+            <artifactId>integration-arquillian-servers-app-server-spi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.keycloak.testsuite</groupId>
+            <artifactId>integration-arquillian-servers-util</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-undertow</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowAppServerProvider.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowAppServerProvider.java
new file mode 100644
index 0000000..cd60f89
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowAppServerProvider.java
@@ -0,0 +1,85 @@
+/*
+ * 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.undertow.container;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.jboss.shrinkwrap.descriptor.spi.node.Node;
+import org.keycloak.testsuite.arquillian.container.AppServerContainerSPI;
+import org.keycloak.testsuite.arquillian.undertow.UndertowAppServer;
+
+/**
+ * @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
+ */
+public class UndertowAppServerProvider implements AppServerContainerSPI {
+
+    private Node configuration;
+    private static final String containerName = "undertow";
+
+    @Override
+    public String getName() {
+        return containerName;
+    }
+
+    @Override
+    public List<Node> getContainers() {
+        List<Node> containers = new ArrayList<>();
+
+        containers.add(standaloneContainer());
+
+        //not supported yet
+//        containers.add(haNodeContainer(1));
+//        containers.add(haNodeContainer(2));
+
+        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("bindAddress", "0.0.0.0");
+        createChild("bindHttpPort", "8280");
+        createChild("adapterImplClass", UndertowAppServer.class.getName());
+
+        return container;
+    }
+
+    private Node haNodeContainer(int number) {
+        Node container = new Node("container");
+        container.attribute("mode", "manual");
+        container.attribute("qualifier", AppServerContainerSPI.APP_SERVER + "-" + containerName + "-ha-node-" + number);
+
+        configuration = container.createChild("configuration");
+        createChild("enabled", "true");
+        createChild("bindAddress", "localhost");
+        createChild("bindHttpPort", "8280");
+        createChild("bindHttpPortOffset", Integer.toString(number));
+        createChild("adapterImplClass", UndertowAppServer.class.getName());
+
+        return container;
+    }
+
+}
diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServer.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServer.java
new file mode 100644
index 0000000..a2297c3
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServer.java
@@ -0,0 +1,170 @@
+/*
+ * 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.undertow;
+
+import io.undertow.Undertow;
+import io.undertow.server.handlers.PathHandler;
+import io.undertow.servlet.api.DeploymentInfo;
+import io.undertow.servlet.api.DeploymentManager;
+import io.undertow.servlet.api.ServletContainer;
+import io.undertow.servlet.api.ServletInfo;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.servlet.ServletException;
+import org.arquillian.undertow.UndertowContainerConfiguration;
+import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
+import org.jboss.arquillian.container.spi.client.container.DeploymentException;
+import org.jboss.arquillian.container.spi.client.container.LifecycleException;
+import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
+import org.jboss.logging.Logger;
+import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptor;
+import org.jboss.shrinkwrap.undertow.api.UndertowWebArchive;
+import org.keycloak.common.util.reflections.Reflections;
+import org.keycloak.testsuite.utils.undertow.UndertowDeployerHelper;
+import org.keycloak.testsuite.utils.undertow.UndertowWarClassLoader;
+
+/**
+ * @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
+ */
+public class UndertowAppServer implements DeployableContainer<UndertowAppServerConfiguration> {
+
+    private static final Logger log = Logger.getLogger(UndertowAppServer.class);
+
+    private UndertowContainerConfiguration configuration;
+    private UndertowJaxrsServer undertow;
+    Map<String, String> deployedArchivesToContextPath = new ConcurrentHashMap<>();
+
+    @Override
+    public Class<UndertowAppServerConfiguration> getConfigurationClass() {
+        return UndertowAppServerConfiguration.class;
+    }
+
+    @Override
+    public void setup(UndertowAppServerConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    @Override
+    public void start() throws LifecycleException {
+        long start = System.currentTimeMillis();
+
+        undertow = new UndertowJaxrsServer();
+        undertow.start(Undertow.builder()
+            .addHttpListener(configuration.getBindHttpPort(), configuration.getBindAddress()));
+        log.infof("App server started in %dms on http://%s:%d/", (System.currentTimeMillis() - start), configuration.getBindAddress(), configuration.getBindHttpPort());
+    }
+
+    @Override
+    public void stop() throws LifecycleException {
+        undertow.stop();
+        log.info("App Server stopped.");
+    }
+
+    @Override
+    public ProtocolDescription getDefaultProtocol() {
+        return new ProtocolDescription("Servlet 3.1");
+    }
+
+    @Override
+    public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
+        log.info("Deploying archive " + archive.getName());
+        DeploymentInfo di;
+        if (archive instanceof UndertowWebArchive) {
+            di = ((UndertowWebArchive) archive).getDeploymentInfo();
+        } else if (archive instanceof WebArchive) {
+            di = new UndertowDeployerHelper().getDeploymentInfo(configuration, (WebArchive)archive);
+        } else {
+            throw new IllegalArgumentException("UndertowContainer only supports UndertowWebArchive or WebArchive.");
+        }
+
+        ClassLoader parentCl = Thread.currentThread().getContextClassLoader();
+        UndertowWarClassLoader classLoader = new UndertowWarClassLoader(parentCl, archive);
+        Thread.currentThread().setContextClassLoader(classLoader);
+
+        try {
+            undertow.deploy(di);
+        } finally {
+            Thread.currentThread().setContextClassLoader(parentCl);
+        }
+
+        deployedArchivesToContextPath.put(archive.getName(), di.getContextPath());
+
+        return new ProtocolMetaData().addContext(
+                createHttpContextForDeploymentInfo(di));
+    }
+
+    @Override
+    public void undeploy(Archive<?> archive) throws DeploymentException {
+        log.info("Undeploying archive " + archive.getName());
+        Field containerField = Reflections.findDeclaredField(UndertowJaxrsServer.class, "container");
+        Reflections.setAccessible(containerField);
+        ServletContainer container = (ServletContainer) Reflections.getFieldValue(containerField, undertow);
+
+        DeploymentManager deploymentMgr = container.getDeployment(archive.getName());
+        if (deploymentMgr != null) {
+            DeploymentInfo deployment = deploymentMgr.getDeployment().getDeploymentInfo();
+
+            try {
+                deploymentMgr.stop();
+            } catch (ServletException se) {
+                throw new DeploymentException(se.getMessage(), se);
+            }
+
+            deploymentMgr.undeploy();
+
+            Field rootField = Reflections.findDeclaredField(UndertowJaxrsServer.class, "root");
+            Reflections.setAccessible(rootField);
+            PathHandler root = (PathHandler) Reflections.getFieldValue(rootField, undertow);
+
+            String path = deployedArchivesToContextPath.get(archive.getName());
+            root.removePrefixPath(path);
+
+            container.removeDeployment(deployment);
+        } else {
+            log.warnf("Deployment '%s' not found", archive.getName());
+        }
+    }
+
+    @Override
+    public void deploy(Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void undeploy(Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    private HTTPContext createHttpContextForDeploymentInfo(DeploymentInfo deploymentInfo) {
+        HTTPContext httpContext = new HTTPContext(configuration.getBindAddress(), configuration.getBindHttpPort());
+        final Map<String, ServletInfo> servlets = deploymentInfo.getServlets();
+        final Collection<ServletInfo> servletsInfo = servlets.values();
+        for (ServletInfo servletInfo : servletsInfo) {
+            httpContext.add(new Servlet(servletInfo.getName(), deploymentInfo.getContextPath()));
+        }
+        return httpContext;
+    }
+}
diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerConfiguration.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerConfiguration.java
new file mode 100644
index 0000000..9a6ccce
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerConfiguration.java
@@ -0,0 +1,48 @@
+/*
+ * 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.undertow;
+
+import org.arquillian.undertow.UndertowContainerConfiguration;
+import org.jboss.arquillian.container.spi.ConfigurationException;
+import org.jboss.logging.Logger;
+
+public class UndertowAppServerConfiguration extends UndertowContainerConfiguration {
+
+    protected static final Logger log = Logger.getLogger(UndertowAppServerConfiguration.class);
+
+    private int bindHttpPortOffset = 0;
+
+    public int getBindHttpPortOffset() {
+        return bindHttpPortOffset;
+    }
+
+    public void setBindHttpPortOffset(int bindHttpPortOffset) {
+        this.bindHttpPortOffset = bindHttpPortOffset;
+    }
+
+    @Override
+    public void validate() throws ConfigurationException {
+        super.validate();
+
+        int basePort = getBindHttpPort();
+        int newPort = basePort + bindHttpPortOffset;
+        setBindHttpPort(newPort);
+        log.info("App server undertow will listen on port: " + newPort);
+    }
+
+}
diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
new file mode 100644
index 0000000..9201599
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
@@ -0,0 +1 @@
+org.keycloak.testsuite.arquillian.undertow.UndertowAppServerArquillianExtension
diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerSPI b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerSPI
new file mode 100644
index 0000000..a00362f
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerSPI
@@ -0,0 +1 @@
+org.keycloak.testsuite.arquillian.undertow.container.UndertowAppServerProvider
diff --git a/testsuite/integration-arquillian/servers/auth-server/undertow/pom.xml b/testsuite/integration-arquillian/servers/auth-server/undertow/pom.xml
index 6793118..dc325c6 100644
--- a/testsuite/integration-arquillian/servers/auth-server/undertow/pom.xml
+++ b/testsuite/integration-arquillian/servers/auth-server/undertow/pom.xml
@@ -34,7 +34,11 @@
             <groupId>org.keycloak</groupId>
             <artifactId>keycloak-testsuite-utils</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.keycloak.testsuite</groupId>
+            <artifactId>integration-arquillian-servers-util</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.jboss.arquillian.junit</groupId>
             <artifactId>arquillian-junit-container</artifactId>
@@ -42,7 +46,6 @@
         <dependency>
             <groupId>org.jboss.arquillian.container</groupId>
             <artifactId>undertow-embedded</artifactId>
-            <version>${undertow-embedded.version}</version>
         </dependency>
         <dependency>
             <groupId>org.jboss.resteasy</groupId>
diff --git a/testsuite/integration-arquillian/servers/auth-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/KeycloakOnUndertow.java b/testsuite/integration-arquillian/servers/auth-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/KeycloakOnUndertow.java
index dac8ea7..1bbf6ba 100644
--- a/testsuite/integration-arquillian/servers/auth-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/KeycloakOnUndertow.java
+++ b/testsuite/integration-arquillian/servers/auth-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/KeycloakOnUndertow.java
@@ -47,6 +47,8 @@ import org.keycloak.services.filters.KeycloakSessionServletFilter;
 import org.keycloak.services.managers.ApplianceBootstrap;
 import org.keycloak.services.resources.KeycloakApplication;
 import org.keycloak.testsuite.KeycloakServer;
+import org.keycloak.testsuite.utils.undertow.UndertowDeployerHelper;
+import org.keycloak.testsuite.utils.undertow.UndertowWarClassLoader;
 import org.keycloak.util.JsonSerialization;
 
 import javax.servlet.DispatcherType;
@@ -164,6 +166,7 @@ public class KeycloakOnUndertow implements DeployableContainer<KeycloakOnUnderto
 
     @Override
     public void start() throws LifecycleException {
+        log.info("Starting auth server on undertow.");
         if (isRemoteMode()) {
             log.info("Skip bootstrap undertow. We are in remote mode");
             return;
@@ -194,7 +197,7 @@ public class KeycloakOnUndertow implements DeployableContainer<KeycloakOnUnderto
 
         setupDevConfig();
 
-        log.info("Auth server started in " + (System.currentTimeMillis() - start) + " ms\n");
+        log.infof("Auth server started in %dms on http://%s:%d/auth", (System.currentTimeMillis() - start), configuration.getBindAddress(), configuration.getBindHttpPort());
     }
 
 
diff --git a/testsuite/integration-arquillian/servers/pom.xml b/testsuite/integration-arquillian/servers/pom.xml
index d4812c4..250d4cb 100644
--- a/testsuite/integration-arquillian/servers/pom.xml
+++ b/testsuite/integration-arquillian/servers/pom.xml
@@ -64,8 +64,19 @@
         <module>auth-server</module>
         <module>app-server</module>
         <module>cache-server</module>
+        <module>util</module>
     </modules>
 
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.jboss.arquillian.container</groupId>
+                <artifactId>undertow-embedded</artifactId>
+                <version>${undertow-embedded.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <profiles>
         <profile>
             <id>auth-server-cluster</id>
diff --git a/testsuite/integration-arquillian/servers/util/pom.xml b/testsuite/integration-arquillian/servers/util/pom.xml
new file mode 100644
index 0000000..91cda23
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/util/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!--
+~ 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.
+-->
+
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <parent>
+        <groupId>org.keycloak.testsuite</groupId>
+        <artifactId>integration-arquillian-servers</artifactId>
+        <version>4.0.0.Final-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>integration-arquillian-servers-util</artifactId>
+    <packaging>jar</packaging>
+    <name>Test Servers Util</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.arquillian.container</groupId>
+            <artifactId>undertow-embedded</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml
index 74fd0a7..7a222f8 100644
--- a/testsuite/integration-arquillian/tests/base/pom.xml
+++ b/testsuite/integration-arquillian/tests/base/pom.xml
@@ -126,6 +126,12 @@
             <artifactId>integration-arquillian-servers-app-server-spi</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.keycloak.testsuite</groupId>
+            <artifactId>integration-arquillian-servers-app-server-undertow</artifactId>
+            <version>${project.version}</version>
+            <scope>runtime</scope>
+        </dependency>
     </dependencies>
     
     <build>
@@ -165,7 +171,6 @@
                         <exclude>${exclude.client}</exclude>
                         <exclude>${exclude.cluster}</exclude>
                         <exclude>${exclude.crossdc}</exclude>
-                        <exclude>${exclude.undertow.adapter}</exclude>
                         <exclude>${exclude.x509}</exclude>
                         <exclude>${exclude.cors.tests}</exclude>
                         <exclude>${exclude.HoK}</exclude>
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/MultiTenant.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/MultiTenant.java
index 3cd8663..7d3d5d0 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/MultiTenant.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/MultiTenant.java
@@ -44,14 +44,14 @@ public class MultiTenant extends AbstractPageWithInjectedUrl {
 
     @Override
     public UriBuilder createUriBuilder() {
-        return super.createUriBuilder().path("/").queryParam("realm", "{tenantRealm}");
+        return super.createUriBuilder().path("{tenantRealm}");
     }
 
     public URL getTenantRealmUrl(String realm) {
         try {
             return getUriBuilder().build(realm).toURL();
         } catch (MalformedURLException ex) {
-            throw new IllegalStateException("Page URL is malformed.");
+            throw new IllegalStateException("Page URL is malformed.", ex);
         }
     }
 
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 6bb1e84..f38cc8c 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
@@ -1,3 +1,20 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.keycloak.testsuite.arquillian;
 
 import org.jboss.arquillian.container.test.api.ContainerController;
@@ -32,6 +49,8 @@ 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 CURRENT_APP_SERVER = System.getProperty("app.server", "undertow");
 
     @Inject private Instance<ContainerController> containerConrollerInstance;
@@ -58,15 +77,22 @@ public class AppServerTestEnricher {
 
     public static String getAppServerContextRoot(int clusterPortOffset) {
         String host = System.getProperty("app.server.host", "localhost");
-        int httpPort = Integer.parseInt(System.getProperty("app.server.http.port")); // property must be set
-        int httpsPort = Integer.parseInt(System.getProperty("app.server.https.port")); // property must be set
-
+        
         boolean sslRequired = Boolean.parseBoolean(System.getProperty("app.server.ssl.required"));
+  
+        int port = sslRequired ? parsePort("app.server.https.port") : parsePort("app.server.http.port");
         String scheme = sslRequired ? "https" : "http";
-        int port = sslRequired ? httpsPort : httpPort;
 
         return String.format("%s://%s:%s", scheme, host, port + clusterPortOffset);
     }
+    
+    private static int parsePort(String property) {
+        try {
+            return Integer.parseInt(System.getProperty(property));
+        } catch (NumberFormatException ex) {
+            throw new RuntimeException("Failed to get " + property, ex);
+        }
+    }
 
     public void updateTestContextWithAppServerInfo(@Observes(precedence = 1) BeforeClass event) {
         testContext = testContextInstance.get();
@@ -138,7 +164,7 @@ public class AppServerTestEnricher {
 
         return managementClient;
     }
-    
+
     public void startAppServer(@Observes(precedence = -1) BeforeClass event) throws MalformedURLException, InterruptedException, IOException {
         if (testContext.isAdapterContainerEnabled() && !testContext.isRelativeAdapterTest()) {
             ContainerController controller = containerConrollerInstance.get();
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java
index afa2a87..bb8fe41 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/AuthServerTestEnricher.java
@@ -16,6 +16,7 @@
  */
 package org.keycloak.testsuite.arquillian;
 
+import org.jboss.arquillian.container.spi.Container;
 import org.jboss.arquillian.container.spi.ContainerRegistry;
 import org.jboss.arquillian.container.spi.event.StartContainer;
 import org.jboss.arquillian.container.spi.event.StartSuiteContainers;
@@ -138,7 +139,7 @@ public class AuthServerTestEnricher {
     }
     
     public void distinguishContainersInConsoleOutput(@Observes(precedence = 5) StartContainer event) {
-        log.info("*****************************************************************"
+        log.info("************************" + event.getContainer().getName()
                 + "*****************************************************************************");
     }
 
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainerInfo.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainerInfo.java
index 9b08d80..db786b4 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainerInfo.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/ContainerInfo.java
@@ -17,7 +17,6 @@ public class ContainerInfo implements Comparable<ContainerInfo> {
 
     private URL contextRoot;
     private Container arquillianContainer;
-    private boolean adapterLibsInstalled;
 
     public ContainerInfo(Container arquillianContainer) {
         if (arquillianContainer == null) {
@@ -79,14 +78,6 @@ public class ContainerInfo implements Comparable<ContainerInfo> {
         return getQualifier();
     }
 
-    public boolean isAdapterLibsInstalled() {
-        return adapterLibsInstalled;
-    }
-
-    public void setAdapterLibsInstalled(boolean adapterLibsInstalled) {
-        this.adapterLibsInstalled = adapterLibsInstalled;
-    }
-
     @Override
     public int hashCode() {
         int hash = 7;
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/DeploymentTargetModifier.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/DeploymentTargetModifier.java
index 448e1a8..de54ce7 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/DeploymentTargetModifier.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/DeploymentTargetModifier.java
@@ -77,7 +77,7 @@ public class DeploymentTargetModifier extends AnnotationDeploymentScenarioGenera
                 if (deployment.getTarget() == null || Objects.equals(deployment.getTarget().getName(), "_DEFAULT_")) {
                     log.debug("Setting target container for " + deployment.getName() + ": " + appServerQualifier);
                     deployment.setTarget(new TargetDescription(appServerQualifier));
-                } else if (! containerMatches) {
+                } else if (! containerMatches && !deployment.getArchive().getName().equals("run-on-server-classes.war")) {// run-on-server deployment can have different target
                     throw new RuntimeException("Inconsistency found: target container for " + deployment.getName()
                       + " is set to " + deployment.getTarget().getName()
                       + " but the test class targets " + appServerQualifier);
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/provider/URLProvider.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/provider/URLProvider.java
index 6570a2a..a0d2fce 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/provider/URLProvider.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/provider/URLProvider.java
@@ -54,10 +54,30 @@ public class URLProvider extends URLResourceProvider {
 
     private static final Set<String> fixedUrls = new HashSet<>();
 
+    /*
+     * TODO: review this for EAP6
+     */
     @Override
     public Object doLookup(ArquillianResource resource, Annotation... qualifiers) {
         URL url = (URL) super.doLookup(resource, qualifiers);
 
+        if (url == null) {
+            String port = appServerSslRequired ? 
+                                System.getProperty("app.server.https.port", "8643") : 
+                                System.getProperty("app.server.http.port", "8280");
+            String protocol = appServerSslRequired ? "https" : "http";
+
+            try {
+                for (Annotation a : qualifiers) {
+                    if (OperateOnDeployment.class.isAssignableFrom(a.annotationType())) {
+                        return new URL(protocol + "://localhost:" + port + "/" + ((OperateOnDeployment) a).value());
+                    }
+                }
+            } catch (MalformedURLException ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+        
         // fix injected URL
         if (url != null) {
             try {
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractBrokerLinkAndTokenExchangeTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractBrokerLinkAndTokenExchangeTest.java
index 909968f..febc9d7 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractBrokerLinkAndTokenExchangeTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractBrokerLinkAndTokenExchangeTest.java
@@ -18,6 +18,7 @@ package org.keycloak.testsuite.adapter.servlet;
 
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.container.test.api.OperateOnDeployment;
+import org.jboss.arquillian.container.test.api.TargetsContainer;
 import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
@@ -51,6 +52,8 @@ import org.keycloak.representations.idm.authorization.ClientPolicyRepresentation
 import org.keycloak.representations.idm.authorization.DecisionStrategy;
 import org.keycloak.services.resources.admin.permissions.AdminPermissionManagement;
 import org.keycloak.services.resources.admin.permissions.AdminPermissions;
+import org.keycloak.testsuite.AbstractAuthTest;
+import org.keycloak.testsuite.adapter.AbstractAdapterTest;
 import org.keycloak.testsuite.adapter.AbstractServletsAdapterTest;
 import org.keycloak.testsuite.broker.BrokerTestTools;
 import org.keycloak.testsuite.page.AbstractPageWithInjectedUrl;
@@ -58,6 +61,7 @@ import org.keycloak.testsuite.pages.AccountUpdateProfilePage;
 import org.keycloak.testsuite.pages.ErrorPage;
 import org.keycloak.testsuite.pages.LoginPage;
 import org.keycloak.testsuite.pages.LoginUpdateProfilePage;
+import org.keycloak.testsuite.runonserver.RunOnServerDeployment;
 import org.keycloak.testsuite.util.OAuthClient;
 import org.keycloak.testsuite.util.WaitUtils;
 import org.keycloak.util.BasicAuthHelper;
@@ -74,7 +78,9 @@ import java.io.File;
 import java.net.URL;
 import java.util.LinkedList;
 import java.util.List;
+
 import static org.keycloak.testsuite.admin.ApiUtil.createUserAndResetPasswordWithAdminClient;
+import static org.keycloak.testsuite.arquillian.DeploymentTargetModifier.AUTH_SERVER_CURRENT;
 
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@@ -88,6 +94,21 @@ public abstract class AbstractBrokerLinkAndTokenExchangeTest extends AbstractSer
     public static final String UNAUTHORIZED_CHILD_CLIENT = "unauthorized-child-client";
     public static final String PARENT_CLIENT = "parent-client";
 
+    @Deployment
+    @TargetsContainer(AUTH_SERVER_CURRENT)
+    public static WebArchive deploy() {
+        return RunOnServerDeployment.create(
+                AbstractBrokerLinkAndTokenExchangeTest.class,
+                AbstractServletsAdapterTest.class,
+                AbstractAdapterTest.class,
+                AbstractAuthTest.class);
+    }
+
+    @Deployment(name = ClientApp.DEPLOYMENT_NAME)
+    protected static WebArchive accountLink() {
+        return servletDeployment(ClientApp.DEPLOYMENT_NAME, LinkAndExchangeServlet.class, ServletTestUtils.class);
+    }
+
     @Page
     protected LoginUpdateProfilePage loginUpdateProfilePage;
 
@@ -174,12 +195,6 @@ public abstract class AbstractBrokerLinkAndTokenExchangeTest extends AbstractSer
 
     }
 
-
-    @Deployment(name = ClientApp.DEPLOYMENT_NAME)
-    protected static WebArchive accountLink() {
-        return servletDeployment(ClientApp.DEPLOYMENT_NAME, LinkAndExchangeServlet.class, ServletTestUtils.class);
-    }
-    
     @Before
     public void addIdpUser() {
         RealmResource realm = adminClient.realms().realm(PARENT_IDP);
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoFilterServletAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoFilterServletAdapterTest.java
index 495434e..05426ee 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoFilterServletAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoFilterServletAdapterTest.java
@@ -27,16 +27,14 @@ public abstract class AbstractDemoFilterServletAdapterTest extends AbstractDemoS
 
     @Test
     @Override
-    @Ignore
+    @Ignore(value = "Can't test because of the way filter works")
     public void testNullBearerTokenCustomErrorPage() {
-        //can't test because of the way filter works
     }
     
     @Test
     @Override
-    @Ignore
+    @Ignore(value = "Don't need to test this because HttpServletRequest.authenticate doesn't make sense with filter implementation")
     public void testAuthenticated() {
-        //Don't need to test this because HttpServletRequest.authenticate doesn't make sense with filter implementation
     }
 
     @Test
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java
index 01e9c3b..7d458cf 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractDemoServletsAdapterTest.java
@@ -1290,4 +1290,4 @@ public abstract class AbstractDemoServletsAdapterTest extends AbstractServletsAd
                 .clearDetails()
                 .assertEvent(); 
     }
-}
\ No newline at end of file
+}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractSessionServletAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractSessionServletAdapterTest.java
index 31bdc7d..11443c4 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractSessionServletAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/AbstractSessionServletAdapterTest.java
@@ -22,6 +22,7 @@ import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.junit.After;
+import org.junit.Assume;
 import org.junit.Test;
 import org.keycloak.OAuth2Constants;
 import org.keycloak.admin.client.resource.ClientResource;
@@ -120,6 +121,7 @@ public abstract class AbstractSessionServletAdapterTest extends AbstractServlets
     //KEYCLOAK-741
     @Test
     public void testSessionInvalidatedAfterFailedRefresh() {
+        assumeNotOnUndertow();
         RealmRepresentation testRealmRep = testRealmResource().toRepresentation();
         ClientResource sessionPortalRes = null;
         for (ClientRepresentation clientRep : testRealmResource().clients().findAll()) {
@@ -177,6 +179,7 @@ public abstract class AbstractSessionServletAdapterTest extends AbstractServlets
     //KEYCLOAK-1216
     @Test
     public void testAccountManagementSessionsLogout() {
+        assumeNotOnUndertow();
         // login as bburke
         loginAndCheckSession(driver, testRealmLoginPage);
         testRealmSessions.navigateTo();
@@ -184,6 +187,13 @@ public abstract class AbstractSessionServletAdapterTest extends AbstractServlets
         // Assert I need to login again (logout was propagated to the app)
         loginAndCheckSession(driver, testRealmLoginPage);
     }
+    
+    private void assumeNotOnUndertow() {
+        Assume.assumeFalse("Not stable on app-server-undertow when whole adapter package is tested. "
+                + "It throws: KC-SERVICES0057: Logout for client 'session-portal' failed\n" 
+                + "org.apache.http.NoHttpResponseException: localhost:8280 failed to respond",
+                System.getProperty("app.server", "undertow").equals("undertow"));
+    }
 
     private void loginAndCheckSession(WebDriver driver, Login login) {
         sessionPortalPage.navigateTo();
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/MultiTenancyTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/MultiTenancyTest.java
index 23bd4bd..8b431ee 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/MultiTenancyTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/MultiTenancyTest.java
@@ -16,9 +16,11 @@
  */
 package org.keycloak.testsuite.adapter.undertow.servlet;
 
+import java.net.URL;
 import java.util.List;
 import javax.ws.rs.core.UriBuilder;
 import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.junit.After;
 import org.junit.Assert;
@@ -26,23 +28,28 @@ import org.junit.Test;
 import org.keycloak.protocol.oidc.OIDCLoginProtocolService;
 import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.testsuite.adapter.AbstractServletsAdapterTest;
+import org.keycloak.testsuite.adapter.page.MultiTenant;
 import org.keycloak.testsuite.adapter.servlet.ErrorServlet;
 import org.keycloak.testsuite.adapter.servlet.MultiTenantResolver;
 import org.keycloak.testsuite.adapter.servlet.MultiTenantServlet;
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
-import static org.keycloak.testsuite.util.IOUtil.loadRealm;
 import org.keycloak.testsuite.util.URLAssert;
 import org.keycloak.testsuite.util.WaitUtils;
 
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
+import static org.keycloak.testsuite.util.IOUtil.loadRealm;
+
 /**
  * note: migrated from old testsuite
  * 
  * @author Juraci Paixão Kröhling <juraci at kroehling.de>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class MultiTenancyTest extends AbstractServletsAdapterTest {
     
+    @Page
+    private MultiTenant tenantPage;
+    
     @Override
     public void addAdapterTestRealms(List<RealmRepresentation> testRealms) {
         testRealms.add(loadRealm("/adapter-test/tenant1-realm.json"));
@@ -54,9 +61,9 @@ public class MultiTenancyTest extends AbstractServletsAdapterTest {
         return false;
     }
     
-    @Deployment(name = "multi-tenant")
+    @Deployment(name = MultiTenant.DEPLOYMENT_NAME)
     protected static WebArchive multiTenant() {
-        return servletDeploymentMultiTenant("multi-tenant", MultiTenantServlet.class, ErrorServlet.class, MultiTenantResolver.class);
+        return servletDeploymentMultiTenant(MultiTenant.DEPLOYMENT_NAME, MultiTenantServlet.class, ErrorServlet.class, MultiTenantResolver.class);
     }
     
     @After
@@ -97,12 +104,10 @@ public class MultiTenancyTest extends AbstractServletsAdapterTest {
     public void testUnauthorizedAccessNotLoggedIn() {
         String keycloakServerBaseUrl = authServerPage.toString();
         
-        driver.navigate().to(authServerContextRootPage + "/multi-tenant/tenant1");
+        driver.navigate().to(tenantPage.getTenantRealmUrl("tenant1"));
         WaitUtils.waitForPageToLoad();
         URLAssert.assertCurrentUrlStartsWith(keycloakServerBaseUrl);
         
-        String currentUrl = driver.getCurrentUrl();
-        String toString = testRealmLoginPage.toString();
         testRealmLoginPage.form().login("user-tenant2", "user-tenant2");
         URLAssert.assertCurrentUrlStartsWith(keycloakServerBaseUrl);
     }
@@ -116,20 +121,20 @@ public class MultiTenancyTest extends AbstractServletsAdapterTest {
     public void testUnauthorizedAccessLoggedIn() {
         doTenantRequests("tenant1", false);
         
-        driver.navigate().to(authServerContextRootPage + "/multi-tenant/tenant2");
+        driver.navigate().to(tenantPage.getTenantRealmUrl("tenant2"));
         URLAssert.assertCurrentUrlStartsWith(authServerPage.toString());
     }
     
     private void doTenantRequests(String tenant, boolean logout) {
         String tenantLoginUrl = OIDCLoginProtocolService.authUrl(UriBuilder.fromUri(authServerPage.getAuthRoot())).build(tenant).toString();
-        String tenantUrl = authServerContextRootPage + "/multi-tenant/" + tenant;
+        URL tenantUrl = tenantPage.getTenantRealmUrl(tenant);
         
         driver.navigate().to(tenantUrl);
         URLAssert.assertCurrentUrlStartsWith(tenantLoginUrl);
         testRealmLoginPage.form().login("bburke@redhat.com", "password");
         log.debug("Current url: " + driver.getCurrentUrl());
         
-        URLAssert.assertCurrentUrlStartsWith(tenantUrl);
+        URLAssert.assertCurrentUrlStartsWith(tenantUrl.toString());
         String pageSource = driver.getPageSource();
         log.debug(pageSource);
         
@@ -137,7 +142,7 @@ public class MultiTenancyTest extends AbstractServletsAdapterTest {
         Assert.assertTrue(pageSource.contains("Realm: " + tenant));
 
         if (logout) {
-            driver.navigate().to(authServerContextRootPage + "/multi-tenant/" + tenant + "/logout");
+            driver.navigate().to(tenantUrl + "/logout");
             Assert.assertFalse(driver.getPageSource().contains("Username: bburke@redhat.com"));
             Assert.assertTrue(driver.getCurrentUrl().startsWith(tenantLoginUrl));
         }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowBrokerLinkAndTokenExchangeTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowBrokerLinkAndTokenExchangeTest.java
index d21dddc..89dadd3 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowBrokerLinkAndTokenExchangeTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowBrokerLinkAndTokenExchangeTest.java
@@ -16,34 +16,24 @@
  */
 package org.keycloak.testsuite.adapter.undertow.servlet;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.keycloak.testsuite.adapter.servlet.AbstractBrokerLinkAndTokenExchangeTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 /**
  *
  * @author <a href="mailto:vramik@redhat.com">Vlastislav Ramik</a>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowBrokerLinkAndTokenExchangeTest extends AbstractBrokerLinkAndTokenExchangeTest {
 
-    //@Test
+    @Test
+    @Ignore(value = "testing purpose")
     public void testUi() throws Exception {
         Thread.sleep(1000000000);
 
     }
-
-    @Override
-    @Test
-    public void testAccountLink() throws Exception {
-        super.testAccountLink();
-    }
-
-    @Override
-    @Test
-    public void testAccountLinkNoTokenStore() throws Exception {
-        super.testAccountLinkNoTokenStore();
-    }
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowClientInitiatedAccountLinkTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowClientInitiatedAccountLinkTest.java
index 38f54bb..b9cc978 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowClientInitiatedAccountLinkTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowClientInitiatedAccountLinkTest.java
@@ -16,28 +16,24 @@
  */
 package org.keycloak.testsuite.adapter.undertow.servlet;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.keycloak.testsuite.adapter.servlet.AbstractClientInitiatedAccountLinkTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 /**
  *
  * @author <a href="mailto:vramik@redhat.com">Vlastislav Ramik</a>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowClientInitiatedAccountLinkTest extends AbstractClientInitiatedAccountLinkTest {
 
-    //@Test
+    @Test
+    @Ignore
     public void testUi() throws Exception {
         Thread.sleep(1000000000);
 
     }
-
-    @Override
-    @Test
-    public void testAccountLink() throws Exception {
-        super.testAccountLink();
-    }
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoFilterServletAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoFilterServletAdapterTest.java
index e759bb1..a5c94bc 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoFilterServletAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoFilterServletAdapterTest.java
@@ -20,11 +20,11 @@ package org.keycloak.testsuite.adapter.undertow.servlet;
 import org.keycloak.testsuite.adapter.servlet.AbstractDemoFilterServletAdapterTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowDemoFilterServletAdapterTest extends AbstractDemoFilterServletAdapterTest {
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoServletsAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoServletsAdapterTest.java
index ab19c0d..511a442 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoServletsAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowDemoServletsAdapterTest.java
@@ -17,21 +17,15 @@
 
 package org.keycloak.testsuite.adapter.undertow.servlet;
 
-import org.junit.Test;
 import org.keycloak.testsuite.adapter.servlet.AbstractDemoServletsAdapterTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowDemoServletsAdapterTest extends AbstractDemoServletsAdapterTest {
-    
-    @Test
-    @Override
-    public void testLoginEncodedRedirectUri() {
-        super.testLoginEncodedRedirectUri();
-    }
+
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOfflineServletsAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOfflineServletsAdapterTest.java
index c330ee9..4ed1a44 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOfflineServletsAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOfflineServletsAdapterTest.java
@@ -20,11 +20,11 @@ package org.keycloak.testsuite.adapter.undertow.servlet;
 import org.keycloak.testsuite.adapter.servlet.AbstractOfflineServletsAdapterTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowOfflineServletsAdapterTest extends AbstractOfflineServletsAdapterTest {
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOIDCPublicKeyRotationAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOIDCPublicKeyRotationAdapterTest.java
index 77d2def..f96aa69 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOIDCPublicKeyRotationAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowOIDCPublicKeyRotationAdapterTest.java
@@ -20,11 +20,11 @@ package org.keycloak.testsuite.adapter.undertow.servlet;
 import org.keycloak.testsuite.adapter.servlet.AbstractOIDCPublicKeyRotationAdapterTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowOIDCPublicKeyRotationAdapterTest extends AbstractOIDCPublicKeyRotationAdapterTest {
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java
index e6308f0..20be835 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java
@@ -22,6 +22,7 @@ import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.keycloak.OAuth2Constants;
 import org.keycloak.protocol.oidc.OIDCLoginProtocolService;
@@ -53,6 +54,7 @@ import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWithLo
  * @author <a href="mailto:bburke@redhat.com">Bill Burke</a>
  */
 @AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@Ignore(value = "Need to resolve default relative scenario when running on non-undertow")
 public class UndertowRelaviteUriAdapterTest extends AbstractServletsAdapterTest {
     
     @Page
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionFilterServletAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionFilterServletAdapterTest.java
index efd6783..ba00212 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionFilterServletAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionFilterServletAdapterTest.java
@@ -20,9 +20,9 @@ package org.keycloak.testsuite.adapter.undertow.servlet;
 import org.keycloak.testsuite.adapter.servlet.AbstractSessionFilterServletAdapterTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowSessionFilterServletAdapterTest extends AbstractSessionFilterServletAdapterTest {
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionServletAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionServletAdapterTest.java
index f10043e..0df585d 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionServletAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowSessionServletAdapterTest.java
@@ -20,11 +20,11 @@ package org.keycloak.testsuite.adapter.undertow.servlet;
 import org.keycloak.testsuite.adapter.servlet.AbstractSessionServletAdapterTest;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UndertowSessionServletAdapterTest extends AbstractSessionServletAdapterTest {
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UserStorageConsentTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UserStorageConsentTest.java
index 3cd3403..8dedd5c 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UserStorageConsentTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UserStorageConsentTest.java
@@ -16,7 +16,15 @@
  */
 package org.keycloak.testsuite.adapter.undertow.servlet;
 
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ws.rs.core.Response;
 import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.TargetsContainer;
 import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.junit.Assert;
@@ -36,24 +44,20 @@ import org.keycloak.representations.idm.ComponentRepresentation;
 import org.keycloak.representations.idm.RoleRepresentation;
 import org.keycloak.representations.idm.UserRepresentation;
 import org.keycloak.storage.UserStorageProvider;
+import org.keycloak.testsuite.AbstractAuthTest;
+import org.keycloak.testsuite.adapter.AbstractAdapterTest;
 import org.keycloak.testsuite.adapter.AbstractServletsAdapterTest;
 import org.keycloak.testsuite.adapter.page.ProductPortal;
 import org.keycloak.testsuite.adapter.servlet.ProductServlet;
 import org.keycloak.testsuite.admin.ApiUtil;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
+import org.keycloak.testsuite.auth.page.login.PageWithLoginUrl;
 import org.keycloak.testsuite.federation.UserMapStorageFactory;
 import org.keycloak.testsuite.pages.ConsentPage;
+import org.keycloak.testsuite.runonserver.RunOnServerDeployment;
 
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.APP_SERVER_DEFAULT;
+import static org.keycloak.testsuite.arquillian.DeploymentTargetModifier.AUTH_SERVER_CURRENT;
 import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlEquals;
 import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWithLoginUrlOf;
 
@@ -61,7 +65,7 @@ import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWithLo
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
  * @version $Revision: 1 $
  */
-@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT)
+@AppServerContainer(APP_SERVER_DEFAULT)
 public class UserStorageConsentTest extends AbstractServletsAdapterTest {
 
     @Page
@@ -70,7 +74,15 @@ public class UserStorageConsentTest extends AbstractServletsAdapterTest {
     @Page
     protected ConsentPage consentPage;
 
-
+    @Deployment
+    @TargetsContainer(AUTH_SERVER_CURRENT)
+    public static WebArchive deploy() {
+        return RunOnServerDeployment.create(
+                AbstractServletsAdapterTest.class, 
+                AbstractAdapterTest.class, 
+                AbstractAuthTest.class, 
+                PageWithLoginUrl.class);
+    }
 
     @Deployment(name = ProductPortal.DEPLOYMENT_NAME)
     protected static WebArchive productPortal() {
@@ -97,9 +109,6 @@ public class UserStorageConsentTest extends AbstractServletsAdapterTest {
         return id;
     }
 
-
-
-
     public static void setupConsent(KeycloakSession session) {
         RealmModel realm = session.realms().getRealmByName("demo");
         ClientModel product = session.realms().getClientByClientId("product-portal", realm);
@@ -146,8 +155,6 @@ public class UserStorageConsentTest extends AbstractServletsAdapterTest {
         roleList.add(roleRep);
         adminClient.realm("demo").users().get(uid).roles().realmLevel().add(roleList);
 
-
-
         productPortal.navigateTo();
         assertCurrentUrlStartsWithLoginUrlOf(testRealmPage);
         testRealmLoginPage.form().login("memuser", "password");
@@ -165,8 +172,8 @@ public class UserStorageConsentTest extends AbstractServletsAdapterTest {
         assertCurrentUrlStartsWithLoginUrlOf(testRealmPage);
         testRealmLoginPage.form().login("memuser", "password");
         assertCurrentUrlEquals(productPortal.toString());
-        Assert.assertTrue(driver.getPageSource().contains("iPhone"));   }
-
-
-
+        Assert.assertTrue(driver.getPageSource().contains("iPhone"));
+        
+        adminClient.realm("demo").users().delete(uid).close();
+    }
 }
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 4426da2..0cbd649 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml
+++ b/testsuite/integration-arquillian/tests/base/src/test/resources/arquillian.xml
@@ -85,7 +85,7 @@
         <property name="deploymentExportPath">target/deployments</property>
     </engine>
     
-    <container qualifier="auth-server-undertow" mode="suite" >
+    <container qualifier="auth-server-undertow" mode="suite" default="true">
         <configuration>
             <property name="enabled">${auth.server.undertow} &amp;&amp; ! ${auth.server.crossdc}</property>
             <property name="bindAddress">0.0.0.0</property>
@@ -95,7 +95,7 @@
         </configuration>
     </container>
     
-    <container qualifier="auth-server-${auth.server}" mode="suite" >
+    <container qualifier="auth-server-${auth.server}" mode="suite" default="true">
         <configuration>
             <property name="enabled">${auth.server.jboss} &amp;&amp; ! ${auth.server.crossdc}</property>
             <property name="adapterImplClass">${auth.server.adapter.impl.class}</property>
diff --git a/travis-run-tests.sh b/travis-run-tests.sh
index bf59b2a..6a083a0 100755
--- a/travis-run-tests.sh
+++ b/travis-run-tests.sh
@@ -60,7 +60,7 @@ if [ $1 == "unit" ]; then
 fi
 
 if [ $1 == "server-group1" ]; then
-    run-server-tests org.keycloak.testsuite.ad*.**.*Test,!**/adapter/undertow/**/*Test
+    run-server-tests org.keycloak.testsuite.ad*.**.*Test
 fi
 
 if [ $1 == "server-group2" ]; then