diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/OAuthRedirectUriTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthRedirectUriTest.java
similarity index 53%
rename from testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/OAuthRedirectUriTest.java
rename to testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthRedirectUriTest.java
index a08ca371dc..dd3f214456 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/OAuthRedirectUriTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthRedirectUriTest.java
@@ -16,202 +16,170 @@
*/
package org.keycloak.testsuite.oauth;
+import org.jboss.arquillian.graphene.page.Page;
import org.junit.Assert;
-import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.keycloak.OAuth2Constants;
-import org.keycloak.models.ClientModel;
import org.keycloak.models.Constants;
-import org.keycloak.models.RealmModel;
-import org.keycloak.models.utils.KeycloakModelUtils;
-import org.keycloak.services.managers.RealmManager;
-import org.keycloak.testsuite.OAuthClient;
+import org.keycloak.representations.idm.RealmRepresentation;
+import org.keycloak.testsuite.AbstractKeycloakTest;
+import org.keycloak.testsuite.AssertEvents;
import org.keycloak.testsuite.pages.ErrorPage;
import org.keycloak.testsuite.pages.LoginPage;
-import org.keycloak.testsuite.rule.KeycloakRule;
-import org.keycloak.testsuite.rule.WebResource;
-import org.keycloak.testsuite.rule.WebRule;
-import org.openqa.selenium.WebDriver;
+import org.keycloak.testsuite.util.ClientBuilder;
+import org.keycloak.testsuite.util.ClientManager;
+import org.keycloak.testsuite.util.OAuthClient;
+import org.keycloak.testsuite.util.RealmBuilder;
+import org.openqa.selenium.By;
import java.io.IOException;
import java.net.URL;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.keycloak.testsuite.admin.AbstractAdminTest.loadJson;
+import static org.keycloak.testsuite.util.OAuthClient.APP_ROOT;
/**
* @author Viliam Rockai
*/
-public class OAuthRedirectUriTest {
-
- @ClassRule
- public static KeycloakRule keycloakRule = new KeycloakRule(new KeycloakRule.KeycloakSetup() {
- @Override
- public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
- ClientModel installedApp = KeycloakModelUtils.createClient(appRealm, "test-installed");
- installedApp.setEnabled(true);
- installedApp.addRedirectUri(Constants.INSTALLED_APP_URN);
- installedApp.addRedirectUri(Constants.INSTALLED_APP_URL);
- installedApp.setSecret("password");
-
- ClientModel installedApp2 = KeycloakModelUtils.createClient(appRealm, "test-installed2");
- installedApp2.setEnabled(true);
- installedApp2.addRedirectUri(Constants.INSTALLED_APP_URL + "/myapp");
- installedApp2.setSecret("password");
-
- ClientModel installedApp3 = KeycloakModelUtils.createClient(appRealm, "test-wildcard");
- installedApp3.setEnabled(true);
- installedApp3.addRedirectUri("http://example.com/foo/*");
- installedApp3.addRedirectUri("http://with-dash.example.com/foo/*");
- installedApp3.addRedirectUri("http://localhost:8081/foo/*");
- installedApp3.setSecret("password");
-
- ClientModel installedApp4 = KeycloakModelUtils.createClient(appRealm, "test-dash");
- installedApp4.setEnabled(true);
- installedApp4.addRedirectUri("http://with-dash.example.com");
- installedApp4.addRedirectUri("http://with-dash.example.com/foo");
- installedApp4.setSecret("password");
-
- ClientModel installedApp5 = KeycloakModelUtils.createClient(appRealm, "test-root-url");
- installedApp5.setEnabled(true);
- installedApp5.setRootUrl("http://with-dash.example.com");
- installedApp5.addRedirectUri("/foo");
- installedApp5.setSecret("password");
-
- ClientModel installedApp6 = KeycloakModelUtils.createClient(appRealm, "test-relative-url");
- installedApp6.setEnabled(true);
- installedApp6.setRootUrl("");
- installedApp6.addRedirectUri("/foo");
- installedApp6.setSecret("password");
- }
- });
+public class OAuthRedirectUriTest extends AbstractKeycloakTest {
@Rule
- public WebRule webRule = new WebRule(this);
+ public AssertEvents events = new AssertEvents(this);
- @WebResource
- protected WebDriver driver;
-
- @WebResource
- protected OAuthClient oauth;
-
- @WebResource
+ @Page
+ protected ErrorPage errorPage;
+ @Page
protected LoginPage loginPage;
- @WebResource
- protected ErrorPage errorPage;
+ @Override
+ public void beforeAbstractKeycloakTest() throws Exception {
+ super.beforeAbstractKeycloakTest();
+ }
+
+ @Override
+ public void addTestRealms(List testRealms) {
+
+ RealmRepresentation realmRepresentation = loadJson(getClass().getResourceAsStream("/testrealm.json"), RealmRepresentation.class);
+ RealmBuilder realm = RealmBuilder.edit(realmRepresentation).testEventListener();
+
+ ClientBuilder installedApp = ClientBuilder.create().id("test-installed").name("test-installed")
+ .redirectUris(Constants.INSTALLED_APP_URN, Constants.INSTALLED_APP_URL)
+ .secret("password");
+ realm.client(installedApp);
+
+ ClientBuilder installedApp2 = ClientBuilder.create().id("test-installed2").name("test-installed2")
+ .redirectUris(Constants.INSTALLED_APP_URL + "/myapp")
+ .secret("password");
+ realm.client(installedApp2);
+
+ ClientBuilder installedApp3 = ClientBuilder.create().id("test-wildcard").name("test-wildcard")
+ .redirectUris("http://example.com/foo/*", "http://with-dash.example.com/foo/*", "http://localhost:8180/foo/*")
+ .secret("password");
+ realm.client(installedApp3);
+
+ ClientBuilder installedApp4 = ClientBuilder.create().id("test-dash").name("test-dash")
+ .redirectUris("http://with-dash.example.com", "http://with-dash.example.com/foo")
+ .secret("password");
+ realm.client(installedApp4);
+
+ ClientBuilder installedApp5 = ClientBuilder.create().id("test-root-url").name("test-root-url")
+ .rootUrl("http://with-dash.example.com")
+ .redirectUris("/foo")
+ .secret("password");
+ realm.client(installedApp5);
+
+ ClientBuilder installedApp6 = ClientBuilder.create().id("test-relative-url").name("test-relative-url")
+ .rootUrl("")
+ .redirectUris("/foo")
+ .secret("password");
+ realm.client(installedApp6);
+
+ testRealms.add(realm.build());
+ }
@Test
public void testNoParam() throws IOException {
oauth.redirectUri(null);
OAuthClient.AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
-
Assert.assertNotNull(response.getCode());
- Assert.assertEquals(oauth.getCurrentRequest(), "http://localhost:8081/app");
+ assertEquals(oauth.getCurrentRequest(), APP_ROOT + "/auth");
}
@Test
public void testNoParamMultipleValidUris() throws IOException {
- keycloakRule.update(new KeycloakRule.KeycloakSetup() {
- @Override
- public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
- appRealm.getClientByClientId("test-app").addRedirectUri("http://localhost:8081/app2");
- }
- });
-
+ ClientManager.realm(adminClient.realm("test")).clientId("test-app").addRedirectUris("http://localhost:8180/app2");
try {
oauth.redirectUri(null);
oauth.openLoginForm();
-
Assert.assertTrue(errorPage.isCurrent());
Assert.assertEquals("Invalid parameter: redirect_uri", errorPage.getError());
} finally {
- keycloakRule.update(new KeycloakRule.KeycloakSetup() {
- @Override
- public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
- appRealm.getClientByClientId("test-app").removeRedirectUri("http://localhost:8081/app2");
- }
- });
+ ClientManager.realm(adminClient.realm("test")).clientId("test-app").removeRedirectUris("http://localhost:8180/app2");
}
}
@Test
public void testNoParamNoValidUris() throws IOException {
- keycloakRule.update(new KeycloakRule.KeycloakSetup() {
- @Override
- public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
- appRealm.getClientByClientId("test-app").removeRedirectUri("http://localhost:8081/app/*");
- }
- });
-
+ ClientManager.realm(adminClient.realm("test")).clientId("test-app")
+ .removeRedirectUris("http://localhost:8180/auth/realms/master/app/auth/*");
try {
oauth.redirectUri(null);
oauth.openLoginForm();
Assert.assertTrue(errorPage.isCurrent());
- Assert.assertEquals("Invalid parameter: redirect_uri", errorPage.getError());
+ assertEquals("Invalid parameter: redirect_uri", errorPage.getError());
} finally {
- keycloakRule.update(new KeycloakRule.KeycloakSetup() {
- @Override
- public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
- appRealm.getClientByClientId("test-app").addRedirectUri("http://localhost:8081/app/*");
- }
- });
+ ClientManager.realm(adminClient.realm("test")).clientId("test-app").addRedirectUris("http://localhost:8180/auth/realms/master/app/auth/*");
}
}
@Test
public void testNoValidUris() throws IOException {
- keycloakRule.update(new KeycloakRule.KeycloakSetup() {
- @Override
- public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
- appRealm.getClientByClientId("test-app").removeRedirectUri("http://localhost:8081/app/*");
- }
- });
+ ClientManager.realm(adminClient.realm("test")).clientId("test-app").removeRedirectUris("http://localhost:8180/auth/realms/master/app/auth/*");
try {
oauth.redirectUri(null);
oauth.openLoginForm();
Assert.assertTrue(errorPage.isCurrent());
- Assert.assertEquals("Invalid parameter: redirect_uri", errorPage.getError());
+ assertEquals("Invalid parameter: redirect_uri", errorPage.getError());
} finally {
- keycloakRule.update(new KeycloakRule.KeycloakSetup() {
- @Override
- public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
- appRealm.getClientByClientId("test-app").addRedirectUri("http://localhost:8081/app/*");
- }
- });
+ ClientManager.realm(adminClient.realm("test")).clientId("test-app").addRedirectUris("http://localhost:8180/auth/realms/master/app/auth/*");
}
}
@Test
public void testValid() throws IOException {
- oauth.redirectUri("http://localhost:8081/app");
+ oauth.redirectUri(APP_ROOT + "/auth");
OAuthClient.AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
Assert.assertNotNull(response.getCode());
URL url = new URL(driver.getCurrentUrl());
- Assert.assertTrue(url.toString().startsWith("http://localhost:8081/app"));
+ Assert.assertTrue(url.toString().startsWith(APP_ROOT));
Assert.assertTrue(url.getQuery().contains("code="));
Assert.assertTrue(url.getQuery().contains("state="));
}
@Test
public void testInvalid() throws IOException {
- oauth.redirectUri("http://localhost:8081/app2");
+ oauth.redirectUri("http://localhost:8180/app2");
oauth.openLoginForm();
Assert.assertTrue(errorPage.isCurrent());
- Assert.assertEquals("Invalid parameter: redirect_uri", errorPage.getError());
+ assertEquals("Invalid parameter: redirect_uri", errorPage.getError());
}
@Test
public void testWithParams() throws IOException {
- oauth.redirectUri("http://localhost:8081/app?key=value");
+ oauth.redirectUri(APP_ROOT + "/auth?key=value");
OAuthClient.AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
Assert.assertNotNull(response.getCode());
URL url = new URL(driver.getCurrentUrl());
- Assert.assertTrue(url.toString().startsWith("http://localhost:8081/app"));
+ Assert.assertTrue(url.toString().startsWith(APP_ROOT));
Assert.assertTrue(url.getQuery().contains("key=value"));
Assert.assertTrue(url.getQuery().contains("state="));
Assert.assertTrue(url.getQuery().contains("code="));
@@ -224,10 +192,10 @@ public class OAuthRedirectUriTest {
checkRedirectUri("http://localhost:8080", false, true);
checkRedirectUri("http://example.com/foo", true);
checkRedirectUri("http://example.com/foo/bar", true);
- checkRedirectUri("http://localhost:8081/foo", true, true);
- checkRedirectUri("http://localhost:8081/foo/bar", true, true);
+ checkRedirectUri("http://localhost:8180/foo", true, true);
+ checkRedirectUri("http://localhost:8180/foo/bar", true, true);
checkRedirectUri("http://example.com/foobar", false);
- checkRedirectUri("http://localhost:8081/foobar", false, true);
+ checkRedirectUri("http://localhost:8180/foobar", false, true);
}
@Test
@@ -264,7 +232,7 @@ public class OAuthRedirectUriTest {
oauth.clientId("test-root-url");
checkRedirectUri("http://with-dash.example.com/foo", true);
- checkRedirectUri("http://localhost:8081/foo", false);
+ checkRedirectUri("http://localhost:8180/foo", false);
}
@Test
@@ -272,7 +240,7 @@ public class OAuthRedirectUriTest {
oauth.clientId("test-relative-url");
checkRedirectUri("http://with-dash.example.com/foo", false);
- checkRedirectUri("http://localhost:8081/foo", true);
+ checkRedirectUri("http://localhost:8180/foo", true);
}
@Test
@@ -282,16 +250,15 @@ public class OAuthRedirectUriTest {
checkRedirectUri("urn:ietf:wg:oauth:2.0:oob", true, true);
checkRedirectUri("http://localhost", true);
- checkRedirectUri("http://localhost:8081", true, true);
+ checkRedirectUri("http://localhost:8180", true, true);
checkRedirectUri("http://localhosts", false);
checkRedirectUri("http://localhost/myapp", false);
- checkRedirectUri("http://localhost:8081/myapp", false, true);
-
+ checkRedirectUri("http://localhost:8180/myapp", false, true);
oauth.clientId("test-installed2");
checkRedirectUri("http://localhost/myapp", true);
- checkRedirectUri("http://localhost:8081/myapp", true, true);
+ checkRedirectUri("http://localhost:8180/myapp", true, true);
checkRedirectUri("http://localhosts/myapp", false);
checkRedirectUri("http://localhost", false);
@@ -317,7 +284,16 @@ public class OAuthRedirectUriTest {
Assert.assertTrue(loginPage.isCurrent());
if (checkCodeToToken) {
- loginPage.login("test-user@localhost", "password");
+ oauth.doLogin("test-user@localhost", "password");
+
+ /*
+ * Dirty workaround. For some reason the form is not being submitted when you have
+ * redirectUri like http://localhost:8180 or http://localhost:8180/myapp
+ * TODO: Revisit this, because it's a weird behavior
+ */
+ if (driver.findElements(By.name("login")).size() != 0) {
+ driver.findElement(By.name("login")).click();
+ }
String code = oauth.getCurrentQuery().get(OAuth2Constants.CODE);
Assert.assertNotNull(code);
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/ClientManager.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/ClientManager.java
index 02bd19a5cd..6702ec57eb 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/ClientManager.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/ClientManager.java
@@ -6,7 +6,6 @@ import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;
-import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
@@ -104,16 +103,20 @@ public class ClientManager {
if (app.getRedirectUris() == null) {
app.setRedirectUris(new LinkedList());
}
- app.setRedirectUris(Arrays.asList(redirectUris));
+ for (String redirectUri : redirectUris) {
+ app.getRedirectUris().add(redirectUri);
+ }
clientResource.update(app);
}
public void removeRedirectUris(String... redirectUris) {
ClientRepresentation app = clientResource.toRepresentation();
for (String redirectUri : redirectUris) {
- app.getRedirectUris().remove(redirectUri);
+ if (app.getRedirectUris() != null) {
+ app.getRedirectUris().remove(redirectUri);
+ }
}
clientResource.update(app);
}
}
-}
+}
\ No newline at end of file
diff --git a/testsuite/integration-arquillian/tests/base/src/test/resources/testrealm.json b/testsuite/integration-arquillian/tests/base/src/test/resources/testrealm.json
index 93624ef734..2be3eac77d 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/resources/testrealm.json
+++ b/testsuite/integration-arquillian/tests/base/src/test/resources/testrealm.json
@@ -103,7 +103,7 @@
"enabled": true,
"baseUrl": "http://localhost:8180/auth/realms/master/app",
"redirectUris": [
- "http://localhost:8180/auth/realms/master/app/*"
+ "http://localhost:8180/auth/realms/master/app/auth/*"
],
"adminUrl": "http://localhost:8180/auth/realms/master/app/logout",
"secret": "password"