Code Search for Developers
 
 
  

MolliUrsoTests.java from PeerWriter at Krugle


Show MolliUrsoTests.java syntax highlighted

package fr.loria.ecoo.wooki.woot.test;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector;

import junit.framework.TestCase;
import fr.loria.ecoo.wooki.woot.Patch;
import fr.loria.ecoo.wooki.woot.WootSite;
import fr.loria.ecoo.wooki.woot.core.WootPage;
import fr.loria.ecoo.wooki.woot.op.WootOp;

public class MolliUrsoTests extends TestCase {

	public static final String WORKING_DIR = "/tmp/";

	public void testBasic() throws Exception {
		WootSite woot = this.createSite("site0");
		String pageId = (String) woot.createPage("index");
		WootPage page_s0 = (WootPage) woot._getPage(pageId);

		woot.ins(page_s0, "lineA", 0);
		woot.ins(page_s0, "lineB", 1);
		woot.ins(page_s0, "lineC", 2);

		assertEquals("[lineAlineBlineC]", page_s0.toString());
	}

	public void testInsertBeginning() throws Exception {
		WootSite woot = this.createSite("site0");
		String pageId = (String) woot.createPage("index");
		WootPage page = (WootPage) woot._getPage(pageId);

		woot.ins(page, "lineA", 0);
		woot.ins(page, "lineB", 1);
		woot.ins(page, "lineC", 2);
		woot.ins(page, "---", 0);

		assertEquals("[---lineAlineBlineC]", page.toString());

	}

	public void testWQ() throws Exception {
		WootSite site0 = this.createSite("site0");
		String pageId = (String) site0.createPage("index");
		WootPage page_s0 = (WootPage) site0._getPage(pageId);

		Vector<WootOp> data = new Vector<WootOp>();
		WootOp op1 = (WootOp) site0.ins(page_s0, "lineA", 0);
		WootOp op2 = (WootOp) site0.ins(page_s0, "lineB", 1);
		WootOp op3 = (WootOp) site0.ins(page_s0, "lineC", 2);

		assertEquals("[lineAlineBlineC]", page_s0.toString());

		WootSite site1 = this.createSite("site1");

		// create the mini patch ...
		Patch patch = new PatchImpl();
		patch.setPageId("index");
		data.addElement(op3);
		data.addElement(op2);
		patch.setData(data);

		site1.deliver(patch);
		assertEquals("[]", (String) site1.getPage("index", WootSite.REAL_MODE));

		data.clear();
		data.addElement(op1);
		patch.setData(data);

		site1.deliver(patch);
		assertEquals("[lineAlineBlineC]", page_s0.toString());
	}

	public void testCross() throws Exception {
		WootSite site0 = this.createSite("site0");
		WootSite site1 = this.createSite("site1");
		site0.createPage("index");
		site1.createPage("index");
		WootPage page_site0 = (WootPage) site0._getPage("index");
		WootPage page_site1 = (WootPage) site1._getPage("index");

		Vector<WootOp> data = new Vector<WootOp>();
		Patch patch = new PatchImpl();
		patch.setPageId("index");

		WootOp op1 = (WootOp) site0.ins(page_site0, "Hello,", 0);
		WootOp op2 = (WootOp) site1.ins(page_site1, " World", 0);
		// we musn't do the test using getPage, because in the real case
		// we call after each ins, or del operation the savePage method in order
		// to store modifications in persistente storage, we can bypass this
		// problem
		// with the use of the instance WootPage (created previously)...
		// page_sitex
		site0._storePage(page_site0);
		site1._storePage(page_site1);

		assertEquals("[Hello,]", page_site0.toString());
		assertEquals("[ World]", page_site1.toString());

		data.addElement(op2);
		patch.setData(data);
		site0.deliver(patch);
		data.clear();
		data.addElement(op1);
		patch.setData(data);
		site1.deliver(patch);

		// When we call receive the modification done to the page
		// are automatically saved, we should call get page to get
		// the latest version
		assertEquals("[Hello, World]", site0.getPage("index", WootSite.REAL_MODE));
		assertEquals(site0.getPage("index", WootSite.REAL_MODE), site1.getPage("index", WootSite.REAL_MODE));
	}

	public void testSimpleDel() throws Exception {
		WootSite site0 = this.createSite("site0");
		String pageId = (String) site0.createPage("index");
		WootPage page = (WootPage) site0._getPage(pageId);

		site0.ins(page, "Erase me ! :)", 0);
		site0.del(page, 0);

		assertEquals("[Erase me ! :)]", page.toString());
		assertEquals("", page.toHumanString());
	}

	public void testUpdateSameLine() throws Exception {
		WootSite site0 = this.createSite("site0");
		WootSite site1 = this.createSite("site1");
		site0.createPage("index");
		site1.createPage("index");
		WootPage page_site0 = (WootPage) site0._getPage("index");
		WootPage page_site1 = (WootPage) site1._getPage("index");

		Vector<WootOp> data = new Vector<WootOp>();
		Patch patch = new PatchImpl();
		patch.setPageId("index");

		WootOp op00 = (WootOp) site0.ins(page_site0, "toto titi", 0);
		site0._storePage(page_site0);
		assertEquals("[toto titi]", site0.getPage("index", WootSite.REAL_MODE));

		// send op00
		data.clear();
		data.addElement(op00);
		patch.setData(data);
		site1.deliver(patch);
		assertEquals("[toto titi]", site1.getPage("index", WootSite.REAL_MODE));

		page_site0 = (WootPage) site0._getPage("index");
		page_site1 = (WootPage) site1._getPage("index");

		// update on site1
		WootOp op10 = (WootOp) site0.del(page_site0, 0);
		WootOp op11 = (WootOp) site0.ins(page_site0, "toto titi tata", 0);
		site0._storePage(page_site0);
		assertEquals("toto titi tata\n", page_site0.toHumanString());

		// update on site2
		page_site1 = (WootPage) site1._getPage("index");
		WootOp op20 = (WootOp) site1.del(page_site1, 0);
		WootOp op21 = (WootOp) site1.ins(page_site1, "toto", 0);
		site1._storePage(page_site1);
		assertEquals("toto\n", site1.getPage("index", WootSite.HUMAN_MODE));

		// send op10
		data.clear();
		data.addElement(op10);
		// patch.setData(data);
		// site1.receive(patch);

		// send op11
		// data.clear();
		data.addElement(op11);
		patch.setData(data);
		site1.deliver(patch);

		// send op20
		data.clear();
		data.addElement(op20);
		// patch.setData(data);
		// site0.receive(patch);

		// send op21
		// data.clear();
		data.addElement(op21);
		patch.setData(data);
		site0.deliver(patch);

		// site0._storePage(page_site0);
		// site1._storePage(page_site1);
		// page_site0 = (WootPage) site0._getPage("index");
		// page_site1 = (WootPage) site1._getPage("index");

		System.out.println("---- site 0 : ----");
		System.out.println(((WootPage) site0._getPage("index")).toHumanString());
		System.out.println("---- end");
		System.out.println("---- site 1 : ----");
		System.out.println(((WootPage) site1._getPage("index")).toHumanString());
		System.out.println("---- end");
	}

	public void testTP2() throws Exception {
		WootSite site0 = this.createSite("site0");
		WootSite site1 = this.createSite("site1");
		WootSite site2 = this.createSite("site2");
		String pageId = (String) site0.createPage("index");
		site1.createPage("index");
		site2.createPage("index");
		WootPage page_site0 = (WootPage) site0._getPage(pageId);
		WootPage page_site1 = (WootPage) site1._getPage(pageId);
		WootPage page_site2 = (WootPage) site2._getPage(pageId);

		WootOp op0 = (WootOp) site0.ins(page_site0, "a", 0);
		WootOp op1 = (WootOp) site1.ins(page_site0, "b", 1);
		WootOp op2 = (WootOp) site2.ins(page_site0, "c", 2);
		site0._storePage(page_site0);

		assertEquals("[abc]", site0.getPage(pageId, WootSite.REAL_MODE));

		Patch patch = new PatchImpl();
		Vector<WootOp> data = new Vector<WootOp>();
		patch.setPageId("index");
		data.addElement(op0);
		data.addElement(op1);
		data.addElement(op2);
		patch.setData(data);

		site1.deliver(patch);
		site2.deliver(patch);

		assertEquals(site0.getPage(pageId, WootSite.REAL_MODE), site1.getPage(pageId, WootSite.REAL_MODE));
		assertEquals(site1.getPage(pageId, WootSite.REAL_MODE), site2.getPage(pageId, WootSite.REAL_MODE));

		page_site1 = (WootPage) site1._getPage(pageId);
		page_site2 = (WootPage) site2._getPage(pageId);

		WootOp op3 = (WootOp) site0.ins(page_site0, "y", 2);
		WootOp op4 = (WootOp) site1.del(page_site1, 2);
		WootOp op5 = (WootOp) site2.ins(page_site2, "x", 3);
		site0._storePage(page_site0);
		site1._storePage(page_site1);
		site2._storePage(page_site2);

		// crux
		data.clear();
		data.addElement(op5);
		patch.setData(data);
		site1.deliver(patch);

		data.clear();
		data.addElement(op4);
		patch.setData(data);
		site2.deliver(patch);

		assertEquals(site1.getPage(pageId, WootSite.REAL_MODE), site2.getPage(pageId, WootSite.REAL_MODE));

		// op3 descent
		data.clear();
		data.addElement(op3);
		patch.setData(data);
		site1.deliver(patch);

		site2.deliver(patch);

		assertEquals(site1.getPage(pageId, WootSite.REAL_MODE), site2.getPage(pageId, WootSite.REAL_MODE));

		data.clear();
		data.addElement(op4);
		patch.setData(data);
		site0.deliver(patch);

		data.clear();
		data.addElement(op5);
		patch.setData(data);
		site0.deliver(patch);

		assertEquals(site0.getPage(pageId, WootSite.REAL_MODE), site1.getPage(pageId, WootSite.REAL_MODE));
	}

	public void testTPUrso() throws Exception {
		WootSite site0 = this.createSite("site0");
		WootSite site1 = this.createSite("site1");
		WootSite site2 = this.createSite("site2");
		String pageId = (String) site0.createPage("index");
		site1.createPage(pageId);
		site2.createPage(pageId);
		WootPage page_site0 = (WootPage) site0._getPage(pageId);
		WootPage page_site1 = (WootPage) site1._getPage(pageId);
		WootPage page_site2 = (WootPage) site2._getPage(pageId);

		WootOp op0 = (WootOp) site0.ins(page_site0, "b", 0);
		WootOp op1 = (WootOp) site0.ins(page_site0, "e", 1);
		site0._storePage(page_site0);

		Patch patch = new PatchImpl();
		patch.setPageId(pageId);
		Vector<WootOp> data = new Vector<WootOp>();
		data.addElement(op1);
		data.addElement(op0);
		patch.setData(data);

		site1.deliver(patch);
		site2.deliver(patch);

		// s[0].ins('0', 1); //op2
		// s[1].ins('1', 1); //op3
		page_site0 = (WootPage) site0._getPage(pageId);
		page_site1 = (WootPage) site1._getPage(pageId);
		WootOp op2 = (WootOp) site0.ins(page_site0, "0", 1);
		WootOp op3 = (WootOp) site1.ins(page_site1, "1", 1);
		site0._storePage(page_site0);
		site1._storePage(page_site1);

		data.clear();
		data.addElement(op2);
		patch.setData(data);

		// s[2].receive(wbc.ElementAt(2));
		site2.deliver(patch);

		// s[2].ins('2', 1); // op4
		page_site2 = (WootPage) site2._getPage(pageId);
		WootOp op4 = (WootOp) site2.ins(page_site2, "2", 1);
		site2._storePage(page_site2);

		data.clear();
		data.addElement(op3);
		patch.setData(data);

		// s[2].receive(wbc.ElementAt(3));
		site2.deliver(patch);

		// s[0].receive(wbc.ElementAt(3));
		site0.deliver(patch);

		// s[0].receive(wbc.ElementAt(4));
		data.clear();
		data.addElement(op4);
		patch.setData(data);
		site0.deliver(patch);

		// assertEquals(s[0].getWootString(), s[2].getWootString());
		assertEquals(site0.getPage(pageId, WootSite.REAL_MODE), site2.getPage(pageId, WootSite.REAL_MODE));
	}

	public WootSite createSite(String id) throws Exception {
		File testsDir = new File(MolliUrsoTests.WORKING_DIR + id);
		if (testsDir.exists()) {
			this.cleanTests(testsDir.toString());

		}
		if (!testsDir.mkdir()) {
			throw new RuntimeException("Can't make tests directory :" + testsDir);

		}

		// create properties file
		Properties properties = new Properties();
		properties.put("wooki.site.id", id);
		properties.put("wooki.working.dir", MolliUrsoTests.WORKING_DIR + id + File.separator);

		String initFile = MolliUrsoTests.WORKING_DIR + id + File.separator + "unicity.properties";
		properties.store(new FileOutputStream(initFile), null);

		WootSite algorithm = new WootSite(id, MolliUrsoTests.WORKING_DIR + id + File.separator);

		return algorithm;

	}

	private void cleanTests(String directory) throws Exception {
		File rootDir = new File(directory);
		if (rootDir.exists()) {
			String[] children = rootDir.list();

			for (String s : children) {
				File toErase = new File(directory, s);
				if (toErase.isDirectory()) {
					cleanTests(toErase.toString());

				} else {
					toErase.delete();
				}
			}
			rootDir.delete();
		}
	}
}




See more files for this project here

PeerWriter

PeerWriter is a collaborative text editor. Multiple peers can edit the same document while they see overall changes in real-time. PeerWriter is based on a decentralized infrastructure, using a non-locking concurrency protocol ensuring global consistency.

Project homepage: http://sourceforge.net/projects/peerwriter
Programming language(s): Java,XML
License: gpl2

  MolliUrsoTests.java
  PatchImpl.java
  PerformanceTests.java
  WootRowTest.java