keycloak-uncached

KEYCLOAK-7315 Fix issues in JavascriptAdapter tests (#5193) more

5/7/2018 3:47:56 PM

Details

diff --git a/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/pom.xml b/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/pom.xml
index 62ffa3b..a7eb2ac 100644
--- a/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/pom.xml
+++ b/testsuite/integration-arquillian/servers/auth-server/services/testsuite-providers/pom.xml
@@ -107,7 +107,7 @@
                                     <outputDirectory>${js-adapter.file.path}</outputDirectory>
                                 </artifactItem>
                             </artifactItems>
-                            <includes>**/keycloak.js</includes>
+                            <includes>keycloak.js</includes>
                         </configuration>
                     </execution>
                 </executions>
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/login/OAuthGrant.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/login/OAuthGrant.java
index b19daeb..b1f63d1 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/login/OAuthGrant.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/login/OAuthGrant.java
@@ -16,12 +16,11 @@
  */
 package org.keycloak.testsuite.auth.page.login;
 
-import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
-import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
+import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
 
 /**
  * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
@@ -45,7 +44,7 @@ public class OAuthGrant extends LoginActions {
 
     public boolean isCurrent(WebDriver driver1) {
         if (driver1 == null) driver1 = driver;
-        waitUntilElement(By.tagName("body")).is().present();
+        waitForPageToLoad();
         return driver1.getPageSource().contains("Do you grant these access privileges");
     }
 
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
index 482ab32..b0203a3 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java
@@ -53,7 +53,6 @@ import org.keycloak.testsuite.auth.page.login.UpdatePassword;
 import org.keycloak.testsuite.client.KeycloakTestingClient;
 import org.keycloak.testsuite.util.AdminClientUtil;
 import org.keycloak.testsuite.util.DroneUtils;
-import org.keycloak.testsuite.util.JavascriptBrowser;
 import org.keycloak.testsuite.util.OAuthClient;
 import org.keycloak.testsuite.util.TestCleanup;
 import org.keycloak.testsuite.util.TestEventsLogger;
@@ -116,15 +115,6 @@ public abstract class AbstractKeycloakTest {
     @Drone
     protected WebDriver driver;
 
-    // Javascript browser needed KEYCLOAK-4703
-    @Drone
-    @JavascriptBrowser
-    protected WebDriver jsDriver;
-
-    @Page
-    @JavascriptBrowser
-    protected OIDCLogin jsDriverTestRealmLoginPage;
-
     @Page
     protected AuthServerContextRoot authServerContextRootPage;
     @Page
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractPhotozExampleAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractPhotozExampleAdapterTest.java
index 3a2e759..9530de8 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractPhotozExampleAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractPhotozExampleAdapterTest.java
@@ -21,6 +21,7 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.impl.client.LaxRedirectStrategy;
 import org.jboss.arquillian.container.test.api.Deployer;
+import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.junit.After;
@@ -44,10 +45,12 @@ import org.keycloak.representations.idm.authorization.ResourceServerRepresentati
 import org.keycloak.testsuite.ProfileAssume;
 import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest;
 import org.keycloak.testsuite.adapter.page.PhotozClientAuthzTestApp;
+import org.keycloak.testsuite.auth.page.login.OIDCLogin;
 import org.keycloak.testsuite.util.DroneUtils;
 import org.keycloak.testsuite.util.JavascriptBrowser;
 import org.keycloak.util.JsonSerialization;
 import org.openqa.selenium.NoSuchElementException;
+import org.openqa.selenium.WebDriver;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -83,6 +86,15 @@ public abstract class AbstractPhotozExampleAdapterTest extends AbstractExampleAd
     @ArquillianResource
     private Deployer deployer;
 
+    // Javascript browser needed KEYCLOAK-4703
+    @Drone
+    @JavascriptBrowser
+    protected WebDriver jsDriver;
+
+    @Page
+    @JavascriptBrowser
+    protected OIDCLogin jsDriverTestRealmLoginPage;
+
     @Page
     @JavascriptBrowser
     private PhotozClientAuthzTestApp clientPage;
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/cors/AbstractCorsExampleAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/cors/AbstractCorsExampleAdapterTest.java
index 255accf..6392594 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/cors/AbstractCorsExampleAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/cors/AbstractCorsExampleAdapterTest.java
@@ -19,6 +19,7 @@ package org.keycloak.testsuite.adapter.example.cors;
 
 import org.jboss.arquillian.container.test.api.Deployer;
 import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.drone.api.annotation.Drone;
 import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.arquillian.test.api.ArquillianResource;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
@@ -32,9 +33,11 @@ import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest;
 import org.keycloak.testsuite.adapter.page.AngularCorsProductTestApp;
 import org.keycloak.testsuite.adapter.page.CorsDatabaseServiceTestApp;
 import org.keycloak.testsuite.auth.page.account.Account;
+import org.keycloak.testsuite.auth.page.login.OIDCLogin;
 import org.keycloak.testsuite.util.JavascriptBrowser;
 import org.keycloak.testsuite.util.WaitUtils;
 import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
 
 import java.io.File;
 import java.io.IOException;
@@ -60,6 +63,15 @@ public abstract class AbstractCorsExampleAdapterTest extends AbstractExampleAdap
     @ArquillianResource
     private Deployer deployer;
 
+    // Javascript browser needed KEYCLOAK-4703
+    @Drone
+    @JavascriptBrowser
+    protected WebDriver jsDriver;
+
+    @Page
+    @JavascriptBrowser
+    protected OIDCLogin jsDriverTestRealmLoginPage;
+
     @Page
     @JavascriptBrowser
     private AngularCorsProductTestApp jsDriverAngularCorsProductPage;
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/AbstractJavascriptTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/AbstractJavascriptTest.java
index 2ec7bea..789bebf 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/AbstractJavascriptTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/AbstractJavascriptTest.java
@@ -1,5 +1,7 @@
 package org.keycloak.testsuite.adapter.javascript;
 
+import org.jboss.arquillian.drone.api.annotation.Drone;
+import org.jboss.arquillian.graphene.page.Page;
 import org.junit.Before;
 import org.keycloak.admin.client.resource.ClientResource;
 import org.keycloak.representations.idm.ClientRepresentation;
@@ -9,14 +11,17 @@ import org.keycloak.representations.idm.UserRepresentation;
 import org.keycloak.testsuite.AbstractAuthTest;
 import org.keycloak.testsuite.Assert;
 import org.keycloak.testsuite.admin.ApiUtil;
+import org.keycloak.testsuite.auth.page.login.OIDCLogin;
 import org.keycloak.testsuite.util.ClientBuilder;
 import org.keycloak.testsuite.util.JavascriptBrowser;
 import org.keycloak.testsuite.util.RealmBuilder;
 import org.keycloak.testsuite.util.RolesBuilder;
 import org.keycloak.testsuite.util.UserBuilder;
 import org.openqa.selenium.By;
+import org.openqa.selenium.Cookie;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebDriver.Options;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
@@ -25,10 +30,8 @@ import java.util.List;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.collection.IsMapContaining.hasEntry;
 import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
-import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
 import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
-import org.openqa.selenium.Cookie;
-import org.openqa.selenium.WebDriver.Options;
+import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
 
 /**
  * @author mhajas
@@ -51,6 +54,15 @@ public abstract class AbstractJavascriptTest extends AbstractAuthTest {
 
     protected JavascriptExecutor jsExecutor;
 
+    // Javascript browser needed KEYCLOAK-4703
+    @Drone
+    @JavascriptBrowser
+    protected WebDriver jsDriver;
+
+    @Page
+    @JavascriptBrowser
+    protected OIDCLogin jsDriverTestRealmLoginPage;
+
     @FindBy(id = "output")
     @JavascriptBrowser
     protected WebElement outputArea;
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptAdapterTest.java
index e434394..0c23bc2 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptAdapterTest.java
@@ -16,6 +16,7 @@ import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.representations.idm.UserRepresentation;
 import org.keycloak.testsuite.Assert;
 import org.keycloak.testsuite.AssertEvents;
+import org.keycloak.testsuite.ProfileAssume;
 import org.keycloak.testsuite.admin.ApiUtil;
 import org.keycloak.testsuite.auth.page.account.Applications;
 import org.keycloak.testsuite.auth.page.login.OAuthGrant;
@@ -23,7 +24,6 @@ import org.keycloak.testsuite.util.JavascriptBrowser;
 import org.keycloak.testsuite.util.OAuthClient;
 import org.keycloak.testsuite.util.RealmBuilder;
 import org.keycloak.testsuite.util.UserBuilder;
-import org.openqa.selenium.By;
 import org.openqa.selenium.TimeoutException;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebDriverException;
@@ -31,10 +31,10 @@ import org.openqa.selenium.WebElement;
 
 import java.util.List;
 import java.util.Map;
-
-import static java.lang.Math.toIntExact;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+
+import static java.lang.Math.toIntExact;
 import static org.hamcrest.CoreMatchers.both;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.Matchers.greaterThan;
@@ -44,9 +44,9 @@ import static org.hamcrest.collection.IsMapContaining.hasEntry;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
-import org.keycloak.testsuite.ProfileAssume;
 import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlDoesntStartWith;
 import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
+import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
 import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
 
 /**
@@ -98,7 +98,7 @@ public class JavascriptAdapterTest extends AbstractJavascriptTest {
     }
 
     private void assertOnTestAppUrl(WebDriver jsDriver, Object output, WebElement events) {
-        waitUntilElement(By.tagName("body")).is().present();
+        waitForPageToLoad();
         assertCurrentUrlStartsWith(testAppUrl, jsDriver);
     }
 
@@ -420,7 +420,7 @@ public class JavascriptAdapterTest extends AbstractJavascriptTest {
                 .add("realm", SPACE_REALM_NAME)
                 .add("clientId", CLIENT_ID);
 
-        testAppUrl = authServerContextRootPage + JAVASCRIPT_SPACE_URL + "/index.html";
+        testAppUrl = authServerContextRootPage + JAVASCRIPT_ENCODED_SPACE_URL + "/index.html";
         jsDriver.navigate().to(testAppUrl);
         jsDriverTestRealmLoginPage.setAuthRealm(SPACE_REALM_NAME);
 
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptTestExecutor.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptTestExecutor.java
index d856f36..9e6d953 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptTestExecutor.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/javascript/JavascriptTestExecutor.java
@@ -97,18 +97,18 @@ public class JavascriptTestExecutor {
 
     public JavascriptTestExecutor configure(JSObjectBuilder argumentsBuilder) {
         if (argumentsBuilder == null) {
-            jsExecutor.executeScript("keycloak = Keycloak()");
+            jsExecutor.executeScript("window.keycloak = Keycloak();");
         } else {
             String configArguments = argumentsBuilder.build();
-            jsExecutor.executeScript("keycloak = Keycloak(" + configArguments + ")");
+            jsExecutor.executeScript("window.keycloak = Keycloak(" + configArguments + ");");
         }
 
-        jsExecutor.executeScript("keycloak.onAuthSuccess = function () {event('Auth Success')}"); // event function is declared in index.html
-        jsExecutor.executeScript("keycloak.onAuthError = function () {event('Auth Error')}");
-        jsExecutor.executeScript("keycloak.onAuthRefreshSuccess = function () {event('Auth Refresh Success')}");
-        jsExecutor.executeScript("keycloak.onAuthRefreshError = function () {event('Auth Refresh Error')}");
-        jsExecutor.executeScript("keycloak.onAuthLogout = function () {event('Auth Logout')}");
-        jsExecutor.executeScript("keycloak.onTokenExpired = function () {event('Access token expired.')}");
+        jsExecutor.executeScript("window.keycloak.onAuthSuccess = function () {event('Auth Success')};"); // event function is declared in index.html
+        jsExecutor.executeScript("window.keycloak.onAuthError = function () {event('Auth Error')}");
+        jsExecutor.executeScript("window.keycloak.onAuthRefreshSuccess = function () {event('Auth Refresh Success')}");
+        jsExecutor.executeScript("window.keycloak.onAuthRefreshError = function () {event('Auth Refresh Error')}");
+        jsExecutor.executeScript("window.keycloak.onAuthLogout = function () {event('Auth Logout')}");
+        jsExecutor.executeScript("window.keycloak.onTokenExpired = function () {event('Access token expired.')}");
 
         configured = true;
 
@@ -128,7 +128,7 @@ public class JavascriptTestExecutor {
 
         Object output = jsExecutor.executeAsyncScript(
                 "var callback = arguments[arguments.length - 1];" +
-                "   keycloak.init(" + arguments + ").success(function (authenticated) {" +
+                "   window.keycloak.init(" + arguments + ").success(function (authenticated) {" +
                 "       callback(\"Init Success (\" + (authenticated ? \"Authenticated\" : \"Not Authenticated\") + \")\");" +
                 "   }).error(function () {" +
                 "       callback(\"Init Error\");" +
@@ -157,11 +157,11 @@ public class JavascriptTestExecutor {
     public JavascriptTestExecutor refreshToken(int value, JavascriptStateValidator validator) {
         Object output = jsExecutor.executeAsyncScript(
                     "var callback = arguments[arguments.length - 1];" +
-                    "   keycloak.updateToken(" + Integer.toString(value) + ").success(function (refreshed) {" +
+                    "   window.keycloak.updateToken(" + Integer.toString(value) + ").success(function (refreshed) {" +
                     "       if (refreshed) {" +
-                    "            callback(keycloak.tokenParsed);" +
+                    "            callback(window.keycloak.tokenParsed);" +
                     "       } else {" +
-                    "            callback('Token not refreshed, valid for ' + Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000) + ' seconds');" +
+                    "            callback('Token not refreshed, valid for ' + Math.round(window.keycloak.tokenParsed.exp + window.keycloak.timeSkew - new Date().getTime() / 1000) + ' seconds');" +
                     "       }" +
                     "   }).error(function () {" +
                     "       callback('Failed to refresh token');" +
@@ -182,7 +182,7 @@ public class JavascriptTestExecutor {
 
         Object output = jsExecutor.executeAsyncScript(
                 "var callback = arguments[arguments.length - 1];" +
-                "   keycloak.loadUserProfile().success(function (profile) {" +
+                "   window.keycloak.loadUserProfile().success(function (profile) {" +
                 "       callback(profile);" +
                 "   }).error(function () {" +
                 "       callback('Failed to load profile');" +
@@ -202,19 +202,19 @@ public class JavascriptTestExecutor {
 
     public JavascriptTestExecutor refresh() {
         jsDriver.navigate().refresh();
-        configured = false; // Refreshing webpage => Loosing keycloak variable
+        configured = false; // Refreshing webpage => Loosing window.keycloak variable
 
         return this;
     }
 
     public JavascriptTestExecutor addTimeSkew(int addition) {
-        jsExecutor.executeScript("keycloak.timeSkew += " + Integer.toString(addition));
+        jsExecutor.executeScript("window.keycloak.timeSkew += " + Integer.toString(addition));
 
         return this;
     }
 
     public JavascriptTestExecutor checkTimeSkew(JavascriptStateValidator validator) {
-        Object timeSkew = jsExecutor.executeScript("return keycloak.timeSkew");
+        Object timeSkew = jsExecutor.executeScript("return window.keycloak.timeSkew");
 
         validator.validate(jsDriver, timeSkew, events);
 
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 d3ceeb8..01e9c3b 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
@@ -20,6 +20,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.http.conn.params.ConnManagerParams;
 import org.jboss.arquillian.container.test.api.Deployment;
+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.Assert;
@@ -62,14 +63,17 @@ import org.keycloak.testsuite.adapter.page.TokenMinTTLPage;
 import org.keycloak.testsuite.admin.ApiUtil;
 import org.keycloak.testsuite.auth.page.account.Applications;
 import org.keycloak.testsuite.auth.page.login.OAuthGrant;
+import org.keycloak.testsuite.auth.page.login.OIDCLogin;
 import org.keycloak.testsuite.console.page.events.Config;
 import org.keycloak.testsuite.console.page.events.LoginEvents;
+import org.keycloak.testsuite.util.JavascriptBrowser;
 import org.keycloak.testsuite.util.Matchers;
 import org.keycloak.testsuite.util.URLUtils;
 import org.keycloak.testsuite.util.WaitUtils;
 import org.keycloak.util.BasicAuthHelper;
 import org.openqa.selenium.By;
 import org.openqa.selenium.Cookie;
+import org.openqa.selenium.WebDriver;
 
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
@@ -117,6 +121,15 @@ import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
  */
 public abstract class AbstractDemoServletsAdapterTest extends AbstractServletsAdapterTest {
 
+    // Javascript browser needed KEYCLOAK-4703
+    @Drone
+    @JavascriptBrowser
+    protected WebDriver jsDriver;
+
+    @Page
+    @JavascriptBrowser
+    protected OIDCLogin jsDriverTestRealmLoginPage;
+    
     @Page
     private CustomerPortal customerPortal;
     @Page