This is an automated email from the ASF dual-hosted git repository. svenmeier pushed a commit to branch WICKET-6558-prevent-lock-after-detach in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/WICKET-6558-prevent-lock-after-detach by this push: new 0de0d38 WICKET-6558 error message 0de0d38 is described below commit 0de0d38965fbdfc7bc0d10465c9dc6474c8ecc96 Author: Sven Meier <svenme...@apache.org> AuthorDate: Mon Aug 19 11:58:43 2019 +0200 WICKET-6558 error message --- .../src/main/java/org/apache/wicket/Session.java | 2 +- .../wicket/protocol/http/WebSessionTest.java | 37 +++++++++++++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) 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 3080b2b..2376267 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Session.java +++ b/wicket-core/src/main/java/org/apache/wicket/Session.java @@ -925,7 +925,7 @@ public abstract class Session implements IClusterable, IEventSink, IMetadataCont public final IPageManager getPageManager() { if (Boolean.TRUE.equals(RequestCycle.get().getMetaData(PAGES_UNLOCKED))) { - throw new WicketRuntimeException("pages have already been unlocked - synchronized access is no longer possible"); + throw new WicketRuntimeException("The request has been processed. Access to pages is no longer allowed"); } IPageManager manager = Application.get().internalGetPageManager(); diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebSessionTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebSessionTest.java index c775d19..2eb05a7 100644 --- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebSessionTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WebSessionTest.java @@ -19,10 +19,12 @@ package org.apache.wicket.protocol.http; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.fail; import java.util.Locale; import org.apache.wicket.Session; +import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.mock.MockApplication; import org.apache.wicket.mock.MockWebRequest; import org.apache.wicket.protocol.http.mock.MockHttpSession; @@ -54,23 +56,48 @@ class WebSessionTest WebSession session = new WebSession(request); assertEquals(locale, session.getLocale()); } - + @Test public void changeSessionId() throws Exception { WicketTester tester = new WicketTester(new MockApplication()); MockHttpSession httpSession = (MockHttpSession)tester.getRequest().getSession(); Session session = tester.getSession(); - + httpSession.setTemporary(false); session.bind(); - + String oldId = session.getId(); assertNotNull(oldId); - + session.changeSessionId(); String newId = session.getId(); - + assertNotEquals(oldId, newId); } + + /** + * WICKET-6558 + */ + @Test + public void lockAfterDetach() throws Exception + { + WicketTester tester = new WicketTester(new MockApplication()); + + Session session = tester.getSession(); + + session.getPageManager(); + + session.detach(); + + try + { + session.getPageManager(); + fail(); + } + catch (WicketRuntimeException ex) + { + assertEquals("The request has been processed. Access to pages is no longer allowed", ex.getMessage()); + } + } }