diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java index 9db1b10148..d218cc876f 100755 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/adapter/AdapterTest.java @@ -25,9 +25,15 @@ import org.junit.Assert; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; +import org.keycloak.models.ApplicationModel; +import org.keycloak.models.Constants; import org.keycloak.models.RealmModel; +import org.keycloak.models.UserModel; +import org.keycloak.representations.AccessToken; +import org.keycloak.representations.adapters.action.SessionStats; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.services.managers.RealmManager; +import org.keycloak.services.managers.TokenManager; import org.keycloak.testsuite.OAuthClient; import org.keycloak.testsuite.pages.LoginPage; import org.keycloak.testsuite.rule.AbstractKeycloakRule; @@ -36,8 +42,15 @@ import org.keycloak.testsuite.rule.WebRule; import org.keycloak.testutils.KeycloakServer; import org.openqa.selenium.WebDriver; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.UriBuilder; import java.net.URL; import java.security.PublicKey; +import java.util.Map; /** * Tests Undertow Adapter @@ -46,6 +59,7 @@ import java.security.PublicKey; */ public class AdapterTest { + public static final String LOGIN_URL = "http://localhost:8081/auth/rest/realms/demo/tokens/login"; public static PublicKey realmPublicKey; @ClassRule public static AbstractKeycloakRule keycloakRule = new AbstractKeycloakRule(){ @@ -62,10 +76,17 @@ public class AdapterTest { deployApplication("customer-db", "/customer-db", CustomerDatabaseServlet.class, url.getPath(), "user"); url = getClass().getResource("/adapter-test/product-keycloak.json"); deployApplication("product-portal", "/product-portal", ProductServlet.class, url.getPath(), "user"); + ApplicationModel adminConsole = adminRealm.getApplicationByName(Constants.ADMIN_CONSOLE_APPLICATION); + TokenManager tm = new TokenManager(); + UserModel admin = adminRealm.getUser("admin"); + AccessToken token = tm.createClientAccessToken(null, adminRealm, adminConsole, admin); + adminToken = tm.encodeToken(adminRealm, token); } }; + public static String adminToken; + @Rule public WebRule webRule = new WebRule(this); @@ -79,11 +100,11 @@ public class AdapterTest { protected LoginPage loginPage; @Test - public void testLogin() throws Exception { + public void testLoginSSOAndLogout() throws Exception { // test login to customer-portal which does a bearer request to customer-db driver.navigate().to("http://localhost:8081/customer-portal"); System.out.println("Current url: " + driver.getCurrentUrl()); - Assert.assertTrue(driver.getCurrentUrl().startsWith("http://localhost:8081/auth")); + Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL)); loginPage.login("bburke@redhat.com", "password"); System.out.println("Current url: " + driver.getCurrentUrl()); Assert.assertEquals(driver.getCurrentUrl(), "http://localhost:8081/customer-portal"); @@ -98,7 +119,33 @@ public class AdapterTest { System.out.println(pageSource); Assert.assertTrue(pageSource.contains("iPhone") && pageSource.contains("iPad")); + // View stats + Client client = ClientBuilder.newClient(); + WebTarget adminTarget = client.target("http://localhost:8081/auth/rest/admin/realms/demo"); + Map stats = adminTarget.path("session-stats").request() + .header(HttpHeaders.AUTHORIZATION, "Bearer " + adminToken) + .get(new GenericType>(){}); + SessionStats custStats = stats.get("customer-portal"); + Assert.assertNotNull(custStats); + Assert.assertEquals(1, custStats.getActiveSessions()); + SessionStats prodStats = stats.get("product-portal"); + Assert.assertNotNull(prodStats); + Assert.assertEquals(1, prodStats.getActiveSessions()); + + client.close(); + + + // test logout + + String logoutUri = UriBuilder.fromUri("http://localhost:8081/auth/rest/realms/demo/tokens/logout") + .queryParam("redirect_uri", "http://localhost:8081/customer-portal").build().toString(); + driver.navigate().to(logoutUri); + Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL)); + driver.navigate().to("http://localhost:8081/product-portal"); + Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL)); + driver.navigate().to("http://localhost:8081/customer-portal"); + Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL)); }