Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x d118063ec -> 36198d9e9


WICKET-6062 MockHttpSession should renew its id after invalidation


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/36198d9e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/36198d9e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/36198d9e

Branch: refs/heads/wicket-7.x
Commit: 36198d9e9586f4c0d5204d6e06188196dff83106
Parents: 00bde76
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Mon Jan 4 13:01:24 2016 +0100
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Mon Jan 4 13:08:32 2016 +0100

----------------------------------------------------------------------
 .../java/org/apache/wicket/Application.java     |  3 ++-
 .../main/java/org/apache/wicket/Session.java    |  1 +
 .../protocol/http/mock/MockHttpSession.java     | 10 ++++++--
 .../wicket/util/tester/WicketTesterTest.java    | 25 ++++++++++++++++++++
 4 files changed, 36 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/36198d9e/wicket-core/src/main/java/org/apache/wicket/Application.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java 
b/wicket-core/src/main/java/org/apache/wicket/Application.java
index d23bb84..5506e77 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Application.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Application.java
@@ -873,7 +873,8 @@ public abstract class Application implements 
UnboundListener, IEventSink
         */
        public final Application setSessionStoreProvider(final 
IProvider<ISessionStore> sessionStoreProvider)
        {
-               this.sessionStoreProvider = sessionStoreProvider;
+               this.sessionStoreProvider = Args.notNull(sessionStoreProvider, 
"sessionStoreProvider");
+               this.sessionStore = null;
                return this;
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/36198d9e/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 5084cc4..f194b98 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Session.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Session.java
@@ -492,6 +492,7 @@ public abstract class Session implements IClusterable, 
IEventSink
                {
                        
sessionStore.invalidate(RequestCycle.get().getRequest());
                        sessionStore = null;
+                       id = null;
                }
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/36198d9e/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpSession.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpSession.java
 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpSession.java
index d64387c..dc92f1d 100755
--- 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpSession.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpSession.java
@@ -42,7 +42,7 @@ public class MockHttpSession implements HttpSession, 
Serializable
 
        private final long creationTime = System.currentTimeMillis();
 
-       private final String id = UUID.randomUUID().toString().replace(':', 
'_').replace('-', '_');
+       private String id = generateSessionId();
 
        private long lastAccessedTime = 0;
 
@@ -187,6 +187,7 @@ public class MockHttpSession implements HttpSession, 
Serializable
        public void invalidate()
        {
                attributes.clear();
+               id = generateSessionId();
        }
 
        /**
@@ -296,4 +297,9 @@ public class MockHttpSession implements HttpSession, 
Serializable
        {
                this.temporary = temporary;
        }
-}
\ No newline at end of file
+
+       private static String generateSessionId()
+       {
+               return UUID.randomUUID().toString().replace(':', 
'_').replace('-', '_');
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/36198d9e/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java 
b/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
index 2948005..b046b87 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
@@ -62,6 +62,9 @@ import org.apache.wicket.request.resource.IResource;
 import 
org.apache.wicket.request.resource.PackageResource.PackageResourceBlockedException;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.resource.DummyPage;
+import org.apache.wicket.session.HttpSessionStore;
+import org.apache.wicket.session.ISessionStore;
+import org.apache.wicket.util.IProvider;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.tester.DummyHomePage.TestLink;
 import org.apache.wicket.util.tester.MockPageParameterPage.MockInnerClassPage;
@@ -1316,4 +1319,26 @@ public class WicketTesterTest extends WicketTestCase
 
                
tester.assertComponentOnAjaxResponse(label.getPageRelativePath());
        }
+
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-6062
+        */
+       @Test
+       public void renewSessionIdAfterInvalidation() {
+               tester.getApplication().setSessionStoreProvider(new 
IProvider<ISessionStore>()
+               {
+                       @Override
+                       public ISessionStore get()
+                       {
+                               return new HttpSessionStore();
+                       }
+               });
+               tester.getSession().bind();
+               String firstId = tester.getSession().getId();
+
+               tester.getSession().invalidateNow();
+
+               String secondId = tester.getSession().getId();
+               assertNotEquals(firstId, secondId);
+       }
 }

Reply via email to