Details
diff --git a/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html b/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html
index f34878a..c017b82 100755
--- a/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html
+++ b/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html
@@ -43,12 +43,18 @@
<button onclick="createBearerRequest()">Create Bearer Request</button>
<button onclick="output(showTime())">Show current time</button>
<button onclick="cert()">Cert request</button>
- <input id="timeSkewInput"/>
<button onclick="addToTimeSkew()">timeSkew offset</button>
<button onclick="refreshTimeSkew()">refresh timeSkew</button>
<button onclick="sendBearerToKeycloak()">Bearer to keycloak</button>
<button onclick="createUser()">Create user</button>
<button onclick="reentrancyCallback()">Reentrancy callback</button>
+ <button onclick='initWithDifferentRealmName(getInput())'>Init with different realm name</button>
+ <button onclick='keycloakInit(null, {refreshToken: getInput2()})'>Init with refresh token</button>
+ <button onclick='keycloakInit(null, {token: getInput(), refreshToken: getInput2()})'>Init with both tokens</button>
+ <button onclick='keycloakInit(null, {token: getInput(), refreshToken: getInput2(), timeSkew: parseInt(getInput3())})'>Init with TimeSkew</button>
+ <input id="inputField" value="input"/>
+ <input id="inputField2" value="input2"/>
+ <input id="inputField3" value="input3"/>
<select id="flowSelect">
@@ -78,6 +84,15 @@ TimeSkew:
<script>
+ function getInput() {
+ return document.getElementById("inputField").value;
+ }
+ function getInput2() {
+ return document.getElementById("inputField2").value;
+ }
+ function getInput3() {
+ return document.getElementById("inputField3").value;
+ }
function loadProfile() {
keycloak.loadUserProfile().success(function (profile) {
output(profile);
@@ -150,8 +165,7 @@ TimeSkew:
}
function addToTimeSkew() {
- var offset = document.getElementById("timeSkewInput").value;
- keycloak.timeSkew += parseInt(offset);
+ keycloak.timeSkew += parseInt(getInput());
document.getElementById("timeSkew").innerHTML = keycloak.timeSkew;
}
@@ -284,10 +298,28 @@ TimeSkew:
);
}
+ function initWithDifferentRealmName(realmName) {
+ var url = 'http://localhost:8180/auth';
+ if (window.location.href.indexOf("8643") > -1) {
+ url = url.replace("8180","8543");
+ url = url.replace("http","https");
+ }
+
+ keycloakInit({
+ url: url,
+ realm: realmName,
+ clientId: 'js-console'
+ });
+
+ }
+
var keycloak;
- function keycloakInit() {
- keycloak = Keycloak();
+ function keycloakInit(configuration, initOptions) {
+ if (!configuration)
+ keycloak = Keycloak();
+ else
+ keycloak = Keycloak(configuration);
keycloak.onAuthSuccess = function () {
event('Auth Success');
@@ -314,11 +346,14 @@ TimeSkew:
event('Access token expired.');
};
- var initOptions = {
- onLoad: document.getElementById("onLoad").value,
- flow: document.getElementById("flowSelect").value,
- responseMode: document.getElementById("responseModeSelect").value
- };
+ if (!initOptions) {
+ var initOptions = {
+ onLoad: document.getElementById("onLoad").value,
+ flow: document.getElementById("flowSelect").value,
+ responseMode: document.getElementById("responseModeSelect").value
+ };
+ }
+
keycloak.init(initOptions).success(function (authenticated) {
output('Init Success (' + (authenticated ? 'Authenticated' : 'Not Authenticated') + ')');
}).error(function () {
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java
index 551993a..40063da 100755
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java
@@ -48,6 +48,14 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
@FindBy(xpath = "//button[text() = 'Init']")
private WebElement initButton;
+ @FindBy(xpath = "//button[text() = 'Init with both tokens']")
+ private WebElement initWithBothTokens;
+ @FindBy(xpath = "//button[text() = 'Init with refresh token']")
+ private WebElement initWithRefreshToken;
+ @FindBy(xpath = "//button[text() = 'Init with TimeSkew']")
+ private WebElement initWithTimeSkew;
+ @FindBy(xpath = "//button[text() = 'Init with different realm name']")
+ private WebElement initWithDifferentRealmName;
@FindBy(xpath = "//button[text() = 'Login']")
private WebElement logInButton;
@FindBy(xpath = "//button[text() = 'Logout']")
@@ -88,8 +96,12 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
@FindBy(id = "timeSkew")
private WebElement timeSkewValue;
- @FindBy(id = "timeSkewInput")
- private WebElement timeSkewInput;
+ @FindBy(id = "inputField")
+ private WebElement generalInput;
+ @FindBy(id = "inputField2")
+ private WebElement generalInput2;
+ @FindBy(id = "inputField3")
+ private WebElement generalInput3;
@FindBy(xpath = "//button[text() = 'timeSkew offset']")
private WebElement timeSkewButton;
@@ -143,6 +155,22 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
initButton.click();
}
+ public void initWithBothTokens() {
+ initWithBothTokens.click();
+ }
+
+ public void initWithRefreshToken() {
+ initWithRefreshToken.click();
+ }
+
+ public void initWithTimeSkew() {
+ initWithTimeSkew.click();
+ }
+
+ public void initWithDifferentRealmName() {
+ initWithDifferentRealmName.click();
+ }
+
public void createBearerRequest() {
createBearerRequest.click();
}
@@ -175,9 +203,27 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
return timeSkewValue;
}
- public void setTimeSkewOffset(int value) {
- timeSkewInput.clear();
- timeSkewInput.sendKeys(Integer.toString(value));
+ public void setInput(String value) {
+ generalInput.clear();
+ generalInput.sendKeys(value);
+ }
+
+ public void setInput2(String value) {
+ generalInput2.clear();
+ generalInput2.sendKeys(value);
+ }
+
+ public void setInput3(String value) {
+ generalInput3.clear();
+ generalInput3.sendKeys(value);
+ }
+
+ public void setInput(int value) {
+ setInput(Integer.toString(value));
+ }
+
+ public void setTimeSkew(int value) {
+ setInput(value);
timeSkewButton.click();
}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java
index 49e2261..37941b9 100755
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java
@@ -21,6 +21,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.Test;
+import org.keycloak.OAuth2Constants;
import org.keycloak.admin.client.resource.ClientResource;
import org.keycloak.admin.client.resource.UsersResource;
import org.keycloak.representations.idm.ClientRepresentation;
@@ -34,6 +35,7 @@ import org.keycloak.testsuite.auth.page.account.Applications;
import org.keycloak.testsuite.auth.page.login.OAuthGrant;
import org.keycloak.testsuite.console.page.events.Config;
import org.keycloak.testsuite.console.page.events.LoginEvents;
+import org.keycloak.testsuite.util.RealmBuilder;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebElement;
@@ -379,12 +381,12 @@ public abstract class AbstractJSConsoleExampleAdapterTest extends AbstractExampl
public void testUpdateToken() {
logInAndInit("standard");
- jsConsoleTestAppPage.setTimeSkewOffset(-33);
+ jsConsoleTestAppPage.setTimeSkew(-33);
setTimeOffset(33);
jsConsoleTestAppPage.refreshTokenIfUnder5s();
- jsConsoleTestAppPage.setTimeSkewOffset(-34);
+ jsConsoleTestAppPage.setTimeSkew(-34);
setTimeOffset(67);
jsConsoleTestAppPage.refreshTokenIfUnder5s();
@@ -455,6 +457,75 @@ public abstract class AbstractJSConsoleExampleAdapterTest extends AbstractExampl
}
@Test
+ public void spaceInRealmNameTest() {
+ String SPACE_REALM_NAME = "Example realm";
+ adminClient.realm(EXAMPLE).update(RealmBuilder.edit(adminClient.realm(EXAMPLE).toRepresentation()).name(SPACE_REALM_NAME).build());
+
+ jsConsoleTestAppPage.navigateTo();
+ jsConsoleTestAppPage.setInput(SPACE_REALM_NAME);
+ jsConsoleTestAppPage.initWithDifferentRealmName();
+ waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text().contains("Init Success (Not Authenticated)");
+ jsConsoleTestAppPage.logIn();
+ waitUntilElement(By.xpath("//body")).is().present();
+ testRealmLoginPage.form().login("user", "password");
+ jsConsoleTestAppPage.setInput(SPACE_REALM_NAME);
+ jsConsoleTestAppPage.initWithDifferentRealmName();
+
+ waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text().contains("Init Success (Authenticated)");
+ waitUntilElement(jsConsoleTestAppPage.getEventsElement()).text().contains("Auth Success");
+ }
+
+ @Test
+ public void initializeWithTokenTest() {
+ oauth.realm(EXAMPLE);
+ oauth.clientId("js-console");
+ oauth.redirectUri(appServerContextRootPage + "/js-console");
+ oauth.doLogin("user", "password");
+
+ String code = oauth.getCurrentQuery().get(OAuth2Constants.CODE);
+ String token = oauth.doAccessTokenRequest(code, "password").getAccessToken();
+ String refreshToken = oauth.doRefreshTokenRequest(token, "password").getRefreshToken();
+
+ jsConsoleTestAppPage.navigateTo();
+ jsConsoleTestAppPage.setInput(token);
+ jsConsoleTestAppPage.setInput2(refreshToken);
+
+ jsConsoleTestAppPage.initWithBothTokens();
+
+ waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text().contains("Init Success (Authenticated)");
+
+ jsConsoleTestAppPage.refreshToken();
+ waitUntilElement(jsConsoleTestAppPage.getEventsElement()).text().contains("Auth Refresh Success");
+ }
+
+ @Test
+ public void initializeWithTimeSkew() {
+ setTimeOffset(600);
+ oauth.realm(EXAMPLE);
+ oauth.clientId("js-console");
+ oauth.redirectUri(appServerContextRootPage + "/js-console");
+ oauth.doLogin("user", "password");
+
+ String code = oauth.getCurrentQuery().get(OAuth2Constants.CODE);
+ String token = oauth.doAccessTokenRequest(code, "password").getAccessToken();
+ String refreshToken = oauth.doRefreshTokenRequest(token, "password").getRefreshToken();
+
+ jsConsoleTestAppPage.navigateTo();
+ jsConsoleTestAppPage.setInput(token);
+ jsConsoleTestAppPage.setInput2(refreshToken);
+ jsConsoleTestAppPage.setInput3("-600");
+
+ jsConsoleTestAppPage.initWithTimeSkew();
+
+ waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text().contains("Init Success (Authenticated)");
+
+ jsConsoleTestAppPage.refreshToken();
+ waitUntilElement(jsConsoleTestAppPage.getEventsElement()).text().contains("Auth Refresh Success");
+
+ setTimeOffset(0);
+ }
+
+ @Test
public void reentrancyCallbackTest() {
logInAndInit("standard");