230
|
1 package jp.ac.u_ryukyu.ie.cr.junglenetwork;
|
|
2
|
|
3 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
|
331
|
4 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
|
|
5 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
|
230
|
6 import jp.ac.u_ryukyu.ie.cr.jungle.core.Children;
|
|
7 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeList;
|
|
8 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListReader;
|
263
|
9 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
|
331
|
10 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.treeEditor.DefaultTreeEditor;
|
265
|
11 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
|
230
|
12 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
|
|
13 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
|
329
|
14 import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error;
|
230
|
15 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkNodePath;
|
|
16 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJournal;
|
|
17 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJungle;
|
|
18 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater;
|
|
19 import org.junit.Assert;
|
|
20 import org.junit.Test;
|
|
21
|
|
22 import java.io.File;
|
|
23 import java.io.IOException;
|
|
24 import java.nio.ByteBuffer;
|
|
25 import java.util.Iterator;
|
|
26
|
|
27 public class DataWriteBufferTest {
|
|
28 ByteBuffer value = ByteBuffer.wrap("value".getBytes());
|
|
29 String key = "key";
|
|
30 int pos = 0;
|
|
31
|
|
32 @Test
|
|
33 public void DataWriteBufferTest() throws IOException {
|
331
|
34 PersistentJournal journal1 = new PersistentJournal("commit.log");
|
|
35 Jungle jungle = new PersistentJungle(journal1, "uuid",new DefaultTraverser());
|
230
|
36 jungle.createNewTree("hoge");
|
|
37 JungleTree tree1 = jungle.getTreeByName("hoge");
|
|
38 tree1.setBufferSize(10);
|
263
|
39 JungleTreeEditor editor = tree1.getJungleTreeEditor();
|
230
|
40 NetworkNodePath path = new NetworkNodePath();
|
|
41 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, pos);
|
|
42 NodePath childPath = path.add(pos);
|
|
43 Assert.assertFalse(either.isA());
|
|
44 editor = either.b();
|
|
45 either = editor.putAttribute(childPath, key, value);
|
|
46 JungleTreeEditor editor2 = either.b();
|
|
47 either = editor2.success();
|
|
48 Assert.assertFalse(either.isA());
|
|
49
|
|
50 PersistentJournal journal2 = new PersistentJournal();
|
331
|
51 journal2.setInputFile(new File( journal1.getLogName()));
|
|
52 journal2.setOutputFile(new File( journal1.getLogName()));
|
230
|
53 ChangeListReader reader = journal2.getReader();
|
|
54 Iterator<ChangeList> iterator = reader.iterator();
|
|
55 Assert.assertFalse(iterator.hasNext());
|
|
56
|
|
57 for (int count = 0; count < 9; count++) {
|
263
|
58 editor = tree1.getJungleTreeEditor();
|
230
|
59 either = editor.addNewChildAt(path, pos);
|
|
60 childPath = path.add(pos);
|
|
61 Assert.assertFalse(either.isA());
|
|
62 editor = either.b();
|
|
63 either = editor.putAttribute(childPath, key, value);
|
|
64 editor2 = either.b();
|
|
65 either = editor2.success();
|
|
66 Assert.assertFalse(either.isA());
|
|
67 }
|
263
|
68 editor = tree1.getJungleTreeEditor();
|
231
|
69 either = editor.flushSuccess();
|
230
|
70 Assert.assertFalse(either.isA());
|
|
71
|
|
72 PersistentJournal journal3 = new PersistentJournal();
|
331
|
73 journal3.setInputFile(new File( journal1.getLogName()));
|
|
74 journal3.setOutputFile(new File( journal1.getLogName()));
|
|
75 Jungle jungle2 = new PersistentJungle(journal1, "uuid3",new DefaultTraverser());
|
230
|
76 ChangeListReader reader2 = journal3.getReader();
|
|
77 for (ChangeList chList : reader2) {
|
|
78 String treeName = chList.getTreeName();
|
231
|
79 JungleTree tree2 = jungle2.getTreeByName(treeName);
|
230
|
80 if (tree2 == null) {
|
231
|
81 tree2 = jungle2.createNewTree(treeName);
|
230
|
82 }
|
263
|
83 editor2 = tree2.getJungleTreeEditor();
|
331
|
84 Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList);
|
230
|
85 Assert.assertFalse(either2.isA());
|
|
86 editor2 = either2.b();
|
|
87 editor2.success();
|
|
88 }
|
|
89
|
231
|
90 JungleTree tree2 = jungle2.getTreeByName("hoge");
|
230
|
91 TreeNode node1 = tree1.getRootNode();
|
|
92 TreeNode node2 = tree2.getRootNode();
|
|
93 Children child1 = node1.getChildren();
|
|
94 Children child2 = node2.getChildren();
|
|
95 Assert.assertEquals(child1.size(), child2.size());
|
|
96 Either<Error, TreeNode> either1 = child1.at(pos);
|
|
97 Either<Error, TreeNode> either2 = child1.at(pos);
|
|
98 Assert.assertFalse(either1.isA());
|
|
99 Assert.assertFalse(either2.isA());
|
|
100
|
|
101 TreeNode nodeA = either1.b();
|
|
102 TreeNode nodeB = either2.b();
|
|
103 ByteBuffer bb1 = nodeA.getAttributes().get(key);
|
|
104 ByteBuffer bb2 = nodeB.getAttributes().get(key);
|
|
105 String strA = new String(bb1.array());
|
|
106 String strB = new String(bb2.array());
|
|
107 Assert.assertTrue(strA.equals(strB));
|
|
108 journal1.close();
|
|
109 journal2.close();
|
|
110 }
|
|
111 }
|