changeset 115:3f9c6ab43461

Adde PersistentJournalTest.java
author one
date Fri, 20 Dec 2013 06:51:35 +0900
parents fdbd9679bd7b
children 895ab2907db3
files src/main/java/alice/jungle/persistent/PersistentJournal.java src/main/java/alice/jungle/persistent/PersistentTransactionManager.java src/main/java/alice/jungle/transaction/JungleUpdater.java src/main/java/app/bbs/JungleManager.java src/test/java/alice/jungle/PersistentJournalTest.java
diffstat 5 files changed, 97 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/jungle/persistent/PersistentJournal.java	Wed Dec 04 21:07:21 2013 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentJournal.java	Fri Dec 20 06:51:35 2013 +0900
@@ -18,12 +18,11 @@
 	
 	private static ChangeListWriter WRITER;
 	private static ChangeListReader READER;
-	private static MessagePack msgpack;
+	private static MessagePack msgpack = new MessagePack();
 	private static OutputStream out = null;
 	private static InputStream in = null;
 	
 	public PersistentJournal() {
-		msgpack = new MessagePack();
 	}
 	
 	public PersistentJournal(File file) throws FileNotFoundException {
@@ -31,7 +30,6 @@
 		in = new FileInputStream(file);
 		WRITER = new PersistentChangeListWriter(out);
 		READER = new PersistentChangeListReader(in);
-     	msgpack = new MessagePack();		
 	}
 	
 	@Override
--- a/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java	Wed Dec 04 21:07:21 2013 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java	Fri Dec 20 06:51:35 2013 +0900
@@ -1,7 +1,5 @@
 package alice.jungle.persistent;
 
-import java.util.Iterator;
-
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
--- a/src/main/java/alice/jungle/transaction/JungleUpdater.java	Wed Dec 04 21:07:21 2013 +0900
+++ b/src/main/java/alice/jungle/transaction/JungleUpdater.java	Fri Dec 20 06:51:35 2013 +0900
@@ -5,7 +5,6 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -17,7 +16,7 @@
 		
 	}
 	
-	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log) {
+	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,Iterable<TreeOperation> _log) {
 		JungleTreeEditor editor = _editor;
 		Either<Error, JungleTreeEditor> either = null;
 		for (TreeOperation op : _log) { 
--- a/src/main/java/app/bbs/JungleManager.java	Wed Dec 04 21:07:21 2013 +0900
+++ b/src/main/java/app/bbs/JungleManager.java	Fri Dec 20 06:51:35 2013 +0900
@@ -21,7 +21,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 public class JungleManager {
-	private static JungleManager jm = new JungleManager();
+	private static JungleManager instance = new JungleManager();
 	private Jungle jungle;
 	private static int NOT_CHANGE_POSITION = 0;
 
@@ -30,19 +30,19 @@
 	}
 	
 	public static JungleManager getInstantce() {
-		return jm;
+		return instance;
 	}
 	
 	public static void setJungle(Jungle _j) {
-		jm.jungle = _j;
+		instance.jungle = _j;
 	}
 	
 	public static Jungle getJungle() {
-		return jm.jungle;
+		return instance.jungle;
 	}
 	
 	public static JungleTree createNewTree(String name) {
-		return jm.jungle.createNewTree(name);		
+		return instance.jungle.createNewTree(name);		
 	}
 
 	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/PersistentJournalTest.java	Fri Dec 20 06:51:35 2013 +0900
@@ -0,0 +1,90 @@
+package alice.jungle;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import alice.jungle.operations.NetworkNodePath;
+import alice.jungle.persistent.PersistentChangeList;
+import alice.jungle.persistent.PersistentJournal;
+import alice.jungle.persistent.PersistentJungle;
+import alice.jungle.transaction.JungleUpdater;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import junit.framework.TestCase;
+
+public class PersistentJournalTest extends TestCase {
+	
+	public void testPersistentJounal() throws IOException {
+		PersistentJournal journal1 = new PersistentJournal(new File("./log/commit.log"));
+		Jungle jungle = new PersistentJungle(journal1, "uuid",new DefaultTreeEditor(new DefaultTraverser()));
+		jungle.createNewTree("hoge");
+		JungleTree tree1 = jungle.getTreeByName("hoge");
+		JungleTreeEditor editor = tree1.getTreeEditor();
+		NetworkNodePath path = new NetworkNodePath();
+		String key = "key";
+		ByteBuffer value = ByteBuffer.wrap("value".getBytes());
+		int pos = 0;
+		Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, pos);
+		NodePath childPath = path.add(pos);
+		assertFalse(either.isA());
+		editor = either.b();
+		either = editor.putAttribute(childPath, key,	value);
+		JungleTreeEditor e = either.b();
+		either = e.success();
+		assertFalse(either.isA());
+		
+		PersistentJournal journal2 = new PersistentJournal();
+		journal2.setInputFile(new File("./log/commit.log"));
+		journal2.setOutputFile(new File("./log/commit2.log"));
+		Jungle jungle2 = new PersistentJungle(journal1, "uuid2", new DefaultTreeEditor(new DefaultTraverser()));
+		ChangeListReader reader = journal2.getReader();
+		ChangeList chList =  reader.read();
+		for (; chList != null; chList = reader.read()) {
+			String treeName = chList.getTreeName();
+			JungleTree tree2 = jungle2.getTreeByName(treeName);
+			if(tree2 == null) {
+				tree2 = jungle2.createNewTree(treeName);
+			}
+			JungleTreeEditor editor2 = tree2.getTreeEditor();
+			Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList);
+			assertFalse(either2.isA());
+			editor2 = either2.b();
+			editor2.success();
+		}
+		JungleTree tree2 = jungle2.getTreeByName("hoge");
+		Node node1 = tree1.getRootNode();
+		Node node2 = tree2.getRootNode();
+		Children<Node> child1 = node1.getChildren();
+		Children<Node> child2 = node2.getChildren();
+		assertEquals(child1.size(), child2.size());
+		Either<Error, Node> either1 = child1.at(pos);
+		Either<Error, Node> either2 = child1.at(pos);		
+		assertFalse(either1.isA());
+		assertFalse(either2.isA());
+		
+		Node nodeA = either1.b();
+		Node nodeB = either2.b();
+		ByteBuffer bb1 = nodeA.getAttributes().get(key);
+		ByteBuffer bb2 = nodeB.getAttributes().get(key);
+		String strA = new String(bb1.array());
+		String strB = new String(bb2.array());
+		assertTrue(strA.equals(strB));
+		journal1.close();
+		journal2.close();
+	}
+
+}