keycloak-uncached

Changes

testsuite/integration-arquillian/tests/other/adapters/karaf/fuse70/pom.xml 48(+0 -48)

testsuite/integration-arquillian/tests/other/adapters/karaf/fuse70/src/test/java/org/keycloak/testsuite/adapter/example/Fuse70AdminAdapterTest.java 96(+0 -96)

Details

diff --git a/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/pom.xml b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/pom.xml
index 78db5af..653a257 100644
--- a/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/pom.xml
+++ b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/pom.xml
@@ -26,8 +26,8 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>integration-arquillian-servers-app-server-fuse70</artifactId>
-    <packaging>pom</packaging>
-    <name>App Server - Karaf - JBoss Fuse 7.0</name>
+    <packaging>jar</packaging>
+    <name>App Server - Fuse 7.0</name>
 
     <properties>
         <app.server.karaf>fuse70</app.server.karaf>
@@ -38,6 +38,29 @@
         <app.server.karaf.client.auth>-u admin -p admin</app.server.karaf.client.auth>
     </properties>
 
+    <dependencies>
+        <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-util</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.container</groupId>
+            <artifactId>arquillian-container-osgi</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.guava</groupId>
+                    <artifactId>guava</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
     <build>
         <plugins>
             <plugin>
diff --git a/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/java/org/keycloak/testsuite/arquillian/fuse/container/Fuse70AppServerProvider.java b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/java/org/keycloak/testsuite/arquillian/fuse/container/Fuse70AppServerProvider.java
new file mode 100644
index 0000000..fda6070
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/java/org/keycloak/testsuite/arquillian/fuse/container/Fuse70AppServerProvider.java
@@ -0,0 +1,92 @@
+/*
+ * 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.fuse.container;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.jboss.arquillian.core.spi.Validate;
+import org.jboss.shrinkwrap.descriptor.spi.node.Node;
+import org.keycloak.testsuite.arquillian.container.AppServerContainerProvider;
+import org.keycloak.testsuite.utils.arquillian.fuse.CustomFuseContainer;
+
+/**
+ * @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
+ */
+public class Fuse70AppServerProvider implements AppServerContainerProvider {
+
+    private Node configuration;
+    private static final String containerName = "fuse70";
+
+    private final String appServerHome;
+    private final String appServerJavaHome;
+    private final String managementUser;
+    private final String managementPassword;
+
+    public Fuse70AppServerProvider() {
+        appServerHome = System.getProperty("app.server.home");
+        appServerJavaHome = System.getProperty("app.server.java.home");
+        managementUser = System.getProperty("app.server.management.user");
+        managementPassword = System.getProperty("app.server.management.password");
+
+        Validate.notNullOrEmpty(appServerHome, "app.server.home is not set.");
+        Validate.notNullOrEmpty(appServerJavaHome, "app.server.java.home is not set.");
+        Validate.notNullOrEmpty(managementUser, "app.server.management.user is not set.");
+        Validate.notNullOrEmpty(managementPassword, "app.server.management.password is not set.");
+    }
+
+    @Override
+    public String getName() {
+        return containerName;
+    }
+
+    @Override
+    public List<Node> getContainers() {
+        List<Node> containers = new ArrayList<>();
+
+        containers.add(standaloneContainer());
+
+        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", AppServerContainerProvider.APP_SERVER + "-" + containerName);
+
+        configuration = container.createChild("configuration");
+        createChild("enabled", "true");
+        createChild("adapterImplClass", CustomFuseContainer.class.getName());
+        createChild("autostartBundle", "false");
+        createChild("karafHome", appServerHome);
+        createChild("javaHome", appServerJavaHome);
+        createChild("javaVmArguments", 
+                System.getProperty("app.server.karaf.jvm.debug.args", "") + " " +
+                System.getProperty("adapter.test.props", " ")
+        );
+        
+        createChild("jmxServiceURL", "service:jmx:rmi://127.0.0.1:44444/jndi/rmi://127.0.0.1:1099/karaf-root");
+        createChild("jmxUsername", managementUser);
+        createChild("jmxPassword", managementPassword);
+
+        return container;
+    }
+}
diff --git a/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
new file mode 100644
index 0000000..2b8cf17
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
@@ -0,0 +1 @@
+org.keycloak.testsuite.arquillian.fuse.Fuse70AppServerArquillianExtension
diff --git a/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerProvider b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerProvider
new file mode 100644
index 0000000..01068c3
--- /dev/null
+++ b/testsuite/integration-arquillian/servers/app-server/karaf/fuse70/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerProvider
@@ -0,0 +1 @@
+org.keycloak.testsuite.arquillian.fuse.container.Fuse70AppServerProvider
diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml
index 169b48f..1cf8f02 100644
--- a/testsuite/integration-arquillian/tests/base/pom.xml
+++ b/testsuite/integration-arquillian/tests/base/pom.xml
@@ -564,6 +564,60 @@
             </build>
         </profile>
         <profile>
+            <id>app-server-fuse70</id>
+            <activation>
+                <property>
+                    <name>app.server</name>
+                    <value>fuse70</value>
+                </property>
+            </activation>
+            <properties>
+                <app.server>fuse70</app.server> <!--in case the profile is called directly-->
+                <app.server.skip.unpack>false</app.server.skip.unpack>
+
+                <!--fuse examples expect auth server on 8080-->
+                <auth.server.port.offset>0</auth.server.port.offset>
+                <auth.server.http.port>8080</auth.server.http.port>
+                <auth.server.management.port>9990</auth.server.management.port>
+                <!--fuse examples expect default karaf http port 8181-->
+                <app.server.http.port>8181</app.server.http.port>
+
+                <app.server.management.user>admin</app.server.management.user>
+                <app.server.management.password>admin</app.server.management.password>
+                <app.server.karaf.jvm.debug.args>-agentlib:jdwp=transport=dt_socket,server=y,suspend=${app.server.debug.suspend},address=localhost:${app.server.debug.port}</app.server.karaf.jvm.debug.args>
+            </properties>
+            <dependencies>
+                <dependency>
+                    <groupId>org.keycloak.testsuite</groupId>
+                    <artifactId>integration-arquillian-servers-app-server-fuse70</artifactId>
+                    <version>${project.version}</version>
+                    <scope>runtime</scope>
+                </dependency>
+                <dependency>
+                    <groupId>org.jboss.arquillian.container</groupId>
+                    <artifactId>arquillian-container-karaf-managed</artifactId>
+                </dependency>
+            </dependencies>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.commonjava.maven.plugins</groupId>
+                        <artifactId>directory-maven-plugin</artifactId>
+                    </plugin>
+                    <plugin>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <app.server.management.user>${app.server.management.user}</app.server.management.user>
+                                <app.server.management.password>${app.server.management.password}</app.server.management.password>
+                                <app.server.karaf.jvm.debug.args>${app.server.karaf.jvm.debug.args}</app.server.karaf.jvm.debug.args>
+                            </systemPropertyVariables>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
             <id>auth-servers-crossdc-undertow</id>
             <properties>
                 <skip.clean.second.cache>false</skip.clean.second.cache>
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/fuse/AbstractFuseExample.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/fuse/AbstractFuseExample.java
index 1024c3e..e82e4d9 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/fuse/AbstractFuseExample.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/fuse/AbstractFuseExample.java
@@ -21,6 +21,7 @@ import org.keycloak.testsuite.adapter.page.AppServerContextRoot;
 
 import java.net.MalformedURLException;
 import java.net.URL;
+import org.keycloak.testsuite.util.DroneUtils;
 
 /**
  *
@@ -54,7 +55,7 @@ public abstract class AbstractFuseExample extends AppServerContextRoot {
     public void navigateTo() {
         super.navigateTo();
         
-        if (driver.getPageSource().contains("<html><head></head><body></body></html>")) {
+        if (DroneUtils.getCurrentDriver().getPageSource().contains("<html><head></head><body></body></html>")) {
             log.debug("Page wasn't properly loaded - redirecting.");
             super.navigateTo();
         }
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/Hawtio2Page.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/Hawtio2Page.java
index 257c85f..8ff4d91 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/Hawtio2Page.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/Hawtio2Page.java
@@ -1,11 +1,11 @@
 package org.keycloak.testsuite.adapter.page;
 
 import org.keycloak.testsuite.page.AbstractPage;
-import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
 import javax.ws.rs.core.UriBuilder;
+import org.keycloak.testsuite.util.JavascriptBrowser;
 
 import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
 
@@ -27,15 +27,17 @@ public class Hawtio2Page extends AbstractPage {
     }
 
     @FindBy(xpath = "//a[@id ='userDropdownMenu']")
+    @JavascriptBrowser
     private WebElement dropDownMenu;
 
     @FindBy(xpath = "//a[@ng-click='userDetails.logout()']")
+    @JavascriptBrowser
     private WebElement logoutButton;
 
     public void logout() {
-        waitUntilElement(dropDownMenu).is().visible();
+        waitUntilElement(dropDownMenu).is().clickable();
         dropDownMenu.click();
-        waitUntilElement(logoutButton).is().visible();
+        waitUntilElement(logoutButton).is().clickable();
         logoutButton.click();
     }
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/HawtioPage.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/HawtioPage.java
index b8b3562..aaab9cf 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/HawtioPage.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/HawtioPage.java
@@ -1,11 +1,11 @@
 package org.keycloak.testsuite.adapter.page;
 
 import org.keycloak.testsuite.page.AbstractPage;
-import org.openqa.selenium.By;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
 import javax.ws.rs.core.UriBuilder;
+import org.keycloak.testsuite.util.JavascriptBrowser;
 
 import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
 
@@ -27,18 +27,24 @@ public class HawtioPage extends AbstractPage {
     }
 
     @FindBy(xpath = "//a[@class='dropdown-toggle' and @data-original-title='Preferences and log out']")
+    @JavascriptBrowser
     private WebElement dropDownMenu;
 
     @FindBy(xpath = "//a[@ng-click='logout()']")
+    @JavascriptBrowser
     private WebElement logoutButton;
 
+    @FindBy(xpath = "//input[@type='submit' and @value='Yes']")
+    @JavascriptBrowser
+    private WebElement modal;
+
     public void logout() {
-        waitUntilElement(dropDownMenu).is().visible();
+        log.debug("logging out");
+        waitUntilElement(dropDownMenu).is().clickable();
         dropDownMenu.click();
-        waitUntilElement(logoutButton).is().visible();
+        waitUntilElement(logoutButton).is().clickable();
         logoutButton.click();
-        By modal = By.xpath("//input[@type='submit' and @value='Yes']");
-        waitUntilElement(modal).is().visible();
-        driver.findElement(modal).click();
+        waitUntilElement(modal).is().clickable();
+        modal.click();
     }
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/containers/ContainerConstants.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/containers/ContainerConstants.java
index f67fa0b..558686a 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/containers/ContainerConstants.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/containers/ContainerConstants.java
@@ -36,4 +36,5 @@ public interface ContainerConstants {
     public static final String APP_SERVER_EAP6_CLUSTER = APP_SERVER_EAP6 + "-ha-node-1;" + APP_SERVER_EAP6 + "-ha-node-2";
 
     public static final String APP_SERVER_FUSE63 = APP_SERVER_PREFIX + "fuse63";
+    public static final String APP_SERVER_FUSE70 = APP_SERVER_PREFIX + "fuse70";
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/ContainerAssume.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/ContainerAssume.java
index c42baa6..84a63b7 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/ContainerAssume.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/ContainerAssume.java
@@ -24,6 +24,8 @@ import org.keycloak.testsuite.arquillian.AuthServerTestEnricher;
 public class ContainerAssume {
 
     private static final Logger log = Logger.getLogger(ContainerAssume.class);
+    private static final String fuse6 = "fuse63";
+    private static final String fuse7 = "fuse70";
 
     public static void assumeNotAuthServerUndertow() {
         Assume.assumeFalse("Doesn't work on auth-server-undertow", 
@@ -40,4 +42,11 @@ public class ContainerAssume {
                 System.getProperty("app.server", "undertow").equals("undertow"));
     }
 
+    public static void assumeNotAppServerFuse6() {
+        Assume.assumeFalse("The test doesn't work on " + fuse6, fuse6.equals(System.getProperty("app.server")));
+    }
+
+    public static void assumeNotAppServerFuse7() {
+        Assume.assumeFalse("The test doesn't work on " + fuse7, fuse7.equals(System.getProperty("app.server")));
+    }
 }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseAdminAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseAdminAdapterTest.java
index e7594cc..99a8fbc 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseAdminAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseAdminAdapterTest.java
@@ -17,6 +17,7 @@
 package org.keycloak.testsuite.adapter.example.fuse;
 
 import static org.hamcrest.Matchers.anyOf;
+import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertThat;
@@ -29,6 +30,7 @@ import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.List;
@@ -53,25 +55,49 @@ import org.apache.sshd.client.channel.ClientChannelEvent;
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.client.session.ClientSession.ClientSessionEvent;
 import org.hamcrest.Matchers;
+import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.graphene.page.Page;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest;
+import org.keycloak.testsuite.adapter.page.Hawtio2Page;
 import org.keycloak.testsuite.adapter.page.HawtioPage;
 import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
 import org.keycloak.testsuite.arquillian.containers.ContainerConstants;
+import org.keycloak.testsuite.auth.page.login.OIDCLogin;
+import org.keycloak.testsuite.util.ContainerAssume;
+import org.keycloak.testsuite.util.DroneUtils;
+import org.keycloak.testsuite.util.JavascriptBrowser;
+import org.keycloak.testsuite.util.WaitUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
 
 @AppServerContainer(ContainerConstants.APP_SERVER_FUSE63)
+@AppServerContainer(ContainerConstants.APP_SERVER_FUSE70)
 public class FuseAdminAdapterTest extends AbstractExampleAdapterTest {
-    
+
+    @Drone
+    @JavascriptBrowser
+    protected WebDriver jsDriver;
+
     @Page
+    @JavascriptBrowser
     private HawtioPage hawtioPage;
-    
+
+    @Page
+    @JavascriptBrowser
+    private Hawtio2Page hawtio2Page;
+
+    @Page
+    @JavascriptBrowser
+    private OIDCLogin testRealmLoginPageFuse;
+
     private SshClient client;
-    
+
     protected enum Result { OK, NOT_FOUND, NO_CREDENTIALS, NO_ROLES };
-    
+
     @Override
     public void addAdapterTestRealms(List<RealmRepresentation> testRealms) {
         RealmRepresentation fuseRealm = loadRealm(new File(EXAMPLES_HOME_DIR + "/fuse/demorealm.json"));
@@ -81,35 +107,87 @@ public class FuseAdminAdapterTest extends AbstractExampleAdapterTest {
     @Override
     public void setDefaultPageUriParameters() {
         super.setDefaultPageUriParameters();
-        testRealmPage.setAuthRealm(DEMO);
-        testRealmLoginPage.setAuthRealm(DEMO);
+        testRealmLoginPageFuse.setAuthRealm(DEMO);
+    }
+
+    @Before
+    public void addJsDriver() {
+        DroneUtils.addWebDriver(jsDriver);
     }
-        
+
     @Test
-    public void hawtioLoginTest() throws Exception {
-        // Note that this does works only in Fuse 6 with Hawtio 1 since Fuse 7 contains Hawtio 2, and is thus overriden in Fuse 7 test classes
+    public void hawtio1LoginTest() throws Exception {
+        // Note that this does work only in Fuse 6 with Hawtio 1, Fuse 7 contains Hawtio 2
+        ContainerAssume.assumeNotAppServerFuse7();
+
         hawtioPage.navigateTo();
-        testRealmLoginPage.form().login("user", "invalid-password");
+        testRealmLoginPageFuse.form().login("user", "invalid-password");
         assertCurrentUrlDoesntStartWith(hawtioPage);
 
-        testRealmLoginPage.form().login("invalid-user", "password");
+        testRealmLoginPageFuse.form().login("invalid-user", "password");
         assertCurrentUrlDoesntStartWith(hawtioPage);
 
-        testRealmLoginPage.form().login("root", "password");
-        assertCurrentUrlStartsWith(hawtioPage.toString() + "/welcome", hawtioPage.getDriver());
+        testRealmLoginPageFuse.form().login("root", "password");
+        assertCurrentUrlStartsWith(hawtioPage.toString() + "/welcome");
         hawtioPage.logout();
-        assertCurrentUrlStartsWith(testRealmLoginPage);
-        
+        assertCurrentUrlStartsWith(testRealmLoginPageFuse);
+
         hawtioPage.navigateTo();
-        testRealmLoginPage.form().login("mary", "password");
-        assertThat(driver.getPageSource(), not(containsString("welcome")));
+        log.debug("logging in as mary");
+        testRealmLoginPageFuse.form().login("mary", "password");
+        log.debug("Previous WARN waitForPageToLoad time exceeded! is expected");
+        assertThat(DroneUtils.getCurrentDriver().getPageSource(), 
+                allOf(
+                    containsString("Unauthorized User"),
+                    not(containsString("welcome"))
+                )
+        );
     }
-    
-    
-    
+
     @Test
-    public void sshLoginTest() throws Exception {
-        // Note that this does not work for Fuse 7 since the error codes have changed, and is thus overriden for Fuse 7 test classes
+    public void hawtio2LoginTest() throws Exception {
+        // Note that this does work only in Fuse 7 with Hawtio 2, Fuse 6 contains Hawtio 1
+        ContainerAssume.assumeNotAppServerFuse6();
+
+        hawtio2Page.navigateTo();
+        WaitUtils.waitForPageToLoad();
+
+        testRealmLoginPageFuse.form().login("user", "invalid-password");
+        assertCurrentUrlDoesntStartWith(hawtio2Page);
+
+        testRealmLoginPageFuse.form().login("invalid-user", "password");
+        assertCurrentUrlDoesntStartWith(hawtio2Page);
+
+        testRealmLoginPageFuse.form().login("root", "password");
+        assertCurrentUrlStartsWith(hawtio2Page.toString());
+        WaitUtils.waitForPageToLoad();
+        WaitUtils.waitUntilElement(By.xpath("//img[@alt='Red Hat Fuse Management Console']")).is().present();
+        hawtio2Page.logout();
+        WaitUtils.waitForPageToLoad();
+
+        assertCurrentUrlStartsWith(testRealmLoginPageFuse);
+
+        hawtio2Page.navigateTo();
+        WaitUtils.waitForPageToLoad();
+
+        log.debug("logging in as mary");
+        testRealmLoginPageFuse.form().login("mary", "password");
+        log.debug("Current URL: " + DroneUtils.getCurrentDriver().getCurrentUrl());
+        assertCurrentUrlStartsWith(hawtio2Page.toString());
+        WaitUtils.waitForPageToLoad();
+        assertThat(DroneUtils.getCurrentDriver().getPageSource(), 
+                allOf(
+                    containsString("keycloak-session-iframe"),//todo check this if it's correct
+                    not(containsString("Camel"))
+                )
+        );
+    }    
+
+    @Test
+    public void sshLoginTestFuse6() throws Exception {
+        // Note that this does not work for Fuse 7 since the error codes have changed
+        ContainerAssume.assumeNotAppServerFuse7();
+
         assertCommand("mary", "password", "shell:date", Result.NO_CREDENTIALS);
         assertCommand("john", "password", "shell:info", Result.NO_CREDENTIALS);
         assertCommand("john", "password", "shell:date", Result.OK);
@@ -117,6 +195,35 @@ public class FuseAdminAdapterTest extends AbstractExampleAdapterTest {
     }
 
     @Test
+    public void sshLoginTestFuse7() throws Exception {
+        // Note that this works for Fuse 7 and newer
+        ContainerAssume.assumeNotAppServerFuse6();
+
+        assertCommand("mary", "password", "shell:date", Result.NOT_FOUND);
+        assertCommand("john", "password", "shell:info", Result.NOT_FOUND);
+        assertCommand("john", "password", "shell:date", Result.OK);
+        assertRoles("root", 
+          "ssh",
+          "jmxAdmin",
+          "admin",
+          "manager",
+          "viewer",
+          "Administrator",
+          "Auditor",
+          "Deployer",
+          "Maintainer",
+          "Operator",
+          "SuperUser"
+        );
+    }
+
+    private void assertRoles(String username, String... expectedRoles) throws Exception {
+        final String commandOutput = getCommandOutput(username, "password", "jaas:whoami -r --no-format");
+        final List<String> parsedOutput = Arrays.asList(commandOutput.split("\\n+"));
+        assertThat(parsedOutput, Matchers.containsInAnyOrder(expectedRoles));
+    }
+
+    @Test
     public void jmxLoginTest() throws Exception {
         setJMXAuthentication("keycloak", "password");
         ObjectName mbean = new ObjectName("org.apache.karaf:type=config,name=root");
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseExampleAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseExampleAdapterTest.java
index f368756..3caadb3 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseExampleAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/fuse/FuseExampleAdapterTest.java
@@ -46,6 +46,7 @@ import org.keycloak.testsuite.util.WaitUtils;
  * @author tkyjovsk
  */
 @AppServerContainer(ContainerConstants.APP_SERVER_FUSE63)
+@AppServerContainer(ContainerConstants.APP_SERVER_FUSE70)
 public class FuseExampleAdapterTest extends AbstractExampleAdapterTest {
 
     @Page
diff --git a/testsuite/integration-arquillian/tests/other/adapters/karaf/pom.xml b/testsuite/integration-arquillian/tests/other/adapters/karaf/pom.xml
index 7c9d9d4..0e4e6b9 100644
--- a/testsuite/integration-arquillian/tests/other/adapters/karaf/pom.xml
+++ b/testsuite/integration-arquillian/tests/other/adapters/karaf/pom.xml
@@ -65,12 +65,6 @@
                 <module>fuse62</module>
             </modules>
         </profile>
-        <profile>
-            <id>app-server-fuse70</id>
-            <modules>
-                <module>fuse70</module>
-            </modules>
-        </profile>
     </profiles>
 
 </project>
diff --git a/testsuite/integration-arquillian/tests/pom.xml b/testsuite/integration-arquillian/tests/pom.xml
index c573874..ae4db08 100755
--- a/testsuite/integration-arquillian/tests/pom.xml
+++ b/testsuite/integration-arquillian/tests/pom.xml
@@ -1492,6 +1492,12 @@
                     <version>${project.version}</version>
                 </dependency>
 
+                <dependency>
+                    <groupId>org.keycloak.testsuite</groupId>
+                    <artifactId>integration-arquillian-util</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+
                 <!--                <dependency>
                     <groupId>org.arquillian.extension</groupId>
                     <artifactId>arquillian-recorder-reporter-impl</artifactId>