keycloak-aplcache

Test for KEYCLOAK-741

10/9/2014 7:24:50 AM

Details

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 851a450..5443a7e 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
@@ -32,6 +32,7 @@ import org.keycloak.adapters.AdapterConstants;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.Constants;
 import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.PasswordPolicy;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.UserModel;
 import org.keycloak.models.UserSessionModel;
@@ -45,6 +46,7 @@ import org.keycloak.services.resources.admin.AdminRoot;
 import org.keycloak.testsuite.OAuthClient;
 import org.keycloak.testsuite.pages.LoginPage;
 import org.keycloak.testsuite.rule.AbstractKeycloakRule;
+import org.keycloak.testsuite.rule.KeycloakRule;
 import org.keycloak.testsuite.rule.WebResource;
 import org.keycloak.testsuite.rule.WebRule;
 import org.keycloak.testutils.KeycloakServer;
@@ -64,6 +66,7 @@ import java.net.URI;
 import java.net.URL;
 import java.security.PublicKey;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Tests Undertow Adapter
@@ -422,6 +425,11 @@ public class AdapterTest {
         Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL));
     }
 
+    /**
+     * KEYCLOAK-732
+     *
+     * @throws Throwable
+     */
     @Test
     public void testSingleSessionInvalidated() throws Throwable {
         AdapterTest browser1 = this;
@@ -457,6 +465,57 @@ public class AdapterTest {
         }
     }
 
+    /**
+     * KEYCLOAK-741
+     */
+    @Test
+    public void testSessionInvalidatedAfterFailedRefresh() throws Throwable {
+        final AtomicInteger origTokenLifespan = new AtomicInteger();
+
+        // Delete adminUrl and set short accessTokenLifespan
+        keycloakRule.update(new KeycloakRule.KeycloakSetup() {
+            @Override
+            public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel demoRealm) {
+                ApplicationModel sessionPortal = demoRealm.getApplicationByName("session-portal");
+                sessionPortal.setManagementUrl(null);
+
+                origTokenLifespan.set(demoRealm.getAccessTokenLifespan());
+                demoRealm.setAccessTokenLifespan(1);
+            }
+        }, "demo");
+
+        // Login
+        loginAndCheckSession(driver, loginPage);
+
+        // Logout
+        String logoutUri = OpenIDConnectService.logoutUrl(UriBuilder.fromUri("http://localhost:8081/auth"))
+                .queryParam(OAuth2Constants.REDIRECT_URI, "http://localhost:8081/session-portal").build("demo").toString();
+        driver.navigate().to(logoutUri);
+
+        // Wait until accessToken is expired
+        Thread.sleep(2000);
+
+        // Assert that http session was invalidated
+        driver.navigate().to("http://localhost:8081/session-portal");
+        Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL));
+        loginPage.login("bburke@redhat.com", "password");
+        Assert.assertEquals(driver.getCurrentUrl(), "http://localhost:8081/session-portal");
+        String pageSource = driver.getPageSource();
+        Assert.assertTrue(pageSource.contains("Counter=1"));
+
+        keycloakRule.update(new KeycloakRule.KeycloakSetup() {
+
+            @Override
+            public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel demoRealm) {
+                ApplicationModel sessionPortal = demoRealm.getApplicationByName("session-portal");
+                sessionPortal.setManagementUrl("http://localhost:8081/session-portal");
+
+                demoRealm.setAccessTokenLifespan(origTokenLifespan.get());
+            }
+
+        }, "demo");
+    }
+
     private static void loginAndCheckSession(WebDriver driver, LoginPage loginPage) {
         driver.navigate().to("http://localhost:8081/session-portal");
         Assert.assertTrue(driver.getCurrentUrl().startsWith(LOGIN_URL));
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
index b0fd095..7b616f3 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/AbstractKeycloakRule.java
@@ -83,6 +83,25 @@ public abstract class AbstractKeycloakRule extends ExternalResource {
         }
     }
 
+    public void update(KeycloakRule.KeycloakSetup configurer, String realmId) {
+        KeycloakSession session = server.getSessionFactory().create();
+        session.getTransaction().begin();
+
+        try {
+            RealmManager manager = new RealmManager(session);
+
+            RealmModel adminstrationRealm = manager.getRealm(Config.getAdminRealm());
+            RealmModel appRealm = manager.getRealm(realmId);
+
+            configurer.session = session;
+            configurer.config(manager, adminstrationRealm, appRealm);
+
+            session.getTransaction().commit();
+        } finally {
+            session.close();
+        }
+    }
+
     protected void configure(KeycloakSession session, RealmManager manager, RealmModel adminRealm) {
 
     }
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/KeycloakRule.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/KeycloakRule.java
index 481b1d8..74df6c8 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/KeycloakRule.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/rule/KeycloakRule.java
@@ -81,22 +81,7 @@ public class KeycloakRule extends AbstractKeycloakRule {
     }
 
     public void update(KeycloakSetup configurer) {
-        KeycloakSession session = server.getSessionFactory().create();
-        session.getTransaction().begin();
-
-        try {
-            RealmManager manager = new RealmManager(session);
-
-            RealmModel adminstrationRealm = manager.getRealm(Config.getAdminRealm());
-            RealmModel appRealm = manager.getRealm("test");
-
-            configurer.session = session;
-            configurer.config(manager, adminstrationRealm, appRealm);
-
-            session.getTransaction().commit();
-        } finally {
-            session.close();
-        }
+        update(configurer, "test");
     }
 
 
diff --git a/testsuite/integration/src/test/resources/adapter-test/demorealm.json b/testsuite/integration/src/test/resources/adapter-test/demorealm.json
index abc8e40..fc6ebae 100755
--- a/testsuite/integration/src/test/resources/adapter-test/demorealm.json
+++ b/testsuite/integration/src/test/resources/adapter-test/demorealm.json
@@ -1,4 +1,5 @@
 {
+    "id": "demo",
     "realm": "demo",
     "enabled": true,
     "accessTokenLifespan": 3000,