# HG changeset patch # User one # Date 1387489895 -32400 # Node ID 3f9c6ab43461bf512650f18372383638a9882bb8 # Parent fdbd9679bd7bb34e6a20b62e21ea1dbf69ada34b Adde PersistentJournalTest.java diff -r fdbd9679bd7b -r 3f9c6ab43461 src/main/java/alice/jungle/persistent/PersistentJournal.java --- 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 diff -r fdbd9679bd7b -r 3f9c6ab43461 src/main/java/alice/jungle/persistent/PersistentTransactionManager.java --- 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; diff -r fdbd9679bd7b -r 3f9c6ab43461 src/main/java/alice/jungle/transaction/JungleUpdater.java --- 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 edit(JungleTreeEditor _editor ,TreeOperationLog _log) { + public static Either edit(JungleTreeEditor _editor ,Iterable _log) { JungleTreeEditor editor = _editor; Either either = null; for (TreeOperation op : _log) { diff -r fdbd9679bd7b -r 3f9c6ab43461 src/main/java/app/bbs/JungleManager.java --- 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 edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) { diff -r fdbd9679bd7b -r 3f9c6ab43461 src/test/java/alice/jungle/PersistentJournalTest.java --- /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 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 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 child1 = node1.getChildren(); + Children child2 = node2.getChildren(); + assertEquals(child1.size(), child2.size()); + Either either1 = child1.at(pos); + Either 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(); + } + +}