Repository: tapestry-5
Updated Branches:
  refs/heads/master 227bb4ed1 -> c4c83a8bf


TAP5-2537: avoid an IllegalStateException when trying to get an attribute from 
an invalidates session


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/c4c83a8b
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/c4c83a8b
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/c4c83a8b

Branch: refs/heads/master
Commit: c4c83a8bfe86a1d1ebe055f83a992933f7c6e5e4
Parents: 227bb4e
Author: Jochen Kemnade <[email protected]>
Authored: Mon Mar 7 13:57:07 2016 +0100
Committer: Jochen Kemnade <[email protected]>
Committed: Mon Mar 7 13:58:15 2016 +0100

----------------------------------------------------------------------
 ...sionApplicationStatePersistenceStrategy.java |  2 +-
 ...ApplicationStatePersistenceStrategyTest.java | 25 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c4c83a8b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
index 5d7e881..bd33e35 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategy.java
@@ -77,6 +77,6 @@ public class SessionApplicationStatePersistenceStrategy 
implements ApplicationSt
     {
         Session session = request.getSession(false);
 
-        return session != null && session.getAttribute(buildKey(ssoClass)) != 
null;
+        return session != null && !session.isInvalidated() && 
session.getAttribute(buildKey(ssoClass)) != null;
     }
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c4c83a8b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
index b0edad4..594931e 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/SessionApplicationStatePersistenceStrategyTest.java
@@ -22,6 +22,8 @@ import org.apache.tapestry5.services.Request;
 import org.apache.tapestry5.services.Session;
 import org.testng.annotations.Test;
 
+import spock.lang.Issue;
+
 public class SessionApplicationStatePersistenceStrategyTest extends 
InternalBaseTestCase
 {
     @SuppressWarnings("unchecked")
@@ -67,6 +69,27 @@ public class SessionApplicationStatePersistenceStrategyTest 
extends InternalBase
 
     @SuppressWarnings("unchecked")
     @Test
+    @Issue("TAP5-2537")
+    public void check_exists_with_invalid_session()
+    {
+        Request request = mockRequest();
+        Session session = mockSession();
+        Class asoClass = ReadOnlyBean.class;
+
+        train_getSession(request, false, session);
+        train_isInvalidated(session, true);
+
+        replay();
+
+        ApplicationStatePersistenceStrategy strategy = new 
SessionApplicationStatePersistenceStrategy(request);
+
+        assertFalse(strategy.exists(asoClass));
+
+        verify();
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
     public void get_aso_needs_to_be_created()
     {
         Request request = mockRequest();
@@ -78,6 +101,7 @@ public class SessionApplicationStatePersistenceStrategyTest 
extends InternalBase
 
         // First for exists()
         train_getSession(request, false, session);
+        train_isInvalidated(session, false);
         train_getAttribute(session, key, null);
 
         // Second for get()
@@ -93,6 +117,7 @@ public class SessionApplicationStatePersistenceStrategyTest 
extends InternalBase
 
         // Then for exists() after
         train_getSession(request, false, session);
+        train_isInvalidated(session, false);
         train_getAttribute(session, key, aso);
 
         replay();

Reply via email to