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