add store page retrieval tests on close and distant requests back
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2bae2cba Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2bae2cba Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2bae2cba Branch: refs/heads/master Commit: 2bae2cbae378d9732ca3549ab77019d08a134302 Parents: accf187 Author: Manuel Barzi <[email protected]> Authored: Sun Apr 2 15:07:59 2017 +0200 Committer: Manuel Barzi <[email protected]> Committed: Sun Apr 2 15:07:59 2017 +0200 ---------------------------------------------------------------------- .../pageStore/AsynchronousPageStoreTest.java | 113 ++++++++++++++++--- 1 file changed, 95 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/2bae2cba/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 2a0acf9..d437d30 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 @@ -2,6 +2,10 @@ package org.apache.wicket.pageStore; import static org.junit.Assert.assertEquals; 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 java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -21,6 +25,10 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.RandomUtils; import org.apache.wicket.page.IManageablePage; +import org.apache.wicket.pageStore.DefaultPageStore; +import org.apache.wicket.pageStore.DiskDataStore; +import org.apache.wicket.pageStore.IDataStore; +import org.apache.wicket.pageStore.IPageStore; import org.apache.wicket.serialize.ISerializer; import org.apache.wicket.serialize.java.DeflatedJavaSerializer; import org.apache.wicket.util.file.File; @@ -128,13 +136,81 @@ public class AsynchronousPageStoreTest public String toString() { - return "DummyPage[pageId = " + pageId + ", writeMillis = " + writeMillis + - ", readMillis = " + readMillis + ", sessionId = " + sessionId + ", hashCode = " + - hashCode() + "]"; + return "DummyPage[pageId = " + pageId + ", writeMillis = " + writeMillis + + ", readMillis = " + readMillis + ", sessionId = " + sessionId + ", hashCode = " + + hashCode() + "]"; } } /** + * Store returns the same page instance from queue when there is a close request for it back + * again. + * + * @throws InterruptedException + */ + @Test + public void storeReturnsSameInstanceOnClosePageRequest() throws InterruptedException + { + + 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); + + int pageId = 0; + String sessionId = "sessionId"; + + DummyPage page = new DummyPage(pageId, 1000, 1000, sessionId); + asyncPageStore.storePage(sessionId, page); + + Thread.sleep(500); + + asyncPageStore.getPage(sessionId, pageId); + + verify(pageStore, never()).getPage(sessionId, pageId); + } + + /** + * Store returns the restored page instance from wrapped store when there is a distant request + * for it back again. + * + * @throws InterruptedException + */ + @Test + public void storeReturnsRestoredInstanceOnDistantPageRequest() throws InterruptedException + { + + 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); + + int pageId = 0; + String sessionId = "sessionId"; + + DummyPage page = new DummyPage(pageId, 1000, 1000, sessionId); + asyncPageStore.storePage(sessionId, page); + + Thread.sleep(1500); + + asyncPageStore.getPage(sessionId, pageId); + + verify(pageStore, times(1)).getPage(sessionId, pageId); + } + + /** * Store works fully asynchronous when number of pages handled never exceeds the * asynchronous-storage capacity. * @@ -164,9 +240,8 @@ public class AsynchronousPageStoreTest } /** - * Store behaves synchronous from when number of pages handled exceeds the given - * asynchronous-storage capacity. It works asynchronous until the number of pages reaches the - * limit (capacity). + * Store behaves sync from when number of pages handled exceeds the given asynchronous-storage + * capacity. It works asynchronous until the number of pages reaches the limit (capacity). * * @throws InterruptedException */ @@ -216,8 +291,9 @@ public class AsynchronousPageStoreTest public String toString() { - return "Metrics[storedPage = " + storedPage + ", storingMillis = " + storingMillis + - ", restoredPage = " + restoredPage + ", restoringMillis = " + restoringMillis + "]"; + return "Metrics[storedPage = " + storedPage + ", storingMillis = " + storingMillis + + ", restoredPage = " + restoredPage + ", restoringMillis = " + restoringMillis + + "]"; } } @@ -229,14 +305,15 @@ public class AsynchronousPageStoreTest final CountDownLatch lock = new CountDownLatch(pages * sessions); - ISerializer serializer = new DeflatedJavaSerializer("applicationKey"); // 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 DummyPageStore(new - // File("target/store")) { @Override public void storePage(String sessionId, IManageablePage page) @@ -254,23 +331,23 @@ public class AsynchronousPageStoreTest for (int pageId = 1; pageId <= pages; pageId++) { - for (int sessionId = 1; sessionId <= sessions; sessionId++) + for (int i = 1; i <= sessions; i++) { - String session = String.valueOf(sessionId); + String sessionId = String.valueOf(i); Metrics metrics = new Metrics(); stopwatch.reset(); DummyPage page = new DummyPage(pageId, around(writeMillis), around(readMillis), - session); + sessionId); stopwatch.start(); - asyncPageStore.storePage(session, page); + asyncPageStore.storePage(sessionId, page); metrics.storedPage = page; metrics.storingMillis = stopwatch.elapsed(TimeUnit.MILLISECONDS); stopwatch.reset(); stopwatch.start(); metrics.restoredPage = DummyPage.class - .cast(asyncPageStore.getPage(session, pageId)); + .cast(asyncPageStore.getPage(sessionId, pageId)); metrics.restoringMillis = stopwatch.elapsed(TimeUnit.MILLISECONDS); results.add(metrics); @@ -497,8 +574,8 @@ public class AsynchronousPageStoreTest @Override public boolean canBeAsynchronous() { - return true; + return false; } } -} +} \ No newline at end of file
