You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/01/25 22:14:03 UTC

wicket git commit: WICKET-6310 Once invalidated the Session will be invalidated on every detach

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 <mg...@apache.org>
Authored: Wed Jan 25 23:12:18 2017 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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));
+
+	}
+}