view src/test/java/jp/ac/u_ryukyu/ie/cr/junglenetwork/Persistent/PersistentDefaultJournalTest.java @ 331:74401cc27a96

fix log again
author suruga
date Sat, 08 Jul 2017 21:46:53 +0900
parents 2a0cb1f0ba4e
children c90d9c64aeda
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.junglenetwork.Persistent;

import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
import jp.ac.u_ryukyu.ie.cr.jungle.core.Children;
import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeList;
import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListReader;
import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error;
import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkNodePath;
import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJournal;
import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJungle;
import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater;
import junit.framework.TestCase;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;

public class PersistentDefaultJournalTest extends TestCase {

    public void testPersistentJounal() throws IOException {
        PersistentJournal journal1 = new PersistentJournal("commit.log");
        Jungle jungle = new PersistentJungle(journal1, "uuid", new DefaultTraverser());
        jungle.createNewTree("hoge");
        JungleTree tree1 = jungle.getTreeByName("hoge");
        JungleTreeEditor editor = tree1.getJungleTreeEditor();
        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( journal1.getLogName()));
        journal2.setOutputFile(new File(journal1.getLogName()));
        Jungle jungle2 = new PersistentJungle(journal1, "uuid2", new DefaultTraverser());
        ChangeListReader reader = journal2.getReader();
        for (ChangeList chList : reader) {
            String treeName = chList.getTreeName();
            JungleTree tree2 = jungle2.getTreeByName(treeName);
            int treeType = chList.getTreeType();
            if (tree2 == null) {
                tree2 = jungle2.createNewTree(treeName);
            }
            JungleTreeEditor editor2 = tree2.getJungleTreeEditor();
            Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList, treeType);
            assertFalse(either2.isA());
        }
        JungleTree tree2 = jungle2.getTreeByName("hoge");
        TreeNode node1 = tree1.getRootNode();
        TreeNode node2 = tree2.getRootNode();
        Children child1 = node1.getChildren();
        Children child2 = node2.getChildren();
        assertEquals(child1.size(), child2.size());
        Either<Error, TreeNode> either1 = child1.at(pos);
        Either<Error, TreeNode> either2 = child1.at(pos);
        assertFalse(either1.isA());
        assertFalse(either2.isA());

        TreeNode nodeA = either1.b();
        TreeNode 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();
    }

}