package org.keycloak.testsuite.cluster;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Cookie;
import static org.junit.Assert.assertEquals;
import static org.keycloak.testsuite.util.WaitUtils.pause;
/**
*
* @author tkyjovsk
*/
public class SessionFailoverClusterTest extends AbstractFailoverClusterTest {
@Before
public void beforeSessionFailover() {
log.info("Initial node failure");
failure();
pause(REBALANCE_WAIT);
}
@Test
public void sessionFailover() {
boolean expectSuccessfulFailover = SESSION_CACHE_OWNERS >= 2;
log.info("SESSION FAILOVER TEST: cluster size = " + getClusterSize() + ", session-cache owners = " + SESSION_CACHE_OWNERS
+ " --> Testsing for " + (expectSuccessfulFailover ? "" : "UN") + "SUCCESSFUL session failover.");
assertEquals(2, getClusterSize());
sessionFailover(expectSuccessfulFailover);
}
protected void sessionFailover(boolean expectSuccessfulFailover) {
// LOGIN
Cookie sessionCookie = login(accountPage);
switchFailedNode();
// VERIFY
if (expectSuccessfulFailover) {
verifyLoggedIn(accountPage, sessionCookie);
} else {
verifyLoggedOut(accountPage);
// FIXME test fails if I put re-login here
}
switchFailedNode();
// VERIFY again
if (expectSuccessfulFailover) {
verifyLoggedIn(accountPage, sessionCookie);
} else {
verifyLoggedOut(accountPage);
login(accountPage);
}
// LOGOUT
logout(accountPage);
verifyLoggedOut(accountPage);
switchFailedNode();
// VERIFY
verifyLoggedOut(accountPage);
}
}