package ch.usi.da.paxos; import static org.junit.Assert.assertEquals; import java.net.InetSocketAddress; import java.util.Random; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.zookeeper.ZooKeeper; import org.junit.Before; import org.junit.Test; import ch.usi.da.paxos.api.PaxosRole; import ch.usi.da.paxos.ring.RingManager; public class TestTopology { Logger logger = Logger.getLogger("ch.usi.da"); Random rand = new Random(); @Before public void initialize() throws Exception { logger.setLevel(Level.ERROR); } @Test public void RingManager() throws Exception { ZooKeeper zoo = new ZooKeeper("127.0.0.1:2181",500,null); InetSocketAddress addr = new InetSocketAddress(Util.getHostAddress(),getPort()); RingManager rm1 = new RingManager(2,1,addr,zoo,"/ringpaxos"); rm1.init(); Thread.sleep(1000); assertEquals(1,rm1.getRing().size()); assertEquals(0,rm1.getAcceptors().size()); assertEquals(0,rm1.getProposers().size()); assertEquals(0,rm1.getLearners().size()); rm1.registerRole(PaxosRole.Acceptor); rm1.registerRole(PaxosRole.Learner); rm1.registerRole(PaxosRole.Proposer); Thread.sleep(1000); assertEquals(1,rm1.getRing().size()); assertEquals(1,rm1.getAcceptors().size()); assertEquals(1,rm1.getProposers().size()); assertEquals(1,rm1.getLearners().size()); assertEquals(2,rm1.getCoordinatorID()); assertEquals(2,rm1.getLastAcceptor()); ZooKeeper zoo2 = new ZooKeeper("127.0.0.1:2181",500,null); InetSocketAddress addr2 = new InetSocketAddress(Util.getHostAddress(),getPort()); RingManager rm2 = new RingManager(1,1,addr2,zoo2,"/ringpaxos"); rm2.init(); Thread.sleep(1000); assertEquals(2,rm1.getRing().size()); rm2.registerRole(PaxosRole.Acceptor); rm2.registerRole(PaxosRole.Learner); rm2.registerRole(PaxosRole.Proposer); Thread.sleep(1000); assertEquals(2,rm1.getAcceptors().size()); assertEquals(2,rm1.getProposers().size()); assertEquals(2,rm1.getLearners().size()); assertEquals(1,rm1.getCoordinatorID()); assertEquals(2,rm1.getLastAcceptor()); zoo.close(); zoo2.close(); } @Test public void TopoManager() throws Exception { ZooKeeper zoo = new ZooKeeper("127.0.0.1:2181",500,null); InetSocketAddress addr = new InetSocketAddress(Util.getHostAddress(),getPort()); TopologyManager tm1 = new TopologyManager(1,1,addr,zoo,"/ringpaxos"); tm1.init(); assertEquals(1,tm1.getNodes().size()); ZooKeeper zoo2 = new ZooKeeper("127.0.0.1:2181",500,null); InetSocketAddress addr2 = new InetSocketAddress(Util.getHostAddress(),getPort()); TopologyManager tm2 = new TopologyManager(2,1,addr2,zoo2,"/ringpaxos"); tm2.init(); Thread.sleep(1000); assertEquals(2,tm1.getNodes().size()); zoo.close(); zoo2.close(); } private int getPort(){ return 2000 + rand.nextInt(1000); // assign port between 2000-3000 } }