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

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

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

import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
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.treeEditor.DefaultTreeEditor;
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.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 org.junit.Assert;
import org.junit.Test;

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

public class DataWriteBufferTest {
    ByteBuffer value = ByteBuffer.wrap("value".getBytes());
    String key = "key";
    int pos = 0;

    @Test
    public void DataWriteBufferTest() throws IOException {
        PersistentJournal journal1 = new PersistentJournal("commit.log");
        Jungle jungle = new PersistentJungle(journal1, "uuid",new DefaultTraverser());
        jungle.createNewTree("hoge");
        JungleTree tree1 = jungle.getTreeByName("hoge");
        tree1.setBufferSize(10);
        JungleTreeEditor editor = tree1.getJungleTreeEditor();
        NetworkNodePath path = new NetworkNodePath();
        Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, pos);
        NodePath childPath = path.add(pos);
        Assert.assertFalse(either.isA());
        editor = either.b();
        either = editor.putAttribute(childPath, key, value);
        JungleTreeEditor editor2 = either.b();
        either = editor2.success();
        Assert.assertFalse(either.isA());

        PersistentJournal journal2 = new PersistentJournal();
        journal2.setInputFile(new File( journal1.getLogName()));
        journal2.setOutputFile(new File( journal1.getLogName()));
        ChangeListReader reader = journal2.getReader();
        Iterator<ChangeList> iterator = reader.iterator();
        Assert.assertFalse(iterator.hasNext());

        for (int count = 0; count < 9; count++) {
            editor = tree1.getJungleTreeEditor();
            either = editor.addNewChildAt(path, pos);
            childPath = path.add(pos);
            Assert.assertFalse(either.isA());
            editor = either.b();
            either = editor.putAttribute(childPath, key, value);
            editor2 = either.b();
            either = editor2.success();
            Assert.assertFalse(either.isA());
        }
        editor = tree1.getJungleTreeEditor();
        either = editor.flushSuccess();
        Assert.assertFalse(either.isA());

        PersistentJournal journal3 = new PersistentJournal();
        journal3.setInputFile(new File( journal1.getLogName()));
        journal3.setOutputFile(new File( journal1.getLogName()));
        Jungle jungle2 = new PersistentJungle(journal1, "uuid3",new DefaultTraverser());
        ChangeListReader reader2 = journal3.getReader();
        for (ChangeList chList : reader2) {
            String treeName = chList.getTreeName();
            JungleTree tree2 = jungle2.getTreeByName(treeName);
            if (tree2 == null) {
                tree2 = jungle2.createNewTree(treeName);
            }
            editor2 = tree2.getJungleTreeEditor();
            Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList);
            Assert.assertFalse(either2.isA());
            editor2 = either2.b();
            editor2.success();
        }

        JungleTree tree2 = jungle2.getTreeByName("hoge");
        TreeNode node1 = tree1.getRootNode();
        TreeNode node2 = tree2.getRootNode();
        Children child1 = node1.getChildren();
        Children child2 = node2.getChildren();
        Assert.assertEquals(child1.size(), child2.size());
        Either<Error, TreeNode> either1 = child1.at(pos);
        Either<Error, TreeNode> either2 = child1.at(pos);
        Assert.assertFalse(either1.isA());
        Assert.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());
        Assert.assertTrue(strA.equals(strB));
        journal1.close();
        journal2.close();
    }
}