http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java index a1b960d..c1d7737 100644 --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/TestMapperContext.java @@ -20,19 +20,20 @@ import org.apache.wicket.MockPage; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.core.request.handler.PageProvider; import org.apache.wicket.markup.MarkupParser; -import org.apache.wicket.page.IPageManagerContext; -import org.apache.wicket.page.PageStoreManager; -import org.apache.wicket.pageStore.DefaultPageStore; -import org.apache.wicket.pageStore.IDataStore; -import org.apache.wicket.pageStore.IPageStore; -import org.apache.wicket.pageStore.memory.DummyPageManagerContext; +import org.apache.wicket.mock.MockPageStore; +import org.apache.wicket.page.IPageManager; +import org.apache.wicket.page.PageManager; +import org.apache.wicket.pageStore.DummyPageContext; +import org.apache.wicket.pageStore.IPageContext; +import org.apache.wicket.pageStore.InMemoryPageStore; +import org.apache.wicket.pageStore.RequestPageStore; +import org.apache.wicket.pageStore.InSessionPageStore; import org.apache.wicket.request.component.IRequestablePage; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.resource.ResourceReference; import org.apache.wicket.request.resource.ResourceReference.Key; import org.apache.wicket.request.resource.ResourceReferenceRegistry; import org.apache.wicket.serialize.java.JavaSerializer; -import org.apache.wicket.versioning.InMemoryPageStore; /** * Simple {@link IMapperContext} implementation for testing purposes @@ -43,10 +44,10 @@ public class TestMapperContext implements IMapperContext { private static final String APP_NAME = "test_app"; private static int count; - IDataStore dataStore; - IPageStore pageStore; - IPageManagerContext pageManagerContext; - PageStoreManager pageManager; + + InSessionPageStore pageStore; + DummyPageContext pageContext; + IPageManager pageManager; private String appName; private boolean createMockPageIfInstanceNotFound = true; @@ -56,10 +57,18 @@ public class TestMapperContext implements IMapperContext public TestMapperContext() { appName = APP_NAME + count++; - dataStore = new InMemoryPageStore(); - pageStore = new DefaultPageStore(new JavaSerializer(appName), dataStore, 4); - pageManagerContext = new DummyPageManagerContext(); - pageManager = new PageStoreManager(appName, pageStore, pageManagerContext); + + pageContext = new DummyPageContext(); + + InMemoryPageStore inMemoryPageStore = new InMemoryPageStore(appName, Integer.MAX_VALUE); + pageStore = new InSessionPageStore(inMemoryPageStore, new JavaSerializer(appName), 4); + pageManager = new PageManager(new RequestPageStore(pageStore)) { + @Override + protected IPageContext createPageContext() + { + return pageContext; + } + }; } /** @@ -67,17 +76,17 @@ public class TestMapperContext implements IMapperContext */ public void cleanSessionCache() { - getPageManager().getContext().setRequestData(null); + pageContext.clearRequest(); MockPage other = new MockPage(); other.setPageId(Integer.MAX_VALUE); - getPageManager().touchPage(other); - getPageManager().commitRequest(); + getPageManager().addPage(other); + pageManager.detach(); } /** * @return pageManager */ - public PageStoreManager getPageManager() + public IPageManager getPageManager() { return pageManager; }
http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/DontStoreNotRenderedPageTestCase.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/DontStoreNotRenderedPageTestCase.java b/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/DontStoreNotRenderedPageTestCase.java index fe1875b..f49a384 100644 --- a/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/DontStoreNotRenderedPageTestCase.java +++ b/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/DontStoreNotRenderedPageTestCase.java @@ -22,8 +22,6 @@ import org.apache.wicket.application.IComponentInstantiationListener; import org.apache.wicket.behavior.Behavior; import org.apache.wicket.mock.MockPageManager; import org.apache.wicket.page.IManageablePage; -import org.apache.wicket.page.IPageManager; -import org.apache.wicket.page.IPageManagerContext; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.util.tester.WicketTestCase; import org.apache.wicket.util.tester.WicketTester; @@ -55,21 +53,16 @@ public abstract class DontStoreNotRenderedPageTestCase extends WicketTestCase @Override protected IPageManagerProvider newTestPageManagerProvider() { - return new IPageManagerProvider() - { - @Override - public IPageManager apply(IPageManagerContext context) + return () -> { + return new MockPageManager() { - return new MockPageManager() + @Override + public void addPage(IManageablePage page) { - @Override - public void touchPage(IManageablePage page) - { - Assert.assertFalse("PageB should not be touched!", page instanceof PageB); - super.touchPage(page); - } - }; - } + Assert.assertFalse("PageB should not be touched!", page instanceof PageB); + super.addPage(page); + } + }; }; } }; http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java index 39586e0..6ec0066 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java @@ -34,7 +34,7 @@ import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.mock.MockPageManager; import org.apache.wicket.page.IManageablePage; import org.apache.wicket.page.IPageManager; -import org.apache.wicket.page.IPageManagerContext; +import org.apache.wicket.pageStore.IPageContext; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.StringResourceStream; @@ -117,15 +117,15 @@ public class TransparentWebMarkupContainerTest extends WicketTestCase return new IPageManagerProvider() { @Override - public IPageManager apply(IPageManagerContext context) + public IPageManager get() { return new MockPageManager() { @Override - public void touchPage(IManageablePage page) + public void addPage(IManageablePage page) { page = WicketObjects.cloneObject(page); - super.touchPage(page); + super.addPage(page); } }; } http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java b/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java index e2053df..eeb9ba3 100644 --- a/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/page/PageAccessSynchronizerTest.java @@ -324,7 +324,7 @@ public class PageAccessSynchronizerTest extends Assert int pageId = 1; IManageablePage page = new MockPage(pageId); - synchronizedPageManager.touchPage(page); + synchronizedPageManager.addPage(page); synchronizedPageManager.getPage(pageId); PageLock pageLock2 = locks.get(Integer.valueOf(pageId)); assertNotNull(pageLock2); http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java b/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java index 23fe264..cb39d94 100644 --- a/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/page/PersistentPageManagerTest.java @@ -19,19 +19,19 @@ package org.apache.wicket.page; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.ObjectInputStream; import java.io.Serializable; +import java.util.concurrent.atomic.AtomicReference; import org.apache.wicket.Application; +import org.apache.wicket.MetaDataKey; import org.apache.wicket.ThreadContext; -import org.apache.wicket.pageStore.DefaultPageStore; -import org.apache.wicket.pageStore.IDataStore; +import org.apache.wicket.pageStore.DummyPageContext; +import org.apache.wicket.pageStore.IPageContext; import org.apache.wicket.pageStore.IPageStore; -import org.apache.wicket.pageStore.memory.DummyPageManagerContext; +import org.apache.wicket.pageStore.InSessionPageStore; +import org.apache.wicket.pageStore.NoopPageStore; import org.apache.wicket.serialize.java.JavaSerializer; -import org.apache.wicket.versioning.InMemoryPageStore; import org.junit.Assert; import org.junit.Test; @@ -58,44 +58,43 @@ public class PersistentPageManagerTest ThreadContext.detach(); // create IPageManager (with IPageStore) and store a page instance - IPageManager pageManager = newPersistentPageManager(APP_NAME); + final AtomicReference<Object> sessionData = new AtomicReference<Object>(null); + + IPageManager pageManager = createPageManager(APP_NAME, sessionData); + + // add a page TestPage toSerializePage = new TestPage(); - pageManager.touchPage(toSerializePage); - pageManager.commitRequest(); + pageManager.addPage(toSerializePage); + pageManager.detach(); // get the stored SessionEntry - Serializable sessionEntry = pageManager.getContext().getSessionAttribute(null); + assertNotNull(sessionData.get()); // destroy the manager and the store pageManager.destroy(); // simulate persisting of the http sessions initiated by the web container - byte[] serializedSessionEntry = new JavaSerializer(APP_NAME).serialize(sessionEntry); + byte[] serializedSessionData = new JavaSerializer(APP_NAME).serialize(sessionData.get()); assertNotNull("Wicket needs to be able to serialize the session entry", - serializedSessionEntry); - - // simulate loading of the persisted http session initiated by the web container - // when starting an application - ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream( - serializedSessionEntry)); + serializedSessionData); // WicketFilter is not initialized so there is no Application available yet Assert.assertFalse("Worker thread should be unaware of Wicket application", Application.exists()); - assertEquals(APP_NAME, in.readObject()); + // simulate loading of the persisted http session initiated by the web container + // when starting an application + sessionData.set(new JavaSerializer(APP_NAME).deserialize(serializedSessionData)); // without available IPageStore the read SessionEntry holds // the IManageablePage itself, not SerializedPage - Serializable loadedSessionEntry = (Serializable)in.readObject(); assertNotNull( "Wicket needs to be able to deserialize the session entry regardless the application availability", - loadedSessionEntry); + sessionData.get()); // provide new IPageStore which will read IManageablePage's or SerializedPage's // from the SessionEntry's - IPageManager newPageManager = newPersistentPageManager(APP_NAME); - newPageManager.getContext().setSessionAttribute(null, loadedSessionEntry); + IPageManager newPageManager = createPageManager(APP_NAME, sessionData); TestPage deserializedPage = (TestPage)newPageManager.getPage(toSerializePage.getPageId()); assertNotNull(deserializedPage); @@ -104,12 +103,34 @@ public class PersistentPageManagerTest newPageManager.destroy(); } - private PageStoreManager newPersistentPageManager(String appName) + /** + * Create a manager that stores session data in the given atomic reference. + */ + private IPageManager createPageManager(String appName, AtomicReference<Object> sessionData) { - IDataStore dataStore = new InMemoryPageStore(); - IPageStore pageStore = new DefaultPageStore(new JavaSerializer(appName), dataStore, 4); - IPageManagerContext pageManagerContext = new DummyPageManagerContext(); - return new PageStoreManager(appName, pageStore, pageManagerContext); + IPageStore store = new InSessionPageStore(new NoopPageStore(), new JavaSerializer(APP_NAME), Integer.MAX_VALUE); + + return new PageManager(store) { + @Override + protected IPageContext createPageContext() + { + return new DummyPageContext() { + @Override + public <T extends Serializable> void setSessionData(MetaDataKey<T> key, T value) + { + super.setSessionData(key, value); + + sessionData.set(value); + } + + @Override + public <T extends Serializable> T getSessionData(MetaDataKey<T> key) + { + return (T)sessionData.get(); + } + }; + } + }; } private static class TestPage implements IManageablePage http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/page/persistent/disk/PageWindowManagerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/page/persistent/disk/PageWindowManagerTest.java b/wicket-core/src/test/java/org/apache/wicket/page/persistent/disk/PageWindowManagerTest.java deleted file mode 100644 index 1270800..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/page/persistent/disk/PageWindowManagerTest.java +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.page.persistent.disk; - -import java.security.SecureRandom; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import org.apache.wicket.pageStore.PageWindowManager; -import org.apache.wicket.pageStore.PageWindowManager.PageWindow; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Matej Knopp - */ -public class PageWindowManagerTest extends Assert -{ - /** - * https://issues.apache.org/jira/browse/WICKET-4572 - */ - @Test - public void removeObsoleteIndices() - { - int page0id = 0, - page1id = 1, - page2id = 2; - int maxSize = 10; - - PageWindowManager manager = new PageWindowManager(maxSize); - - // Add few pages. - // All of them fully occupy the max space in the pageWindowManager. - // So adding N+1st page removes the Nth page. - manager.createPageWindow(page0id, maxSize); - PageWindow page0Window = manager.getPageWindow(page0id); - assertWindow(page0Window, page0id, page0Window.getFilePartOffset(), page0Window.getFilePartSize()); - - manager.createPageWindow(page1id, maxSize); - PageWindow page1Window = manager.getPageWindow(page1id); - assertWindow(page1Window, page1id, page1Window.getFilePartOffset(), page1Window.getFilePartSize()); - - // Try to get a page which has been lost with the adding of page1 - assertNull("Page0 must be lost when Page1 has been added.", manager.getPageWindow(page0id)); - - manager.createPageWindow(page2id, maxSize); - PageWindow page2Window = manager.getPageWindow(page2id); - assertWindow(page2Window, page2id, page2Window.getFilePartOffset(), page2Window.getFilePartSize()); - - // Try to get a page which has been lost with the adding of page2 - assertNull("Page1 must be lost when Page2 has been added.", manager.getPageWindow(page1id)); - } - - /** - * - */ - @Test - public void addRemove() - { - PageWindowManager manager = new PageWindowManager(300); - PageWindow window; - - window = manager.createPageWindow(1, 50); - assertWindow(window, 1, 0, 50); - - window = manager.createPageWindow(2, 40); - assertWindow(window, 2, 50, 40); - - assertEquals(manager.getTotalSize(), 90); - - window = manager.createPageWindow(2, 30); - assertWindow(window, 2, 50, 30); - assertEquals(manager.getTotalSize(), 80); - - manager.removePage(2); - assertEquals(manager.getTotalSize(), 50); - - window = manager.createPageWindow(3, 30); - assertWindow(window, 3, 50, 30); - assertEquals(manager.getTotalSize(), 80); - } - - /** - * - */ - @Test - public void pageWindowCycle() - { - PageWindowManager manager = new PageWindowManager(100); - PageWindow window; - - window = manager.createPageWindow(1, 30); - - window = manager.createPageWindow(2, 30); - - window = manager.createPageWindow(3, 30); - - assertWindow(window, 3, 60, 30); - - window = manager.createPageWindow(4, 30); - - assertWindow(window, 4, 90, 30); - - // should start at the beginging - - window = manager.createPageWindow(5, 20); - - assertWindow(window, 5, 0, 20); - - assertNull(manager.getPageWindow(1)); - - window = manager.getPageWindow(2); - assertWindow(window, 2, 30, 30); - - window = manager.createPageWindow(6, 10); - - assertWindow(window, 6, 20, 10); - - window = manager.getPageWindow(2); - assertWindow(window, 2, 30, 30); - - window = manager.createPageWindow(6, 30); - assertWindow(window, 6, 20, 30); - - assertNull(manager.getPageWindow(2)); - assertNotNull(manager.getPageWindow(3)); - - window = manager.createPageWindow(6, 60); - assertWindow(window, 6, 20, 60); - - assertNull(manager.getPageWindow(3)); - - window = manager.createPageWindow(7, 20); - assertWindow(window, 7, 80, 20); - - assertNotNull(manager.getPageWindow(7)); - - // should start at the beginning again - - window = manager.createPageWindow(8, 10); - assertWindow(window, 8, 0, 10); - - assertNull(manager.getPageWindow(5)); - assertNotNull(manager.getPageWindow(6)); - - window = manager.createPageWindow(9, 20); - assertWindow(window, 9, 10, 20); - - assertNull(manager.getPageWindow(6)); - assertNotNull(manager.getPageWindow(7)); - - window = manager.createPageWindow(10, 20); - assertWindow(window, 10, 30, 20); - - assertNull(manager.getPageWindow(6)); - assertNotNull(manager.getPageWindow(7)); - - // make sure when replacing a page that's not last the old "instance" is - // not valid anymore - - manager.createPageWindow(8, 10); - - window = manager.getPageWindow(8); - assertWindow(window, 8, 50, 10); - } - - - private void assertWindow(PageWindow window, int pageId, int filePartOffset, int filePartSize) - { - assertTrue(window.getPageId() == pageId && window.getFilePartOffset() == filePartOffset && - window.getFilePartSize() == filePartSize); - } - - /** how many operations to execute */ - private static final int EXECUTIONS = 10000; - - /** used to wait the executions */ - private static final CountDownLatch LATCH = new CountDownLatch(EXECUTIONS); - - private final PageWindowManager pageWindowManager = new PageWindowManager(1000L); - - /** the execution types */ - private final Runnable[] TASKS = new Runnable[] - { - new CreatePageWindowTask(pageWindowManager), - new GetPageWindowTask(pageWindowManager), - new RemovePageInSessionTask(pageWindowManager) - }; - - private static final SecureRandom RND = new SecureRandom(); - - /** - * Executes random mutator and accessor operations on {@link org.apache.wicket.pageStore.AsynchronousDataStore} validating - * that the used data structures can be used simultaneously. - * - * @throws Exception - */ - @Test - public void randomOperations() throws Exception - { - ExecutorService executorService = Executors.newFixedThreadPool(50); - - for (int i = 0; i < EXECUTIONS; i++) - { - Runnable task = TASKS[RND.nextInt(TASKS.length)]; - executorService.submit(task); - } - LATCH.await(); - executorService.shutdown(); - } - - private static abstract class AbstractTask implements Runnable - { - /** the ids for the stored/removed pages */ - private static final int[] PAGE_IDS = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; - - protected final PageWindowManager pageWindowManager; - - private AbstractTask(PageWindowManager pageWindowManager) - { - this.pageWindowManager = pageWindowManager; - } - - protected abstract void r(); - - @Override - public void run() - { - try - { - r(); - } - finally - { - LATCH.countDown(); - } - } - - protected int getPageId() - { - return PAGE_IDS[RND.nextInt(PAGE_IDS.length)]; - } - } - - private static class CreatePageWindowTask extends AbstractTask - { - private CreatePageWindowTask(PageWindowManager pageWindowManager) - { - super(pageWindowManager); - } - - @Override - public void r() - { - pageWindowManager.createPageWindow(getPageId(), 1000); - } - } - - private static class GetPageWindowTask extends AbstractTask - { - private GetPageWindowTask(PageWindowManager pageWindowManager) - { - super(pageWindowManager); - } - - @Override - public void r() - { - pageWindowManager.getPageWindow(getPageId()); - } - } - - private static class RemovePageInSessionTask extends AbstractTask - { - private RemovePageInSessionTask(PageWindowManager pageWindowManager) - { - super(pageWindowManager); - } - - @Override - public void r() - { - pageWindowManager.removePage(getPageId()); - } - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java index 0ab35fd..d662b5a 100644 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/AbstractPageStoreTest.java @@ -29,17 +29,16 @@ public abstract class AbstractPageStoreTest extends Assert protected final String sessionId = "1234567890"; protected final int pageId = 123; protected final ISerializer serializer = new JavaSerializer(getClass().getName()); - protected final IDataStore dataStore = new NoopDataStore(); protected int maxEntries = 1; protected IPageStore pageStore = null; @Before public void before() { - pageStore = createPageStore(serializer, dataStore, maxEntries); + pageStore = createPageStore(serializer, maxEntries); } - protected abstract IPageStore createPageStore(ISerializer serializer, IDataStore dataStore, int maxEntries); + protected abstract IPageStore createPageStore(ISerializer serializer, int maxEntries); @After public void after() @@ -57,9 +56,11 @@ public abstract class AbstractPageStoreTest extends Assert @Test public void storePage() { - pageStore.storePage(sessionId, new MockPage(pageId)); + IPageContext context = new DummyPageContext(sessionId); + + pageStore.addPage(context, new MockPage(pageId)); - assertNotNull(pageStore.getPage(sessionId, pageId)); + assertNotNull(pageStore.getPage(context, pageId)); } /** @@ -68,46 +69,51 @@ public abstract class AbstractPageStoreTest extends Assert @Test public void storePage2() { + IPageContext context = new DummyPageContext(sessionId); int maxEntries = 10; - pageStore = createPageStore(serializer, dataStore, maxEntries); + pageStore = createPageStore(serializer, maxEntries); - pageStore.storePage(sessionId, new MockPage(pageId)); - pageStore.storePage(sessionId, new MockPage(pageId)); + pageStore.addPage(context, new MockPage(pageId)); + pageStore.addPage(context, new MockPage(pageId)); - assertNotNull(pageStore.getPage(sessionId, pageId)); + assertNotNull(pageStore.getPage(context, pageId)); - pageStore.removePage(sessionId, pageId); + pageStore.removePage(context, new MockPage(pageId)); - assertNull(pageStore.getPage(sessionId, pageId)); + assertNull(pageStore.getPage(context, pageId)); } @Test public void removePage() { - pageStore.storePage(sessionId, new MockPage(pageId)); + IPageContext context = new DummyPageContext(sessionId); + + pageStore.addPage(context, new MockPage(pageId)); - assertNotNull(pageStore.getPage(sessionId, pageId)); + assertNotNull(pageStore.getPage(context, pageId)); - pageStore.removePage(sessionId, pageId); + pageStore.removePage(context, new MockPage(pageId)); - assertNull(pageStore.getPage(sessionId, pageId)); + assertNull(pageStore.getPage(context, pageId)); } /** - * Verify that at most {@code maxEntries} per session can be put in the cache + * Verify that at most {@code maxEntries} per session can be put in the store */ @Test public void maxSizeSameSession() { - pageStore.storePage(sessionId, new MockPage(pageId)); + IPageContext context = new DummyPageContext(sessionId); + + pageStore.addPage(context, new MockPage(pageId)); - assertNotNull(pageStore.getPage(sessionId, pageId)); + assertNotNull(pageStore.getPage(context, pageId)); int pageId2 = 234; - pageStore.storePage(sessionId, new MockPage(pageId2)); - assertNull(pageStore.getPage(sessionId, pageId)); - assertNotNull(pageStore.getPage(sessionId, pageId2)); + pageStore.addPage(context, new MockPage(pageId2)); + assertNull(pageStore.getPage(context, pageId)); + assertNotNull(pageStore.getPage(context, pageId2)); } /** @@ -117,15 +123,16 @@ public abstract class AbstractPageStoreTest extends Assert @Test public void maxSizeDifferentSessions() { - String sessionId2 = "0987654321"; + IPageContext context = new DummyPageContext(sessionId); + IPageContext context2 = new DummyPageContext("0987654321"); - pageStore.storePage(sessionId, new MockPage(pageId)); + pageStore.addPage(context, new MockPage(pageId)); - assertNotNull(pageStore.getPage(sessionId, pageId)); + assertNotNull(pageStore.getPage(context, pageId)); - pageStore.storePage(sessionId2, new MockPage(pageId)); + pageStore.addPage(context2, new MockPage(pageId)); - assertNull(pageStore.getPage(sessionId, pageId)); - assertNotNull(pageStore.getPage(sessionId2, pageId)); + assertNotNull(pageStore.getPage(context, pageId)); + assertNotNull(pageStore.getPage(context2, pageId)); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java index 7f5b2c1..7c0b0a7 100644 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousDataStoreTest.java @@ -21,7 +21,8 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.wicket.versioning.InMemoryPageStore; +import org.apache.wicket.MockPage; +import org.apache.wicket.page.IManageablePage; import org.junit.Test; /** @@ -29,17 +30,13 @@ import org.junit.Test; */ public class AsynchronousDataStoreTest { -// private static final IDataStore WRAPPED_DATA_STORE = new DiskDataStore("asyncDataStoreApp", new StoreSettings(null).getFileStoreFolder(), Bytes.kilobytes(1)); - private static final IDataStore WRAPPED_DATA_STORE = new InMemoryPageStore(); + private static final IPageStore WRAPPED_PAGE_STORE = new InMemoryPageStore("test", Integer.MAX_VALUE); /** the data store under test */ - private static final IDataStore DATA_STORE = new AsynchronousDataStore(WRAPPED_DATA_STORE, 100); - - /** the data for each page */ - private static final byte[] DATA = new byte[] { 1, 2, 3 }; + private static final IPageStore ASYNC_PAGE_STORE = new AsynchronousPageStore(WRAPPED_PAGE_STORE, 100); /** the used jsessionid's */ - private static final String[] SESSIONS = new String[] { "s1", "s2", "s3" }; + private static final IPageContext[] CONTEXT = new IPageContext[] { createContext("s1"), createContext("s2"), createContext("s3")}; /** the ids for the stored/removed pages */ private static final int[] PAGE_IDS = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; @@ -74,7 +71,12 @@ public class AsynchronousDataStoreTest } LATCH.await(); executorService.shutdown(); - DATA_STORE.destroy(); + ASYNC_PAGE_STORE.destroy(); + } + + private static IPageContext createContext(String sessionId) + { + return new DummyPageContext(sessionId); } private static abstract class AbstractTask implements Runnable @@ -94,15 +96,20 @@ public class AsynchronousDataStoreTest } } - protected String getSessionId() + protected IPageContext getPageContext() { - return SESSIONS[RND.nextInt(SESSIONS.length)]; + return CONTEXT[RND.nextInt(CONTEXT.length)]; } protected int getPageId() { return PAGE_IDS[RND.nextInt(PAGE_IDS.length)]; } + + protected IManageablePage getPage() + { + return new MockPage(getPageId()); + } } private static class StoreTask extends AbstractTask @@ -110,7 +117,7 @@ public class AsynchronousDataStoreTest @Override public void r() { - DATA_STORE.storeData(getSessionId(), getPageId(), DATA); + ASYNC_PAGE_STORE.addPage(getPageContext(), getPage()); } } @@ -119,7 +126,7 @@ public class AsynchronousDataStoreTest @Override public void r() { - DATA_STORE.getData(getSessionId(), getPageId()); + ASYNC_PAGE_STORE.getPage(getPageContext(), getPageId()); } } @@ -128,7 +135,7 @@ public class AsynchronousDataStoreTest @Override public void r() { - DATA_STORE.removeData(getSessionId(), getPageId()); + ASYNC_PAGE_STORE.removePage(getPageContext(), getPage()); } } @@ -137,7 +144,7 @@ public class AsynchronousDataStoreTest @Override public void r() { - DATA_STORE.removeData(getSessionId()); + ASYNC_PAGE_STORE.removeAllPages(getPageContext()); } } } http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java index 4b17f69..1752e50 100644 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/AsynchronousPageStoreTest.java @@ -17,21 +17,19 @@ package org.apache.wicket.pageStore; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; -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 static org.junit.Assert.fail; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; -import com.google.common.base.Stopwatch; import org.apache.commons.lang3.RandomUtils; +import org.apache.wicket.mock.MockPageStore; import org.apache.wicket.page.IManageablePage; import org.apache.wicket.serialize.ISerializer; import org.apache.wicket.serialize.java.DeflatedJavaSerializer; @@ -43,6 +41,8 @@ import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Stopwatch; + /** * AsynchronousPageStoreTest @@ -155,31 +155,50 @@ public class AsynchronousPageStoreTest @Test public void storeReturnsSameInstanceOnClosePageRequest() throws InterruptedException { + final Semaphore semaphore = new Semaphore(0); + + IPageStore store = new NoopPageStore() { + + @Override + public synchronized void addPage(IPageContext context, IManageablePage page) + { + try + { + semaphore.acquire(); + } + catch (InterruptedException e) + { + } + + super.addPage(context, page); + } + + @Override + public IManageablePage getPage(IPageContext context, int id) + { + fail(); + return null; + } + }; - ISerializer serializer = new DeflatedJavaSerializer("applicationKey"); - // ISerializer serializer = new DummySerializer(); - - IDataStore dataStore = new DiskDataStore("applicationName", new File("./target"), - Bytes.bytes(10000l)); - - // IPageStore pageStore = new DummyPageStore(new File("target/store")); - IPageStore pageStore = spy(new DefaultPageStore(serializer, dataStore, 0)); - - IPageStore asyncPageStore = new AsynchronousPageStore(pageStore, 100); + IPageStore asyncPageStore = new AsynchronousPageStore(store, 100); int pageId = 0; + String sessionId = "sessionId"; + + IPageContext context = new DummyPageContext(sessionId); DummyPage page = new DummyPage(pageId, 1000, 1000, sessionId); - asyncPageStore.storePage(sessionId, page); - - Thread.sleep(500); + asyncPageStore.addPage(context, page); - IManageablePage pageBack = asyncPageStore.getPage(sessionId, pageId); + IManageablePage pageBack = asyncPageStore.getPage(context, pageId); - verify(pageStore, never()).getPage(sessionId, pageId); + semaphore.release(); assertEquals(page, pageBack); + + store.destroy(); } /** @@ -191,31 +210,55 @@ public class AsynchronousPageStoreTest @Test public void storeReturnsRestoredInstanceOnDistantPageRequest() throws InterruptedException { + final Semaphore semaphore = new Semaphore(0); + + final AtomicBoolean got = new AtomicBoolean(false); + + IPageStore store = new MockPageStore() { + + @Override + public synchronized void addPage(IPageContext context, IManageablePage page) + { + super.addPage(context, page); + + semaphore.release(); + } + + @Override + public IManageablePage getPage(IPageContext context, int id) + { + got.set(true); + + return super.getPage(context, id); + } + }; - ISerializer serializer = new DeflatedJavaSerializer("applicationKey"); - // ISerializer serializer = new DummySerializer(); - - IDataStore dataStore = new DiskDataStore("applicationName", new File("./target"), - Bytes.bytes(10000l)); - - // IPageStore pageStore = new DummyPageStore(new File("target/store")); - IPageStore pageStore = spy(new DefaultPageStore(serializer, dataStore, 0)); - - IPageStore asyncPageStore = new AsynchronousPageStore(pageStore, 100); + IPageStore asyncPageStore = new AsynchronousPageStore(store, 100); int pageId = 0; + String sessionId = "sessionId"; + + IPageContext context = new DummyPageContext(sessionId); DummyPage page = new DummyPage(pageId, 1000, 1000, sessionId); - asyncPageStore.storePage(sessionId, page); + asyncPageStore.addPage(context, page); - Thread.sleep(1500); + try + { + semaphore.acquire(); + } + catch (InterruptedException e) + { + } - IManageablePage pageBack = asyncPageStore.getPage(sessionId, pageId); + IManageablePage pageBack = asyncPageStore.getPage(context, pageId); - verify(pageStore, times(1)).getPage(sessionId, pageId); + semaphore.release(); - assertNotEquals(page, pageBack); + assertEquals(page, pageBack); + + store.destroy(); } /** @@ -315,18 +358,13 @@ public class AsynchronousPageStoreTest // ISerializer serializer = new DummySerializer(); ISerializer serializer = new DeflatedJavaSerializer("applicationKey"); - IDataStore dataStore = new DiskDataStore("applicationName", new File("./target"), - Bytes.bytes(10000l)); - - // IPageStore pageStore = new DummyPageStore(new File("target/store")) { - IPageStore pageStore = new DefaultPageStore(serializer, dataStore, 0) - { - + IPageStore pageStore = new DiskPageStore("applicationName", serializer, new File("./target"), + Bytes.bytes(10000l)) { @Override - public void storePage(String sessionId, IManageablePage page) + public void addPage(IPageContext context, IManageablePage page) { - super.storePage(sessionId, page); + super.addPage(context, page); lock.countDown(); } @@ -341,20 +379,21 @@ public class AsynchronousPageStoreTest for (int i = 1; i <= sessions; i++) { String sessionId = String.valueOf(i); + IPageContext context = new DummyPageContext(sessionId); Metrics metrics = new Metrics(); stopwatch.reset(); DummyPage page = new DummyPage(pageId, around(writeMillis), around(readMillis), sessionId); stopwatch.start(); - asyncPageStore.storePage(sessionId, page); + asyncPageStore.addPage(context, page); metrics.storedPage = page; metrics.storingMillis = stopwatch.elapsed(TimeUnit.MILLISECONDS); stopwatch.reset(); stopwatch.start(); metrics.restoredPage = DummyPage.class - .cast(asyncPageStore.getPage(sessionId, pageId)); + .cast(asyncPageStore.getPage(context, pageId)); metrics.restoringMillis = stopwatch.elapsed(TimeUnit.MILLISECONDS); results.add(metrics); @@ -363,6 +402,8 @@ public class AsynchronousPageStoreTest lock.await(pages * sessions * (writeMillis + readMillis), TimeUnit.MILLISECONDS); + pageStore.destroy(); + return results; } http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/DefaultPageStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/DefaultPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/DefaultPageStoreTest.java deleted file mode 100644 index 2ffa376..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/DefaultPageStoreTest.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore; - -import org.apache.wicket.serialize.ISerializer; - -/** - * Tests for DefaultPageStore - */ -public class DefaultPageStoreTest extends AbstractPageStoreTest -{ - @Override - protected IPageStore createPageStore(ISerializer serializer, IDataStore dataStore, int maxEntries) - { - return new DefaultPageStore(serializer, dataStore, maxEntries); - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java index e69ead6..933870e 100644 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/DiskDataStoreTest.java @@ -16,6 +16,7 @@ */ package org.apache.wicket.pageStore; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -26,6 +27,8 @@ import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import org.apache.wicket.page.IManageablePage; +import org.apache.wicket.serialize.java.JavaSerializer; import org.apache.wicket.settings.StoreSettings; import org.apache.wicket.util.SlowTests; import org.apache.wicket.util.lang.Bytes; @@ -36,6 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** + * Test for {@link DiskDataStore}. */ @Category(SlowTests.class) public class DiskDataStoreTest extends Assert @@ -59,20 +63,33 @@ public class DiskDataStoreTest extends Assert private static final int SLEEP_MAX = 10; private static final int THREAD_COUNT = 20; private static final int READ_MODULO = 100; + + private static final ConcurrentHashMap<String, IPageContext> contexts = new ConcurrentHashMap<>(); + + private static IPageContext getContext(String sessionId) { + IPageContext context = new DummyPageContext(); + + IPageContext existing = contexts.putIfAbsent(sessionId, context); + return existing != null ? existing : context; + } - private static class File + private static class TaskPage implements IManageablePage { private final String sessionId; - private final int id; + + private int id; - private byte first; - private byte last; - private int length; + private byte[] data; - public File(String sessionId, int id) + public TaskPage(String sessionId, int id) { this.sessionId = sessionId; + this.id = id; + + int length = FILE_SIZE_MIN + random.nextInt(FILE_SIZE_MAX - FILE_SIZE_MIN); + data = new byte[length]; + random.nextBytes(data); } public String getSessionId() @@ -80,51 +97,54 @@ public class DiskDataStoreTest extends Assert return sessionId; } - public int getId() + public boolean check(TaskPage other) { - return id; - } - - public byte[] generateData() - { - length = FILE_SIZE_MIN + random.nextInt(FILE_SIZE_MAX - FILE_SIZE_MIN); - byte data[] = new byte[length]; - random.nextBytes(data); - first = data[0]; - last = data[data.length - 1]; - return data; - } - - public boolean checkData(byte data[]) - { - if (data == null) - { - log.error("data[] should never be null"); - return false; - } - if (data.length != length) + if (other.data.length != other.data.length) { log.error("data.length != length"); return false; } - if (first != data[0]) + if (other.id != other.id) { - log.error("first != data[0]"); + log.error("data.id != id"); return false; } - if (last != data[data.length - 1]) + if (other.sessionId != other.sessionId) { - log.error("last != data[data.length - 1]"); + log.error("data.sessionId != sessionId"); return false; } return true; } + + @Override + public boolean isPageStateless() + { + return false; + } + + @Override + public int getPageId() + { + return id; + } + + @Override + public void detach() + { + } + + @Override + public boolean setFreezePageId(boolean freeze) + { + return false; + } } private final Map<String, AtomicInteger> sessionCounter = new ConcurrentHashMap<String, AtomicInteger>(); - private final ConcurrentLinkedQueue<File> filesToSave = new ConcurrentLinkedQueue<File>(); - private final ConcurrentLinkedQueue<File> filesToRead1 = new ConcurrentLinkedQueue<File>(); - private final ConcurrentLinkedQueue<File> filesToRead2 = new ConcurrentLinkedQueue<File>(); + private final ConcurrentLinkedQueue<TaskPage> pagesToSave = new ConcurrentLinkedQueue<TaskPage>(); + private final ConcurrentLinkedQueue<TaskPage> filesToRead1 = new ConcurrentLinkedQueue<TaskPage>(); + private final ConcurrentLinkedQueue<TaskPage> filesToRead2 = new ConcurrentLinkedQueue<TaskPage>(); private final AtomicInteger read1Count = new AtomicInteger(0); private final AtomicInteger read2Count = new AtomicInteger(0); @@ -164,15 +184,15 @@ public class DiskDataStoreTest extends Assert for (int i = 0; i < FILES_COUNT; ++i) { String session = randomSessionId(); - File file = new File(session, nextSessionId(session)); + TaskPage file = new TaskPage(session, nextSessionId(session)); long now = System.nanoTime(); - filesToSave.add(file); + pagesToSave.add(file); long duration = System.nanoTime() - now; saveTime.addAndGet((int)duration); } } - private IDataStore dataStore; + private IPageStore pageStore; /** * Stores RuntimeException into a field. @@ -205,21 +225,20 @@ public class DiskDataStoreTest extends Assert @Override protected void doRun() { - File file; + TaskPage page; - while ((file = filesToSave.poll()) != null || saveCount.get() < FILES_COUNT) + while ((page = pagesToSave.poll()) != null || saveCount.get() < FILES_COUNT) { - if (file != null) + if (page != null) { - byte data[] = file.generateData(); - dataStore.storeData(file.getSessionId(), file.getId(), data); + pageStore.addPage(getContext(page.getSessionId()), page); if (saveCount.get() % READ_MODULO == 0) { - filesToRead1.add(file); + filesToRead1.add(page); } saveCount.incrementAndGet(); - bytesWritten.addAndGet(data.length); + bytesWritten.addAndGet(page.data.length); } try @@ -242,20 +261,20 @@ public class DiskDataStoreTest extends Assert @Override protected void doRun() { - File file; - while ((file = filesToRead1.poll()) != null || !saveDone.get()) + TaskPage page; + while ((page = filesToRead1.poll()) != null || !saveDone.get()) { - if (file != null) + if (page != null) { - byte bytes[] = dataStore.getData(file.getSessionId(), file.getId()); - if (file.checkData(bytes) == false) + TaskPage other = (TaskPage)pageStore.getPage(getContext(page.getSessionId()), page.getPageId()); + if (page.check(other) == false) { failures.incrementAndGet(); log.error("Detected error number: " + failures.get()); } - filesToRead2.add(file); + filesToRead2.add(page); read1Count.incrementAndGet(); - bytesRead.addAndGet(bytes.length); + bytesRead.addAndGet(other.data.length); } try @@ -277,19 +296,19 @@ public class DiskDataStoreTest extends Assert @Override protected void doRun() { - File file; - while ((file = filesToRead2.poll()) != null || !read1Done.get()) + TaskPage page; + while ((page = filesToRead2.poll()) != null || !read1Done.get()) { - if (file != null) + if (page != null) { - byte bytes[] = dataStore.getData(file.getSessionId(), file.getId()); - if (file.checkData(bytes) == false) + TaskPage other = (TaskPage)pageStore.getPage(getContext(page.getSessionId()), page.getPageId()); + if (page.check(other) == false) { failures.incrementAndGet(); log.error("Detected error number: " + failures.get()); } read2Count.incrementAndGet(); - bytesRead.addAndGet(bytes.length); + bytesRead.addAndGet(other.data.length); } try @@ -356,7 +375,7 @@ public class DiskDataStoreTest extends Assert for (String s : sessionCounter.keySet()) { - dataStore.removeData(s); + pageStore.removeAllPages(getContext(s)); } } @@ -369,15 +388,15 @@ public class DiskDataStoreTest extends Assert generateFiles(); StoreSettings storeSettings = new StoreSettings(null); - java.io.File fileStoreFolder = storeSettings.getFileStoreFolder(); - - dataStore = new DiskDataStore("app1", fileStoreFolder, MAX_SIZE_PER_SESSION); + File fileStoreFolder = storeSettings.getFileStoreFolder(); int asynchronousQueueCapacity = storeSettings.getAsynchronousQueueCapacity(); - dataStore = new AsynchronousDataStore(dataStore, asynchronousQueueCapacity); + + pageStore = new DiskPageStore("app1", new JavaSerializer("app1"), fileStoreFolder, MAX_SIZE_PER_SESSION); + pageStore = new AsynchronousPageStore(pageStore, asynchronousQueueCapacity); doTestDataStore(); - dataStore.destroy(); + pageStore.destroy(); } /** @@ -391,7 +410,7 @@ public class DiskDataStoreTest extends Assert { StoreSettings storeSettings = new StoreSettings(null); java.io.File fileStoreFolder = storeSettings.getFileStoreFolder(); - DiskDataStore store = new DiskDataStore("sessionFolderName", fileStoreFolder, MAX_SIZE_PER_SESSION); + DiskPageStore store = new DiskPageStore("sessionFolderName", new JavaSerializer("sessionFolderName"), fileStoreFolder, MAX_SIZE_PER_SESSION); String sessionId = "abcdefg"; java.io.File sessionFolder = store.getSessionFolder(sessionId, true); @@ -401,7 +420,7 @@ public class DiskDataStoreTest extends Assert assertTrue(absolutePath.contains("1279")); assertTrue(absolutePath.contains("abcdefg")); - DiskDataStore.SessionEntry sessionEntry = new DiskDataStore.SessionEntry(store, sessionId); + DiskPageStore.DiskData sessionEntry = new DiskPageStore.DiskData(store, sessionId); sessionEntry.unbind(); // assert that the 'sessionId' folder and the parents two levels up are removed assertFalse(sessionFolder.getParentFile().getParentFile().exists()); http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/DummyPageContext.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/DummyPageContext.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/DummyPageContext.java new file mode 100644 index 0000000..0cd0b08 --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/DummyPageContext.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.pageStore; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import org.apache.wicket.MetaDataEntry; +import org.apache.wicket.MetaDataKey; +import org.apache.wicket.pageStore.IPageContext; + +/** + * Dummy implementation of a page context - suitable for a single session only. + */ +public class DummyPageContext implements IPageContext +{ + + final String sessionId; + + MetaDataEntry<?>[] requestData; + + MetaDataEntry<?>[] sessionData; + + Map<String, Object> sessionAttributes = new HashMap<>(); + + public DummyPageContext() + { + this("dummy_id"); + } + + public DummyPageContext(String sessionId) + { + this.sessionId = sessionId; + } + + @Override + public <T> void setRequestData(MetaDataKey<T> key, T value) + { + requestData = key.set(requestData, value); + } + + @Override + public <T> T getRequestData(MetaDataKey<T> key) + { + return key.get(requestData); + } + + @Override + public <T extends Serializable> void setSessionAttribute(String key, T value) + { + sessionAttributes.put(key, value); + } + + @SuppressWarnings("unchecked") + @Override + public <T extends Serializable> T getSessionAttribute(String key) + { + return (T)sessionAttributes.get(key); + } + + @Override + public <T extends Serializable> void setSessionData(MetaDataKey<T> key, T value) + { + sessionData = key.set(sessionData, value); + } + + @Override + public <T extends Serializable> T getSessionData(MetaDataKey<T> key) + { + return key.get(sessionData); + } + + @Override + public void bind() + { + } + + @Override + public String getSessionId() + { + return sessionId; + } + + public void clearRequest() + { + requestData = null; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/GroupingPageStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/GroupingPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/GroupingPageStoreTest.java new file mode 100644 index 0000000..b863074 --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/GroupingPageStoreTest.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.pageStore; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.Serializable; + +import org.apache.wicket.MetaDataKey; +import org.apache.wicket.MockPage; +import org.apache.wicket.mock.MockPageStore; +import org.apache.wicket.page.IManageablePage; +import org.junit.Test; + +/** + * Test for {@link GroupingPageStore}. + * + * @author svenmeier + */ +public class GroupingPageStoreTest +{ + + private static MetaDataKey<Serializable> KEY = new MetaDataKey<Serializable>() + { + }; + + private static Serializable VALUE = new Serializable() + { + }; + + @Test + public void test() + { + String sessionId = "foo"; + + IPageStore store = new MockPageStore() { + + public void addPage(IPageContext context, IManageablePage page) { + + context.setSessionAttribute("attribute", "value"); + context.setSessionData(KEY, VALUE); + + assertEquals(sessionId + "_" + group(page), context.getSessionId()); + + super.addPage(context, page); + } + + @Override + public void removeAllPages(IPageContext context) + { + assertEquals(sessionId + "_group0", context.getSessionId()); + + super.removeAllPages(context); + } + }; + + IPageStore groupingStore = new GroupingPageStore(store, 2) { + @Override + protected String getGroup(IManageablePage page) + { + return group(page); + } + }; + + DummyPageContext context = new DummyPageContext(sessionId) { + @Override + public <T extends Serializable> void setSessionData(MetaDataKey<T> key, T value) + { + assertFalse("session not set directly in session", value == VALUE); + + super.setSessionData(key, value); + } + + @Override + public <T extends Serializable> void setSessionAttribute(String key, T value) + { + assertTrue("key starts with group", key.startsWith("attribute_group")); + + super.setSessionAttribute(key, value); + } + }; + + groupingStore.addPage(context, new MockPage(0)); + groupingStore.addPage(context, new MockPage(1)); + groupingStore.addPage(context, new MockPage(10)); + groupingStore.addPage(context, new MockPage(11)); + groupingStore.addPage(context, new MockPage(2)); + groupingStore.addPage(context, new MockPage(21)); + + } + + protected String group(IManageablePage page) + { + return "group" + page.getPageId() / 10; + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java new file mode 100644 index 0000000..ab1dcec --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/InMemoryPageStoreTest.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.pageStore; + +import org.apache.wicket.serialize.ISerializer; + +/** + * Tests for {@link InMemoryPageStore} + */ +public class InMemoryPageStoreTest extends AbstractPageStoreTest +{ + @Override + protected IPageStore createPageStore(ISerializer serializer, int maxEntries) + { + return new InMemoryPageStore("test", maxEntries); + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java new file mode 100644 index 0000000..4fa2f4e --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/InSessionPageStoreTest.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.pageStore; + +import org.apache.wicket.serialize.ISerializer; + +/** + * Test for {@link InSessionPageStore}. + */ +public class InSessionPageStoreTest extends AbstractPageStoreTest +{ + @Override + protected IPageStore createPageStore(ISerializer serializer, int maxEntries) + { + return new InSessionPageStore(new NoopPageStore(), serializer, maxEntries); + } + +} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/NoopDataStore.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/NoopDataStore.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/NoopDataStore.java deleted file mode 100644 index 0cadaee..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/NoopDataStore.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore; - -/** - * An implementation of IDataStore that does nothing - */ -public class NoopDataStore implements IDataStore -{ - @Override - public byte[] getData(String sessionId, int id) - { - return null; - } - - @Override - public void removeData(String sessionId, int id) - { - } - - @Override - public void removeData(String sessionId) - { - } - - @Override - public void storeData(String sessionId, int id, byte[] data) - { - } - - @Override - public void destroy() - { - } - - @Override - public boolean isReplicated() - { - return false; - } - - @Override - public boolean canBeAsynchronous() - { - return false; - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/PerSessionPageStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/PerSessionPageStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/PerSessionPageStoreTest.java deleted file mode 100644 index 0cd4a2a..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/PerSessionPageStoreTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore; - -import org.apache.wicket.MockPage; -import org.apache.wicket.serialize.ISerializer; -import org.junit.Test; - -/** - * Tests for PerSessionPageStore - */ -public class PerSessionPageStoreTest extends AbstractPageStoreTest -{ - @Override - protected IPageStore createPageStore(ISerializer serializer, IDataStore dataStore, int maxEntries) - { - return new PerSessionPageStore(serializer, dataStore, maxEntries); - } - - /** - * Verify that it is OK to store more pages than {@code maxEntries} - * if they are in different sessions - */ - @Test - @Override - public void maxSizeDifferentSessions() - { - String sessionId2 = "0987654321"; - - pageStore.storePage(sessionId, new MockPage(pageId)); - - assertNotNull(pageStore.getPage(sessionId, pageId)); - - pageStore.storePage(sessionId2, new MockPage(pageId)); - - assertNotNull(pageStore.getPage(sessionId, pageId)); - assertNotNull(pageStore.getPage(sessionId2, pageId)); - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java new file mode 100644 index 0000000..57ce54d --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/pageStore/disk/PageWindowManagerTest.java @@ -0,0 +1,303 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.pageStore.disk; + +import java.security.SecureRandom; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.pageStore.disk.PageWindowManager.FileWindow; +import org.junit.Assert; +import org.junit.Test; + +/** + * Test for {@link PageWindowManager}. + * + * @author Matej Knopp + */ +public class PageWindowManagerTest extends Assert +{ + /** + * https://issues.apache.org/jira/browse/WICKET-4572 + */ + @Test + public void removeObsoleteIndices() + { + int page0id = 0, + page1id = 1, + page2id = 2; + int maxSize = 10; + + PageWindowManager manager = new PageWindowManager(maxSize); + + // Add few pages. + // All of them fully occupy the max space in the pageWindowManager. + // So adding N+1st page removes the Nth page. + manager.createPageWindow(page0id, WebPage.class, maxSize); + FileWindow page0Window = manager.getPageWindow(page0id); + assertWindow(page0Window, page0id, page0Window.getFilePartOffset(), page0Window.getFilePartSize()); + + manager.createPageWindow(page1id, WebPage.class, maxSize); + FileWindow page1Window = manager.getPageWindow(page1id); + assertWindow(page1Window, page1id, page1Window.getFilePartOffset(), page1Window.getFilePartSize()); + + // Try to get a page which has been lost with the adding of page1 + assertNull("Page0 must be lost when Page1 has been added.", manager.getPageWindow(page0id)); + + manager.createPageWindow(page2id, WebPage.class, maxSize); + FileWindow page2Window = manager.getPageWindow(page2id); + assertWindow(page2Window, page2id, page2Window.getFilePartOffset(), page2Window.getFilePartSize()); + + // Try to get a page which has been lost with the adding of page2 + assertNull("Page1 must be lost when Page2 has been added.", manager.getPageWindow(page1id)); + } + + /** + * + */ + @Test + public void addRemove() + { + PageWindowManager manager = new PageWindowManager(300); + FileWindow window; + + window = manager.createPageWindow(1, WebPage.class, 50); + assertWindow(window, 1, 0, 50); + + window = manager.createPageWindow(2, WebPage.class, 40); + assertWindow(window, 2, 50, 40); + + assertEquals(manager.getTotalSize(), 90); + + window = manager.createPageWindow(2, WebPage.class, 30); + assertWindow(window, 2, 50, 30); + assertEquals(manager.getTotalSize(), 80); + + manager.removePage(2); + assertEquals(manager.getTotalSize(), 50); + + window = manager.createPageWindow(3, WebPage.class, 30); + assertWindow(window, 3, 50, 30); + assertEquals(manager.getTotalSize(), 80); + } + + /** + * + */ + @Test + public void pageWindowCycle() + { + PageWindowManager manager = new PageWindowManager(100); + FileWindow window; + + window = manager.createPageWindow(1, WebPage.class, 30); + + window = manager.createPageWindow(2, WebPage.class, 30); + + window = manager.createPageWindow(3, WebPage.class, 30); + + assertWindow(window, 3, 60, 30); + + window = manager.createPageWindow(4, WebPage.class, 30); + + assertWindow(window, 4, 90, 30); + + // should start at the beginging + + window = manager.createPageWindow(5, WebPage.class, 20); + + assertWindow(window, 5, 0, 20); + + assertNull(manager.getPageWindow(1)); + + window = manager.getPageWindow(2); + assertWindow(window, 2, 30, 30); + + window = manager.createPageWindow(6, WebPage.class, 10); + + assertWindow(window, 6, 20, 10); + + window = manager.getPageWindow(2); + assertWindow(window, 2, 30, 30); + + window = manager.createPageWindow(6, WebPage.class, 30); + assertWindow(window, 6, 20, 30); + + assertNull(manager.getPageWindow(2)); + assertNotNull(manager.getPageWindow(3)); + + window = manager.createPageWindow(6, WebPage.class, 60); + assertWindow(window, 6, 20, 60); + + assertNull(manager.getPageWindow(3)); + + window = manager.createPageWindow(7, WebPage.class, 20); + assertWindow(window, 7, 80, 20); + + assertNotNull(manager.getPageWindow(7)); + + // should start at the beginning again + + window = manager.createPageWindow(8, WebPage.class, 10); + assertWindow(window, 8, 0, 10); + + assertNull(manager.getPageWindow(5)); + assertNotNull(manager.getPageWindow(6)); + + window = manager.createPageWindow(9, WebPage.class, 20); + assertWindow(window, 9, 10, 20); + + assertNull(manager.getPageWindow(6)); + assertNotNull(manager.getPageWindow(7)); + + window = manager.createPageWindow(10, WebPage.class, 20); + assertWindow(window, 10, 30, 20); + + assertNull(manager.getPageWindow(6)); + assertNotNull(manager.getPageWindow(7)); + + // make sure when replacing a page that's not last the old "instance" is + // not valid anymore + + manager.createPageWindow(8, WebPage.class, 10); + + window = manager.getPageWindow(8); + assertWindow(window, 8, 50, 10); + } + + + private void assertWindow(FileWindow window, int pageId, int filePartOffset, int filePartSize) + { + assertTrue(window.getPageId() == pageId && window.getFilePartOffset() == filePartOffset && + window.getFilePartSize() == filePartSize); + } + + /** how many operations to execute */ + private static final int EXECUTIONS = 10000; + + /** used to wait the executions */ + private static final CountDownLatch LATCH = new CountDownLatch(EXECUTIONS); + + private final PageWindowManager pageWindowManager = new PageWindowManager(1000L); + + /** the execution types */ + private final Runnable[] TASKS = new Runnable[] + { + new CreatePageWindowTask(pageWindowManager), + new GetPageWindowTask(pageWindowManager), + new RemovePageInSessionTask(pageWindowManager) + }; + + private static final SecureRandom RND = new SecureRandom(); + + /** + * Executes random mutator and accessor operations on {@link org.apache.wicket.pageStore.AsynchronousDataStore} validating + * that the used data structures can be used simultaneously. + * + * @throws Exception + */ + @Test + public void randomOperations() throws Exception + { + ExecutorService executorService = Executors.newFixedThreadPool(50); + + for (int i = 0; i < EXECUTIONS; i++) + { + Runnable task = TASKS[RND.nextInt(TASKS.length)]; + executorService.submit(task); + } + LATCH.await(); + executorService.shutdown(); + } + + private static abstract class AbstractTask implements Runnable + { + /** the ids for the stored/removed pages */ + private static final int[] PAGE_IDS = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + + protected final PageWindowManager pageWindowManager; + + private AbstractTask(PageWindowManager pageWindowManager) + { + this.pageWindowManager = pageWindowManager; + } + + protected abstract void r(); + + @Override + public void run() + { + try + { + r(); + } + finally + { + LATCH.countDown(); + } + } + + protected int getPageId() + { + return PAGE_IDS[RND.nextInt(PAGE_IDS.length)]; + } + } + + private static class CreatePageWindowTask extends AbstractTask + { + private CreatePageWindowTask(PageWindowManager pageWindowManager) + { + super(pageWindowManager); + } + + @Override + public void r() + { + pageWindowManager.createPageWindow(getPageId(), WebPage.class, 1000); + } + } + + private static class GetPageWindowTask extends AbstractTask + { + private GetPageWindowTask(PageWindowManager pageWindowManager) + { + super(pageWindowManager); + } + + @Override + public void r() + { + pageWindowManager.getPageWindow(getPageId()); + } + } + + private static class RemovePageInSessionTask extends AbstractTask + { + private RemovePageInSessionTask(PageWindowManager pageWindowManager) + { + super(pageWindowManager); + } + + @Override + public void r() + { + pageWindowManager.removePage(getPageId()); + } + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/DummyPageManagerContext.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/DummyPageManagerContext.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/DummyPageManagerContext.java deleted file mode 100644 index 99d4c90..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/DummyPageManagerContext.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore.memory; - -import java.io.Serializable; - -import org.apache.wicket.page.IPageManagerContext; - -/** - */ -public class DummyPageManagerContext implements IPageManagerContext -{ - - Serializable attribute = null; - Object requestData; - - @Override - public void setRequestData(Object data) - { - requestData = data; - } - - @Override - public Object getRequestData() - { - return requestData; - } - - @Override - public void setSessionAttribute(String key, Serializable value) - { - attribute = value; - } - - @Override - public Serializable getSessionAttribute(String key) - { - return attribute; - } - - @Override - public void bind() - { - } - - @Override - public String getSessionId() - { - return "dummy_id"; - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/HttpSessionDataStoreTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/HttpSessionDataStoreTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/HttpSessionDataStoreTest.java deleted file mode 100644 index 10b5268..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/HttpSessionDataStoreTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore.memory; - -import static org.junit.Assert.assertArrayEquals; - -import org.apache.wicket.util.tester.WicketTestCase; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - */ -public class HttpSessionDataStoreTest extends WicketTestCase -{ - final String sessionId = "anything"; - - final int pageId = 1; - - final byte[] PAGE1 = new byte[] { 1 }; - final byte[] PAGE2 = new byte[] { 2 }; - - HttpSessionDataStore store; - - /** - * before() - */ - @Before - public void before() - { - store = new HttpSessionDataStore(new DummyPageManagerContext(), new NoopEvictionStrategy()); - } - - /** - * after() - */ - @After - public void after() - { - store.destroy(); - } - - /** - * storePage() - */ - @Test - public void storePage() - { - assertNull(store.getData(sessionId, pageId)); - - store.storeData(sessionId, pageId, PAGE1); - assertArrayEquals(PAGE1, store.getData(sessionId, pageId)); - } - - /** - * removePage1() - */ - @Test - public void removePage1() - { - assertNull(store.getData(sessionId, pageId)); - - store.storeData(sessionId, pageId, PAGE1); - - assertNotNull(store.getData(sessionId, pageId)); - - store.removeData(sessionId, pageId); - - assertNull(store.getData(sessionId, pageId)); - } - - /** - * removePage2() - */ - @Test - public void removePage2() - { - assertNull(store.getData(sessionId, pageId)); - - store.storeData(sessionId, pageId, PAGE1); - - assertNotNull(store.getData(sessionId, pageId)); - - store.removeData(sessionId); - - assertNull(store.getData(sessionId, pageId)); - } - - - private static final class NoopEvictionStrategy implements IDataStoreEvictionStrategy - { - - @Override - public void evict(PageTable pageTable) - { - } - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/MemorySizeEvictionStrategyTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/MemorySizeEvictionStrategyTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/MemorySizeEvictionStrategyTest.java deleted file mode 100644 index 50033fa..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/MemorySizeEvictionStrategyTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore.memory; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.apache.wicket.util.lang.Bytes; -import org.apache.wicket.core.util.lang.WicketObjects; -import org.junit.Test; - -/***/ -public class MemorySizeEvictionStrategyTest -{ - final byte[] PAGE1 = new byte[] { 1 }; - final byte[] PAGE2 = new byte[] { 2, 3 }; - - /***/ - @Test - public void evict() - { - PageTable pageTable = new PageTable(); - - long sizeOfEmptyPageTable = WicketObjects.sizeof(pageTable); - - // evict to empty page table - MemorySizeEvictionStrategy strategy = new MemorySizeEvictionStrategy( - Bytes.bytes(sizeOfEmptyPageTable)); - pageTable.storePage(PAGE1.length, PAGE1); - assertEquals(1, pageTable.size()); - strategy.evict(pageTable); - assertEquals(0, pageTable.size()); - long currentSize = WicketObjects.sizeof(pageTable); - assertTrue("Current size: |" + currentSize + "|, strategy size: |" + sizeOfEmptyPageTable + - "|", currentSize <= sizeOfEmptyPageTable); - - // evict to page table with size: empty + PAGE2 - pageTable.storePage(PAGE2.length, PAGE2); - long sizeOfWithPage2 = WicketObjects.sizeof(pageTable); - strategy = new MemorySizeEvictionStrategy(Bytes.bytes(sizeOfWithPage2)); - pageTable.storePage(PAGE1.length, PAGE1); - assertEquals(2, pageTable.size()); - strategy.evict(pageTable); - // the following assertion depends on the fact that PAGE2 has - // bigger size than PAGE1 - assertEquals(1, pageTable.size()); - currentSize = WicketObjects.sizeof(pageTable); - assertTrue("Current size: |" + currentSize + "|, strategy size: |" + sizeOfWithPage2 + "|", - currentSize <= sizeOfWithPage2); - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageNumberEvictionStrategyTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageNumberEvictionStrategyTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageNumberEvictionStrategyTest.java deleted file mode 100644 index d3bf35b..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageNumberEvictionStrategyTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore.memory; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -import org.junit.Test; - -/***/ -public class PageNumberEvictionStrategyTest -{ - - final byte[] PAGE1 = new byte[] { 1 }; - final byte[] PAGE2 = new byte[] { 2, 3 }; - - /***/ - @Test - public void evict() - { - // evict to page table with one page only - PageNumberEvictionStrategy strategy = new PageNumberEvictionStrategy(1); - - PageTable pageTable = new PageTable(); - - pageTable.storePage(PAGE1.length, PAGE1); - assertEquals(1, pageTable.size()); - strategy.evict(pageTable); - assertEquals(1, pageTable.size()); - assertNotNull(pageTable.getPage(PAGE1.length)); - - pageTable.storePage(PAGE2.length, PAGE2); - assertEquals(2, pageTable.size()); - strategy.evict(pageTable); - assertEquals(1, pageTable.size()); - assertNotNull(pageTable.getPage(PAGE2.length)); - assertNull(pageTable.getPage(PAGE1.length)); - } - - /** - * The number of pages must be at least '1' - */ - @Test(expected = IllegalArgumentException.class) - public void greaterThanZero() - { - new PageNumberEvictionStrategy(0); - } -} http://git-wip-us.apache.org/repos/asf/wicket/blob/bcf76f51/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageTableTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageTableTest.java b/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageTableTest.java deleted file mode 100644 index 062068f..0000000 --- a/wicket-core/src/test/java/org/apache/wicket/pageStore/memory/PageTableTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.wicket.pageStore.memory; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import org.junit.Test; - -/***/ -public class PageTableTest -{ - - final byte[] data = new byte[] { 1 }; - - /***/ - @Test - public void getOldest() - { - PageTable pageTable = new PageTable(); - - assertNull(pageTable.getOldest()); - - pageTable.storePage(1, data); - // index: 1 - assertEquals(Integer.valueOf(1), pageTable.getOldest()); - - pageTable.storePage(2, data); - // index: 2, 1 - assertEquals(Integer.valueOf(1), pageTable.getOldest()); - - pageTable.storePage(3, data); - // index: 3, 2, 1 - assertEquals(Integer.valueOf(1), pageTable.getOldest()); - - pageTable.getPage(1); - // index: 1, 3, 2 - assertEquals(Integer.valueOf(2), pageTable.getOldest()); - - pageTable.removePage(2); - // index: 1, 3 - assertEquals(Integer.valueOf(3), pageTable.getOldest()); - } -}
