Repository: wicket Updated Branches: refs/heads/master f380ea700 -> 7716586c7
WICKET-6310 Once invalidated the Session will be invalidated on every detach Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7716586c Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7716586c Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7716586c Branch: refs/heads/master Commit: 7716586c713f0645868c023d1340554860526ca2 Parents: f380ea7 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Wed Jan 25 23:12:18 2017 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Wed Jan 25 23:12:18 2017 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/wicket/Session.java | 9 +++ .../protocol/http/SessionDestroyTest.java | 63 ++++++++++++++++++++ 2 files changed, 72 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/7716586c/wicket-core/src/main/java/org/apache/wicket/Session.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Session.java b/wicket-core/src/main/java/org/apache/wicket/Session.java index 70ceda1..2ccbec8 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Session.java +++ b/wicket-core/src/main/java/org/apache/wicket/Session.java @@ -493,6 +493,15 @@ public abstract class Session implements IClusterable, IEventSink sessionStore.invalidate(RequestCycle.get().getRequest()); sessionStore = null; id = null; + sessionInvalidated = false; + clientInfo = null; + dirty = false; + metaData = null; + feedbackMessages.clear(); + setStyle(null); + pageId.set(0); + sequence.set(0); + temporarySessionAttributes = null; } } http://git-wip-us.apache.org/repos/asf/wicket/blob/7716586c/wicket-core/src/test/java/org/apache/wicket/protocol/http/SessionDestroyTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/SessionDestroyTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/SessionDestroyTest.java new file mode 100644 index 0000000..3a3fac4 --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/SessionDestroyTest.java @@ -0,0 +1,63 @@ +package org.apache.wicket.protocol.http; + +import static org.hamcrest.Matchers.is; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import java.util.Locale; + +import org.apache.wicket.mock.MockWebRequest; +import org.apache.wicket.request.Url; +import org.apache.wicket.util.tester.WicketTestCase; +import org.junit.Assert; +import org.junit.Test; + +public class SessionDestroyTest extends WicketTestCase +{ + /** + * https://issues.apache.org/jira/browse/WICKET-6310 + */ + @Test + public void whenSessionIsDestroyed_thenItShouldResetItState() + { + final Locale locale = Locale.ENGLISH; + MockWebRequest request = new MockWebRequest(Url.parse("/")) + { + @Override + public Locale getLocale() + { + return locale; + } + }; + + final WebSession session = spy(new WebSession(request)); + + // initially #invalidateNow() (and destroy()) are not called + verify(session, never()).invalidateNow(); + assertThat(session.isSessionInvalidated(), is(false)); + + // schedule invalidation + session.invalidate(); + + // the invalidation will happen on #detach(), so #destroy() is still not called + verify(session, never()).invalidateNow(); + assertThat(session.isSessionInvalidated(), is(true)); + + session.detach(); + + // the session has been detached so #destroy() has been called and 'sessionInvalidated' is reset + verify(session, times(1)).invalidateNow(); + assertThat(session.isSessionInvalidated(), is(false)); + + // no matter how many times #detach() is called #destroy() should not be called + session.detach(); + verify(session, times(1)).invalidateNow(); + session.detach(); + session.detach(); + verify(session, times(1)).invalidateNow(); + assertThat(session.isSessionInvalidated(), is(false)); + + } +}
