[KEYCLOAK-3035] Fixed broker tests, should not randomly fail anymore
This commit is contained in:
parent
a6bdf81e6d
commit
cd94778dec
3 changed files with 90 additions and 44 deletions
|
@ -1,5 +1,13 @@
|
||||||
package org.keycloak.testsuite.broker;
|
package org.keycloak.testsuite.broker;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.keycloak.testsuite.admin.ApiUtil.createUserWithAdminClient;
|
||||||
|
import static org.keycloak.testsuite.admin.ApiUtil.resetUserPassword;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.jboss.arquillian.graphene.page.Page;
|
import org.jboss.arquillian.graphene.page.Page;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -9,7 +17,6 @@ import org.keycloak.representations.idm.ClientRepresentation;
|
||||||
import org.keycloak.representations.idm.IdentityProviderRepresentation;
|
import org.keycloak.representations.idm.IdentityProviderRepresentation;
|
||||||
import org.keycloak.representations.idm.RealmRepresentation;
|
import org.keycloak.representations.idm.RealmRepresentation;
|
||||||
import org.keycloak.representations.idm.UserRepresentation;
|
import org.keycloak.representations.idm.UserRepresentation;
|
||||||
import org.keycloak.services.messages.Messages;
|
|
||||||
import org.keycloak.testsuite.AbstractKeycloakTest;
|
import org.keycloak.testsuite.AbstractKeycloakTest;
|
||||||
import org.keycloak.testsuite.Assert;
|
import org.keycloak.testsuite.Assert;
|
||||||
import org.keycloak.testsuite.pages.AccountPasswordPage;
|
import org.keycloak.testsuite.pages.AccountPasswordPage;
|
||||||
|
@ -17,15 +24,12 @@ import org.keycloak.testsuite.pages.ErrorPage;
|
||||||
import org.keycloak.testsuite.pages.LoginPage;
|
import org.keycloak.testsuite.pages.LoginPage;
|
||||||
import org.keycloak.testsuite.pages.UpdateAccountInformationPage;
|
import org.keycloak.testsuite.pages.UpdateAccountInformationPage;
|
||||||
import org.keycloak.testsuite.util.RealmBuilder;
|
import org.keycloak.testsuite.util.RealmBuilder;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
import java.io.UnsupportedEncodingException;
|
import org.openqa.selenium.TimeoutException;
|
||||||
import java.net.URLEncoder;
|
import org.openqa.selenium.WebDriver;
|
||||||
import java.util.List;
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedCondition;
|
||||||
import static org.jgroups.util.Util.assertTrue;
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.keycloak.testsuite.admin.ApiUtil.createUserWithAdminClient;
|
|
||||||
import static org.keycloak.testsuite.admin.ApiUtil.resetUserPassword;
|
|
||||||
|
|
||||||
public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
|
|
||||||
|
@ -128,17 +132,6 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
return identityProviderRepresentation;
|
return identityProviderRepresentation;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitForPage(String title) {
|
|
||||||
long startAt = System.currentTimeMillis();
|
|
||||||
|
|
||||||
while (!driver.getTitle().toLowerCase().contains(title)
|
|
||||||
&& System.currentTimeMillis() - startAt < 200) {
|
|
||||||
try {
|
|
||||||
Thread.sleep(5);
|
|
||||||
} catch (InterruptedException ignore) {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void logInAsUserInIDP() {
|
public void logInAsUserInIDP() {
|
||||||
driver.navigate().to(getAccountUrl(consumerRealmName()));
|
driver.navigate().to(getAccountUrl(consumerRealmName()));
|
||||||
|
@ -146,9 +139,7 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
log.debug("Clicking social " + getIDPAlias());
|
log.debug("Clicking social " + getIDPAlias());
|
||||||
accountLoginPage.clickSocial(getIDPAlias());
|
accountLoginPage.clickSocial(getIDPAlias());
|
||||||
|
|
||||||
if (!driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/")) {
|
waitForPage("log in to");
|
||||||
log.debug("Not on provider realm page, url: " + driver.getCurrentUrl());
|
|
||||||
}
|
|
||||||
|
|
||||||
Assert.assertTrue("Driver should be on the provider realm page right now",
|
Assert.assertTrue("Driver should be on the provider realm page right now",
|
||||||
driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));
|
driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));
|
||||||
|
@ -166,9 +157,11 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
updateAccountInformationPage.updateAccountInformation("Firstname", "Lastname");
|
updateAccountInformationPage.updateAccountInformation("Firstname", "Lastname");
|
||||||
|
|
||||||
UsersResource consumerUsers = adminClient.realm(consumerRealmName()).users();
|
UsersResource consumerUsers = adminClient.realm(consumerRealmName()).users();
|
||||||
Assert.assertTrue("There must be at least one user", consumerUsers.count() > 0);
|
|
||||||
|
|
||||||
List<UserRepresentation> users = consumerUsers.search("", 0, 5);
|
int userCount = consumerUsers.count();
|
||||||
|
Assert.assertTrue("There must be at least one user", userCount > 0);
|
||||||
|
|
||||||
|
List<UserRepresentation> users = consumerUsers.search("", 0, userCount);
|
||||||
|
|
||||||
boolean isUserFound = false;
|
boolean isUserFound = false;
|
||||||
for (UserRepresentation user : users) {
|
for (UserRepresentation user : users) {
|
||||||
|
@ -195,11 +188,12 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
log.debug("Clicking social " + getIDPAlias());
|
log.debug("Clicking social " + getIDPAlias());
|
||||||
accountLoginPage.clickSocial(getIDPAlias());
|
accountLoginPage.clickSocial(getIDPAlias());
|
||||||
|
|
||||||
|
waitForPage("log in to");
|
||||||
|
|
||||||
Assert.assertTrue("Driver should be on the provider realm page right now", driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));
|
Assert.assertTrue("Driver should be on the provider realm page right now", driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));
|
||||||
|
|
||||||
accountLoginPage.login(getUserLogin(), getUserPassword());
|
accountLoginPage.login(getUserLogin(), getUserPassword());
|
||||||
|
|
||||||
System.out.println(driver.getPageSource());
|
|
||||||
assertEquals(accountPage.buildUri().toASCIIString().replace("master", "consumer") + "/", driver.getCurrentUrl());
|
assertEquals(accountPage.buildUri().toASCIIString().replace("master", "consumer") + "/", driver.getCurrentUrl());
|
||||||
|
|
||||||
assertEquals(userCount, adminClient.realm(consumerRealmName()).users().count());
|
assertEquals(userCount, adminClient.realm(consumerRealmName()).users().count());
|
||||||
|
@ -219,18 +213,40 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
driver.navigate().to(getAuthRoot()
|
driver.navigate().to(getAuthRoot()
|
||||||
+ "/auth/realms/" + providerRealmName()
|
+ "/auth/realms/" + providerRealmName()
|
||||||
+ "/protocol/" + "openid-connect"
|
+ "/protocol/" + "openid-connect"
|
||||||
+ "/logout");
|
+ "/logout?redirect_uri=" + encodeUrl(getAccountUrl(providerRealmName())));
|
||||||
|
|
||||||
driver.navigate().to(getAccountUrl(consumerRealmName()));
|
driver.navigate().to(getAccountUrl(consumerRealmName()));
|
||||||
|
|
||||||
|
try {
|
||||||
|
waitForPage("log in to");
|
||||||
|
} catch (TimeoutException e) {
|
||||||
|
log.debug(driver.getTitle());
|
||||||
|
log.debug(driver.getPageSource());
|
||||||
|
Assert.fail("Timeout while waiting for login page");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
try {
|
||||||
|
waitForElementEnabled("login");
|
||||||
|
} catch (TimeoutException e) {
|
||||||
|
Assert.fail("Timeout while waiting for login element enabled");
|
||||||
|
}
|
||||||
|
|
||||||
accountLoginPage.login(getUserLogin(), "invalid");
|
accountLoginPage.login(getUserLogin(), "invalid");
|
||||||
accountLoginPage.login(getUserLogin(), "invalid");
|
}
|
||||||
accountLoginPage.login(getUserLogin(), "invalid");
|
|
||||||
|
|
||||||
assertEquals("Invalid username or password.", accountLoginPage.getError());
|
assertEquals("Invalid username or password.", accountLoginPage.getError());
|
||||||
|
|
||||||
accountLoginPage.clickSocial(getIDPAlias());
|
accountLoginPage.clickSocial(getIDPAlias());
|
||||||
|
|
||||||
|
try {
|
||||||
|
waitForPage("log in to");
|
||||||
|
} catch (TimeoutException e) {
|
||||||
|
log.debug(driver.getTitle());
|
||||||
|
log.debug(driver.getPageSource());
|
||||||
|
Assert.fail("Timeout while waiting for login page");
|
||||||
|
}
|
||||||
|
|
||||||
Assert.assertTrue("Driver should be on the provider realm page right now", driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));
|
Assert.assertTrue("Driver should be on the provider realm page right now", driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));
|
||||||
|
|
||||||
accountLoginPage.login(getUserLogin(), getUserPassword());
|
accountLoginPage.login(getUserLogin(), getUserPassword());
|
||||||
|
@ -238,24 +254,17 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
assertEquals("Account is disabled, contact admin.", errorPage.getError());
|
assertEquals("Account is disabled, contact admin.", errorPage.getError());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void testSingleLogout() {
|
private void testSingleLogout() {
|
||||||
log.debug("Testing single log out");
|
log.debug("Testing single log out");
|
||||||
|
|
||||||
driver.navigate().to(getAccountUrl(providerRealmName()));
|
driver.navigate().to(getAccountUrl(providerRealmName()));
|
||||||
|
|
||||||
Assert.assertTrue("Should be logged in the account page", driver.getTitle().endsWith("Account Management"));
|
Assert.assertTrue("Should be logged in the account page", driver.getTitle().endsWith("Account Management"));
|
||||||
|
|
||||||
String encodedAccount;
|
|
||||||
try {
|
|
||||||
encodedAccount = URLEncoder.encode(getAccountUrl(providerRealmName()), "UTF-8");
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
encodedAccount = getAccountUrl(providerRealmName());
|
|
||||||
}
|
|
||||||
|
|
||||||
driver.navigate().to(getAuthRoot()
|
driver.navigate().to(getAuthRoot()
|
||||||
+ "/auth/realms/" + providerRealmName()
|
+ "/auth/realms/" + providerRealmName()
|
||||||
+ "/protocol/" + "openid-connect"
|
+ "/protocol/" + "openid-connect"
|
||||||
+ "/logout?redirect_uri=" + encodedAccount);
|
+ "/logout?redirect_uri=" + encodeUrl(getAccountUrl(providerRealmName())));
|
||||||
|
|
||||||
waitForPage("log in to " + providerRealmName());
|
waitForPage("log in to " + providerRealmName());
|
||||||
|
|
||||||
|
@ -274,4 +283,45 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
|
||||||
private String getAccountPasswordUrl(String realmName) {
|
private String getAccountPasswordUrl(String realmName) {
|
||||||
return getAuthRoot() + "/auth/realms/" + realmName + "/account/password";
|
return getAuthRoot() + "/auth/realms/" + realmName + "/account/password";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void waitForPage(final String title) {
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, 5);
|
||||||
|
|
||||||
|
ExpectedCondition<Boolean> condition = new ExpectedCondition<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean apply(WebDriver input) {
|
||||||
|
return input.getTitle().toLowerCase().contains(title);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
wait.until(condition);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void waitForElementEnabled(final String elementName) {
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, 5);
|
||||||
|
|
||||||
|
ExpectedCondition<Boolean> condition = new ExpectedCondition<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean apply(WebDriver input) {
|
||||||
|
List<WebElement> elements = input.findElements(By.name(elementName));
|
||||||
|
if (elements.size() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return elements.get(0).isEnabled();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
wait.until(condition);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String encodeUrl(String url) {
|
||||||
|
String result;
|
||||||
|
try {
|
||||||
|
result = URLEncoder.encode(url, "UTF-8");
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
result = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package org.keycloak.testsuite.broker;
|
package org.keycloak.testsuite.broker;
|
||||||
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.keycloak.representations.idm.ClientRepresentation;
|
import org.keycloak.representations.idm.ClientRepresentation;
|
||||||
import org.keycloak.representations.idm.IdentityProviderRepresentation;
|
import org.keycloak.representations.idm.IdentityProviderRepresentation;
|
||||||
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
|
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
|
||||||
|
@ -13,7 +12,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import static org.keycloak.testsuite.broker.BrokerTestConstants.*;
|
import static org.keycloak.testsuite.broker.BrokerTestConstants.*;
|
||||||
|
|
||||||
@Ignore
|
|
||||||
public class KcSamlBrokerTest extends AbstractBrokerTest {
|
public class KcSamlBrokerTest extends AbstractBrokerTest {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package org.keycloak.testsuite.broker;
|
package org.keycloak.testsuite.broker;
|
||||||
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.keycloak.representations.idm.ClientRepresentation;
|
import org.keycloak.representations.idm.ClientRepresentation;
|
||||||
import org.keycloak.representations.idm.IdentityProviderRepresentation;
|
import org.keycloak.representations.idm.IdentityProviderRepresentation;
|
||||||
import org.keycloak.representations.idm.RealmRepresentation;
|
import org.keycloak.representations.idm.RealmRepresentation;
|
||||||
|
@ -11,7 +10,6 @@ import java.util.Map;
|
||||||
|
|
||||||
import static org.keycloak.testsuite.broker.BrokerTestConstants.*;
|
import static org.keycloak.testsuite.broker.BrokerTestConstants.*;
|
||||||
|
|
||||||
@Ignore
|
|
||||||
public class KcSamlSignedBrokerTest extends KcSamlBrokerTest {
|
public class KcSamlSignedBrokerTest extends KcSamlBrokerTest {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue