changeset 35:054dc02c117d

add test.alice.jungle.codesegment
author one
date Tue, 02 Jul 2013 17:49:23 +0900
parents bf696a6334b2
children 1255ae20d52e
files src/alice/jungle/transaction/NetworkTransactionManager.java src/jungle/test/codesegment/operation/CodeSegmentJournal.java src/test/alice/jungle/codesegment/CheckDoubleTreeAttr.java src/test/alice/jungle/codesegment/CopyAttrJungle2.java src/test/alice/jungle/codesegment/DoubleJungleManager.java src/test/alice/jungle/codesegment/LocalDoubleJungleTree.java src/test/alice/jungle/codesegment/PutAttrJungle1.java
diffstat 7 files changed, 271 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/alice/jungle/transaction/NetworkTransactionManager.java	Tue Jul 02 11:52:32 2013 +0900
+++ b/src/alice/jungle/transaction/NetworkTransactionManager.java	Tue Jul 02 17:49:23 2013 +0900
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.util.Iterator;
 
+import alice.jungle.codesegment.LogUpdateCodeSegment;
 import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
@@ -84,6 +85,8 @@
 		container.setTreeName(_treeName);
 		container.setUUID(_uuid);
 		container.unconvert(_log);
+		LogUpdateCodeSegment cs = new LogUpdateCodeSegment();
+		cs.ods.update("log", container);
 		
 	}
 
--- a/src/jungle/test/codesegment/operation/CodeSegmentJournal.java	Tue Jul 02 11:52:32 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-package jungle.test.codesegment.operation;
-
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-
-public class CodeSegmentJournal extends CodeSegment {
-
-	Receiver arg1 = ids.create(CommandType.PEEK);
-
-	@Override
-	public void run() {
-		
-		
-	}
-	
-	
-	
-	
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/alice/jungle/codesegment/CheckDoubleTreeAttr.java	Tue Jul 02 17:49:23 2013 +0900
@@ -0,0 +1,60 @@
+package test.alice.jungle.codesegment;
+
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+
+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.core.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class CheckDoubleTreeAttr extends CodeSegment {
+	
+	Receiver arg1 = ids.create(CommandType.TAKE);
+	
+	public CheckDoubleTreeAttr() {
+		arg1.setKey("count");
+	}
+	
+	public void run() {
+		int count = arg1.asInteger();
+		
+		DoubleJungleManager djm = new DoubleJungleManager();
+		Jungle jungle1 = djm.getJungle1();
+		Jungle jungle2 = djm.getJungle2();
+		JungleTree tree1 = jungle1.getTreeByName("tree");
+		JungleTree tree2 = jungle2.getTreeByName("tree");
+		
+		Node node1 = tree1.getRootNode();
+		Node node2 = tree2.getRootNode();
+		Children<Node> chs1 = node1.getChildren();
+		Children<Node> chs2 = node2.getChildren();
+		
+		Iterator<Node> iter1 = chs1.iterator();
+		Iterator<Node> iter2 = chs2.iterator();
+		
+		for(; iter1.hasNext() && iter2.hasNext();) {
+			Node n1 = iter1.next();
+			Node n2 = iter2.next();
+			ByteBuffer b1 = n1.getAttributes().get("key");
+			ByteBuffer b2 = n2.getAttributes().get("key");
+			String str1 = new String(b1.array());
+			String str2 = new String(b2.array());
+			if(!str1.equals(str2)) {
+				System.out.println("Failed ");
+				System.out.println("str1 "+ str1);
+				System.out.println("str2 "+ str2);
+				System.exit(0);
+			} else { 
+				System.out.println("success: " + str1);
+			}
+			
+		}
+				
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/alice/jungle/codesegment/CopyAttrJungle2.java	Tue Jul 02 17:49:23 2013 +0900
@@ -0,0 +1,57 @@
+package test.alice.jungle.codesegment;
+
+import java.io.IOException;
+
+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.store.impl.logger.DefaultTreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jungle.test.codesegment.operation.JungleManager;
+import jungle.test.core.practice.PrintChildrenAttribute;
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
+
+public class CopyAttrJungle2 extends CodeSegment {
+	
+	Receiver logReceiver = ids.create(CommandType.TAKE);
+	Receiver countReceiver = ids.create(CommandType.TAKE);
+	
+	public CopyAttrJungle2() {
+		logReceiver.setKey("log");
+		countReceiver.setKey("count2");
+	}
+
+	public void run() {
+		System.out.println("CopyAttrJungle2");
+		int count = countReceiver.asInteger();
+		DefaultTreeOperationLogContainer container = logReceiver.asClass(DefaultTreeOperationLogContainer.class);
+		DefaultTreeOperationLog log = null;
+		try {
+			log = container.convert();
+		} catch (IOException e) {
+			e.printStackTrace();
+			System.exit(0);
+		}
+		DoubleJungleManager djm = new DoubleJungleManager();
+		Jungle jungle2 = djm.getJungle2();
+		JungleTree tree = jungle2.getTreeByName("tree");
+		
+		JungleTreeEditor editor = tree.getTreeEditor();
+		Either<Error, JungleTreeEditor> either = djm.edit(editor, log);
+		if (either.isA()) {
+			throw new IllegalStateException();				
+		}
+		editor = either.b();
+		editor.success();
+		new CheckDoubleTreeAttr();
+		ods.update("count", count);
+		
+		
+		
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/alice/jungle/codesegment/DoubleJungleManager.java	Tue Jul 02 17:49:23 2013 +0900
@@ -0,0 +1,84 @@
+package test.alice.jungle.codesegment;
+
+import java.nio.ByteBuffer;
+
+import alice.jungle.core.NetworkDefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+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.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
+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;
+
+public class DoubleJungleManager {
+
+	static Jungle jungle1 = new NetworkDefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));
+	static Jungle jungle2 = new NetworkDefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));
+	
+	
+	public DoubleJungleManager() {
+		
+	}
+	
+	public Jungle getJungle1() {
+		return jungle1;
+	}
+	
+	public Jungle getJungle2() {
+		return jungle2;
+	}
+	
+	
+	public Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log) {
+		JungleTreeEditor editor = _editor;
+		Either<Error, JungleTreeEditor> either = null;
+		for (TreeOperation op : _log) { 
+			either = _edit(editor, op);
+			if(either.isA()) {
+				return either;
+			}
+			editor = either.b();
+		}
+		return either;
+	}
+	
+	private Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
+			TreeOperation op) {
+		NodePath path = op.getNodePath();
+		NodeOperation nodeOp = op.getNodeOperation();
+		Command c = nodeOp.getCommand();
+		String str = "";
+		String key = "";
+		switch (c) {
+		case PUT_ATTRIBUTE:
+			key = nodeOp.getKey();
+			ByteBuffer value = nodeOp.getValue();
+			if (value.limit() < 100) {
+				str = String.format("key:%s,value:%s", key,
+						new String(value.array()));
+			} else {
+				str = String.format("key:%s,value:%d", key, value.limit());
+			}
+			return editor.putAttribute(path, key, value);
+		case DELETE_ATTRIBUTE:
+			key = nodeOp.getKey();
+			str = String.format("key:%s", nodeOp.getKey());
+			return editor.deleteAttribute(path, key);
+		case APPEND_CHILD:
+			str = String.format("pos:%d", nodeOp.getPosition());
+			return editor.addNewChildAt(path, 0);
+		case DELETE_CHILD:
+			str = String.format("pos:%d", nodeOp.getPosition());
+			return editor.deleteChildAt(path, 0);
+		}
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/alice/jungle/codesegment/LocalDoubleJungleTree.java	Tue Jul 02 17:49:23 2013 +0900
@@ -0,0 +1,20 @@
+package test.alice.jungle.codesegment;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+
+public class LocalDoubleJungleTree {
+
+	public static void main(String[] args) {
+		System.out.println("LocalDoubleJungleTree");
+		DoubleJungleManager djm = new DoubleJungleManager();
+		Jungle jungle1 = djm.getJungle1();
+		Jungle jungle2 = djm.getJungle2();
+		jungle1.createNewTree("tree");
+		jungle2.createNewTree("tree");
+		
+		PutAttrJungle1 cs = new PutAttrJungle1();
+		cs.ods.update("count1", 0);
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/alice/jungle/codesegment/PutAttrJungle1.java	Tue Jul 02 17:49:23 2013 +0900
@@ -0,0 +1,47 @@
+package test.alice.jungle.codesegment;
+
+import java.nio.ByteBuffer;
+
+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.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class PutAttrJungle1 extends CodeSegment {
+	
+	Receiver arg1 = ids.create(CommandType.TAKE);
+	
+	public PutAttrJungle1() {
+		arg1.setKey("count1");
+	}
+	
+	public void run() {
+		System.out.println("PutAttrJungle1");
+		int count = arg1.asInteger();
+		Jungle jungle1 = new DoubleJungleManager().getJungle1();
+		JungleTree tree = jungle1.getTreeByName("tree");
+		JungleTreeEditor editor = tree.getTreeEditor();
+		DefaultNodePath root = new DefaultNodePath();
+		Either<Error, JungleTreeEditor> either =  editor.addNewChildAt(root, 0);
+		if(either.isA()) {
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		either = editor.putAttribute(root.add(0), "key", ByteBuffer.wrap("message".getBytes()));
+		if(either.isA()) {
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		editor.success();
+		
+		new CopyAttrJungle2();
+		ods.update("count2", count);
+		
+	}
+
+}