diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java index 1e982535bd..23337f0e91 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/client/resources/TestingResource.java @@ -62,10 +62,10 @@ public interface TestingResource { @POST @Path("/remove-user-session") @Produces(MediaType.APPLICATION_JSON) - Response removeUserSession(@QueryParam("realm") final String name, @QueryParam("session") final String sessionId); + Response removeUserSession(@QueryParam("realm") final String realm, @QueryParam("session") final String sessionId); @POST @Path("/remove-expired") @Produces(MediaType.APPLICATION_JSON) - Response removeExpired(@QueryParam("realm") final String name); + Response removeExpired(@QueryParam("realm") final String realm); } diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/AppPage.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/AppPage.java index d3122ff07d..2badf74eb2 100755 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/AppPage.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/AppPage.java @@ -29,8 +29,8 @@ import javax.ws.rs.core.UriBuilder; */ public class AppPage extends AbstractPage { - public static final String AUTH_SERVER_URL = "http://localhost:8081/auth"; - public static final String baseUrl = "http://localhost:8081/app"; + public static final String AUTH_SERVER_URL = "http://localhost:8180/auth"; + public static final String baseUrl = "http://localhost:8180/auth/realms/master/app"; @FindBy(id = "account") private WebElement accountLink; diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupMappersTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupMappersTest.java index d61a517ce6..c1e59bd1d0 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupMappersTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupMappersTest.java @@ -109,6 +109,7 @@ public class GroupMappersTest extends AbstractGroupTest { @Test @SuppressWarnings("unchecked") public void testGroupMappers() throws Exception { + events.clear(); RealmResource realm = adminClient.realms().realm("test"); { UserRepresentation user = realm.users().search("topGroupUser", -1, -1).get(0); diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/LoginTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/LoginTest.java old mode 100755 new mode 100644 similarity index 69% rename from testsuite/integration/src/test/java/org/keycloak/testsuite/forms/LoginTest.java rename to testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/LoginTest.java index 777fd353f6..adc0c9b2f9 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/LoginTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/LoginTest.java @@ -16,41 +16,34 @@ */ package org.keycloak.testsuite.forms; +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.admin.client.resource.UserResource; import org.keycloak.events.Details; -import org.keycloak.events.Event; import org.keycloak.events.EventType; import org.keycloak.models.BrowserSecurityHeaders; -import org.keycloak.models.KeycloakSession; -import org.keycloak.models.PasswordPolicy; -import org.keycloak.models.RealmModel; -import org.keycloak.models.UserCredentialModel; -import org.keycloak.models.UserModel; -import org.keycloak.representations.idm.CredentialRepresentation; -import org.keycloak.services.managers.RealmManager; +import org.keycloak.representations.idm.EventRepresentation; +import org.keycloak.representations.idm.RealmRepresentation; +import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.testsuite.AssertEvents; -import org.keycloak.testsuite.OAuthClient; +import org.keycloak.testsuite.TestRealmKeycloakTest; import org.keycloak.testsuite.pages.AppPage; import org.keycloak.testsuite.pages.AppPage.RequestType; import org.keycloak.testsuite.pages.ErrorPage; import org.keycloak.testsuite.pages.LoginPage; import org.keycloak.testsuite.pages.LoginPasswordUpdatePage; -import org.keycloak.testsuite.rule.KeycloakRule; -import org.keycloak.testsuite.rule.WebResource; -import org.keycloak.testsuite.rule.WebRule; +import org.keycloak.testsuite.util.RealmBuilder; +import org.keycloak.testsuite.util.UserBuilder; import org.keycloak.common.util.Time; -import org.openqa.selenium.WebDriver; +import java.util.Map; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.Response; -import java.util.Map; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -58,53 +51,46 @@ import static org.junit.Assert.assertTrue; /** * @author Stian Thorgersen */ -public class LoginTest { +public class LoginTest extends TestRealmKeycloakTest { - @ClassRule - public static KeycloakRule keycloakRule = new KeycloakRule(new KeycloakRule.KeycloakSetup() { + @Override + public void configureTestRealm(RealmRepresentation testRealm) { + UserRepresentation user = UserBuilder.create() + .id("login-test") + .username("login-test") + .email("login@test.com") + .enabled(true) + .password("password") + .build(); + userId = user.getId(); - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - UserModel user = manager.getSession().users().addUser(appRealm, "login-test"); - user.setEmail("login@test.com"); - user.setEnabled(true); + UserRepresentation user2 = UserBuilder.create() + .id("login-test2") + .username("login-test2") + .email("login2@test.com") + .enabled(true) + .password("password") + .build(); + user2Id = user2.getId(); - userId = user.getId(); - - user.updateCredential(UserCredentialModel.password("password")); - - UserModel user2 = manager.getSession().users().addUser(appRealm, "login-test2"); - user2.setEmail("login2@test.com"); - user2.setEnabled(true); - - user2Id = user2.getId(); - - user2.updateCredential(UserCredentialModel.password("password")); - } - }); + RealmBuilder.edit(testRealm) + .user(user) + .user(user2); + } @Rule - public AssertEvents events = new AssertEvents(keycloakRule); + public AssertEvents events = new AssertEvents(this); - @Rule - public WebRule webRule = new WebRule(this); - - @WebResource - protected OAuthClient oauth; - - @WebResource - protected WebDriver driver; - - @WebResource + @Page protected AppPage appPage; - @WebResource + @Page protected LoginPage loginPage; - @WebResource + @Page protected ErrorPage errorPage; - - @WebResource + + @Page protected LoginPasswordUpdatePage updatePasswordPage; private static String userId; @@ -188,14 +174,15 @@ public class LoginTest { .assertEvent(); } + private void setUserEnabled(String userName, boolean enabled) { + UserRepresentation rep = adminClient.realm("test").users().get(userName).toRepresentation(); + rep.setEnabled(enabled); + adminClient.realm("test").users().get(userName).update(rep); + } + @Test public void loginInvalidPasswordDisabledUser() { - keycloakRule.configure(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - session.users().getUserByUsername("login-test", appRealm).setEnabled(false); - } - }); + setUserEnabled("login-test", false); try { loginPage.open(); @@ -215,23 +202,13 @@ public class LoginTest { .removeDetail(Details.CONSENT) .assertEvent(); } finally { - keycloakRule.configure(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - session.users().getUserByUsername("login-test", appRealm).setEnabled(true); - } - }); + setUserEnabled("login-test", true); } } @Test public void loginDisabledUser() { - keycloakRule.configure(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - session.users().getUserByUsername("login-test", appRealm).setEnabled(false); - } - }); + setUserEnabled("login-test", false); try { loginPage.open(); @@ -251,12 +228,7 @@ public class LoginTest { .removeDetail(Details.CONSENT) .assertEvent(); } finally { - keycloakRule.configure(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - session.users().getUserByUsername("login-test", appRealm).setEnabled(true); - } - }); + setUserEnabled("login-test", true); } } @@ -303,17 +275,19 @@ public class LoginTest { @Test // KEYCLOAK-2557 public void loginUserWithEmailAsUsername() { - KeycloakSession session = keycloakRule.startSession(); + UserRepresentation rep = UserBuilder.create() + .enabled(true) + .id("foo") + .email("foo") + .username("login@test.com") + .password("password") + .build(); - UserModel user = session.users().addUser(session.realms().getRealmByName("test"), "login@test.com"); - user.setEnabled(true); - user.updateCredential(UserCredentialModel.password("password")); - - keycloakRule.stopSession(session, true); + adminClient.realm(userId).users().create(rep); loginPage.open(); loginPage.login("login@test.com", "password"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -349,86 +323,71 @@ public class LoginTest { events.expectLogin().user(userId).removeDetail(Details.USERNAME).assertEvent(); } - + + private void setPasswordPolicy(String policy) { + RealmRepresentation realmRep = adminClient.realm("test").toRepresentation(); + realmRep.setPasswordPolicy(policy); + adminClient.realm("test").update(realmRep); + } + @Test public void loginWithForcePasswordChangePolicy() { - keycloakRule.update(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - appRealm.setPasswordPolicy(new PasswordPolicy("forceExpiredPasswordChange(1)")); - } - }); - + setPasswordPolicy("forceExpiredPasswordChange(1)"); + try { // Setting offset to more than one day to force password update // elapsedTime > timeToExpire Time.setOffset(86405); - + loginPage.open(); loginPage.login("login-test", "password"); - + updatePasswordPage.assertCurrent(); - + updatePasswordPage.changePassword("updatedPassword", "updatedPassword"); events.expectRequiredAction(EventType.UPDATE_PASSWORD).user(userId).detail(Details.USERNAME, "login-test").assertEvent(); - + assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); events.expectLogin().user(userId).detail(Details.USERNAME, "login-test").assertEvent(); - + } finally { - keycloakRule.update(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - appRealm.setPasswordPolicy(new PasswordPolicy(null)); - - UserModel user = manager.getSession().users().getUserByUsername("login-test", appRealm); - UserCredentialModel cred = new UserCredentialModel(); - cred.setType(CredentialRepresentation.PASSWORD); - cred.setValue("password"); - user.updateCredential(cred); - } - }); + setPasswordPolicy(null); + UserResource userRsc = adminClient.realm("test").users().get("login-test"); + UserBuilder userBuilder = UserBuilder.edit(userRsc.toRepresentation()) + .password("password"); + userRsc.update(userBuilder.build()); + Time.setOffset(0); } } - + @Test public void loginWithoutForcePasswordChangePolicy() { - keycloakRule.update(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - appRealm.setPasswordPolicy(new PasswordPolicy("forceExpiredPasswordChange(1)")); - } - }); - + setPasswordPolicy("forceExpiredPasswordChange(1)"); + try { // Setting offset to less than one day to avoid forced password update // elapsedTime < timeToExpire Time.setOffset(86205); - + loginPage.open(); loginPage.login("login-test", "password"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); events.expectLogin().user(userId).detail(Details.USERNAME, "login-test").assertEvent(); - + } finally { - keycloakRule.update(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - appRealm.setPasswordPolicy(new PasswordPolicy(null)); - } - }); + setPasswordPolicy(null); Time.setOffset(0); } } - + @Test public void loginNoTimeoutWithLongWait() { try { @@ -484,14 +443,15 @@ public class LoginTest { events.expectLogin().user(userId).assertEvent(); } + private void setRememberMe(boolean enabled) { + RealmRepresentation rep = adminClient.realm("test").toRepresentation(); + rep.setRememberMe(enabled); + adminClient.realm("test").update(rep); + } + @Test public void loginWithRememberMe() { - keycloakRule.update(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - appRealm.setRememberMe(true); - } - }); + setRememberMe(true); try { loginPage.open(); @@ -502,14 +462,14 @@ public class LoginTest { Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - Event loginEvent = events.expectLogin().user(userId) - .detail(Details.USERNAME, "login-test") - .detail(Details.REMEMBER_ME, "true") - .assertEvent(); + EventRepresentation loginEvent = events.expectLogin().user(userId) + .detail(Details.USERNAME, "login-test") + .detail(Details.REMEMBER_ME, "true") + .assertEvent(); String sessionId = loginEvent.getSessionId(); // Expire session - keycloakRule.removeUserSession(sessionId); + testingClient.testing().removeUserSession("test", sessionId); // Assert rememberMe checked and username/email prefilled loginPage.open(); @@ -518,12 +478,7 @@ public class LoginTest { loginPage.setRememberMe(false); } finally { - keycloakRule.update(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - appRealm.setRememberMe(false); - } - }); + setRememberMe(false); } } @@ -533,12 +488,7 @@ public class LoginTest { try { loginPage.open(); Time.setOffset(5000); - keycloakRule.update(new KeycloakRule.KeycloakSetup() { - @Override - public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) { - manager.getSession().sessions().removeExpired(appRealm); - } - }); + testingClient.testing().removeExpired("test"); loginPage.login("login@test.com", "password"); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/RealmBuilder.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/RealmBuilder.java index 157045c394..d40a084ae2 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/RealmBuilder.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/RealmBuilder.java @@ -28,14 +28,20 @@ import java.util.LinkedList; */ public class RealmBuilder { - private RealmRepresentation rep = new RealmRepresentation(); + private final RealmRepresentation rep; public static RealmBuilder create() { - return new RealmBuilder(); + RealmRepresentation rep = new RealmRepresentation(); + rep.setEnabled(Boolean.TRUE); + return new RealmBuilder(rep); } - private RealmBuilder() { - rep.setEnabled(true); + public static RealmBuilder edit(RealmRepresentation rep) { + return new RealmBuilder(rep); + } + + private RealmBuilder(RealmRepresentation rep) { + this.rep = rep; } public RealmBuilder name(String name) { diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/UserBuilder.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/UserBuilder.java index 0d07371018..ae427e1ca2 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/UserBuilder.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/UserBuilder.java @@ -29,14 +29,20 @@ import java.util.List; */ public class UserBuilder { - private UserRepresentation rep = new UserRepresentation(); + private final UserRepresentation rep; public static UserBuilder create() { - return new UserBuilder(); + UserRepresentation rep = new UserRepresentation(); + rep.setEnabled(Boolean.TRUE); + return new UserBuilder(rep); } - private UserBuilder() { - rep.setEnabled(true); + public static UserBuilder edit(UserRepresentation rep) { + return new UserBuilder(rep); + } + + private UserBuilder(UserRepresentation rep) { + this.rep = rep; } public UserBuilder id(String id) { @@ -49,7 +55,10 @@ public class UserBuilder { return this; } - public UserBuilder password(String password) { + /** + * This method adds additional passwords to the user. + */ + public UserBuilder addPassword(String password) { if (rep.getCredentials() == null) { rep.setCredentials(new LinkedList()); } @@ -62,6 +71,24 @@ public class UserBuilder { return this; } + /** + * This method makes sure that there is one single password for the user. + */ + public UserBuilder password(String password) { + rep.setCredentials(null); + return addPassword(password); + } + + public UserBuilder email(String email) { + rep.setEmail(email); + return this; + } + + public UserBuilder enabled(boolean enabled) { + rep.setEnabled(enabled); + return this; + } + public UserBuilder role(String role) { if (rep.getRealmRoles() == null) { rep.setRealmRoles(new LinkedList());