package ch.usi.da.paxos; import static org.junit.Assert.assertEquals; import java.io.File; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; import ch.usi.da.paxos.api.StableStorage; import ch.usi.da.paxos.message.Value; import ch.usi.da.paxos.storage.BerkeleyStorage; import ch.usi.da.paxos.storage.BufferArray; import ch.usi.da.paxos.storage.Decision; import ch.usi.da.paxos.storage.InMemory; import ch.usi.da.paxos.storage.RocksDbStorage; public class TestStorage { Logger logger = Logger.getLogger("ch.usi.da"); @Before public void initialize() throws Exception { logger.setLevel(Level.ERROR); } @Test public void BufferArray() throws Exception { StableStorage db = new BufferArray(); Decision d = new Decision(0,1L,42,new Value("id","value".getBytes())); assertEquals(false,db.containsDecision(1L)); db.putDecision(1L,d); assertEquals(true,db.containsDecision(1L)); assertEquals(d,db.getDecision(1L)); assertEquals(false,db.containsBallot(1L)); db.putBallot(1L,100); assertEquals(true,db.containsBallot(1L)); assertEquals(100,db.getBallot(1L)); Decision d2 = new Decision(0,15001L,43,new Value("id","value".getBytes())); db.putDecision(15001L,d2); assertEquals(false,db.containsDecision(1L)); assertEquals(true,db.containsDecision(15001L)); assertEquals(d2,db.getDecision(15001L)); db.close(); } @Test public void InMemory() throws Exception { StableStorage db = new InMemory(); Decision d = new Decision(0,1L,42,new Value("id","value".getBytes())); assertEquals(false,db.containsDecision(1L)); db.putDecision(1L,d); assertEquals(true,db.containsDecision(1L)); assertEquals(d,db.getDecision(1L)); assertEquals(false,db.containsBallot(1L)); db.putBallot(1L,100); assertEquals(true,db.containsBallot(1L)); assertEquals(100,db.getBallot(1L)); db.close(); } @Test public void BerkeleyStorage() throws Exception { File file = new File("/tmp/ringpaxos-db/0"); file.mkdirs(); BerkeleyStorage db = new BerkeleyStorage(file,false,false); Decision d = new Decision(0,1L,42,new Value("id","value".getBytes())); Decision d2 = new Decision(0,1L,43,new Value("id","value".getBytes())); //assertEquals(false,db.containsDecision(1L)); db.putBallot(1L,5); db.putDecision(1L,d); db.putDecision(1L,d2); db.putBallot(1L,15); assertEquals(true,db.containsDecision(1L)); assertEquals(d2,db.getDecision(1L)); db.putDecision(2L,d); db.putDecision(3L,d); db.putDecision(4L,d); db.putDecision(5L,d); db.putDecision(6L,d); db.putDecision(7L,d); db.putDecision(8L,d); db.putDecision(9L,d); db.putDecision(10L,d); assertEquals(true,db.trim(7L)); assertEquals(new Long(7),db.getDecision(-1L).getInstance()); assertEquals(null,db.getDecision(6L)); assertEquals(d,db.getDecision(7L)); // ballots are not trimmed assertEquals(false,db.containsBallot(1L)); db.putBallot(1L,100); assertEquals(true,db.containsBallot(1L)); assertEquals(100,db.getBallot(1L)); db.close(); // re-open db = new BerkeleyStorage(file,false,false); assertEquals(d,db.getDecision(7L)); assertEquals(100,db.getBallot(1L)); db.close(); } /*@Test public void BerkeleyList() throws Exception { File file = new File("/tmp/ringpaxos-db/23611"); BerkeleyStorage db = new BerkeleyStorage(file,true,false); db.listAllBallots(); db.listAllValues(); db.close(); }*/ @Test public void RocksDbStorage() throws Exception { RocksDbStorage db = new RocksDbStorage(); Decision d = new Decision(0,1L,42,new Value("id","value".getBytes())); Decision d2 = new Decision(0,1L,43,new Value("id","value".getBytes())); //assertEquals(false,db.containsDecision(1L)); db.putBallot(1L,5); db.putDecision(1L,d); db.putDecision(1L,d2); db.putBallot(1L,15); assertEquals(true,db.containsDecision(1L)); assertEquals(d2,db.getDecision(1L)); db.putDecision(2L,d); db.putDecision(3L,d); db.putDecision(4L,d); db.putDecision(5L,d); db.putDecision(6L,d); db.putDecision(7L,d); db.putDecision(8L,d); db.putDecision(9L,d); db.putDecision(10L,d); assertEquals(true,db.trim(7L)); assertEquals(new Long(7),db.getDecision(-1L).getInstance()); assertEquals(null,db.getDecision(6L)); assertEquals(d,db.getDecision(7L)); // ballots are not trimmed assertEquals(false,db.containsBallot(1L)); db.putBallot(1L,100); assertEquals(true,db.containsBallot(1L)); assertEquals(100,db.getBallot(1L)); db.close(); } }