You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/04/12 21:28:30 UTC

[05/10] wicket git commit: add store page retrieval tests on close and distant requests back

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 <ma...@Manuels-MacBook-Pro.local>
Authored: Sun Apr 2 15:07:59 2017 +0200
Committer: Manuel Barzi <ma...@Manuels-MacBook-Pro.local>
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