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();
