package zx.soft.zookeeper.book; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import zx.soft.zookeeper.book.Master; import zx.soft.zookeeper.book.Master.MasterStates; public class TestMasterElection extends BaseTestCase { private static final Logger logger = LoggerFactory.getLogger(TestMasterElection.class); @Test(timeout = 50000) public void electMaster() throws Exception { Master master = new Master("localhost:" + port); master.startZK(); while (!master.isConnected()) { Thread.sleep(500); } master.bootstrap(); master.runForMaster(); while (master.getState() == MasterStates.RUNNING) { Thread.sleep(100); } Assert.assertTrue("Master not elected.", master.getState() == MasterStates.ELECTED); master.close(); } @Test(timeout = 50000) public void reElectMaster() throws Exception { Master master = new Master("localhost:" + port); master.startZK(); while (!master.isConnected()) { Thread.sleep(500); } master.bootstrap(); master.runForMaster(); while (master.getState() == MasterStates.RUNNING) { Thread.sleep(100); } master.close(); Master bmaster = new Master("localhost:" + port); bmaster.startZK(); while (!bmaster.isConnected()) { Thread.sleep(500); } bmaster.bootstrap(); bmaster.runForMaster(); while (bmaster.getState() == MasterStates.RUNNING) { Thread.sleep(100); } Assert.assertTrue("Master not elected.", bmaster.getState() == MasterStates.ELECTED); bmaster.close(); } @Test(timeout = 50000) public void electSingleMaster() throws Exception { Master master = new Master("localhost:" + port); Master bmaster = new Master("localhost:" + port); master.startZK(); bmaster.startZK(); while (!master.isConnected() || !bmaster.isConnected()) { Thread.sleep(500); } master.bootstrap(); bmaster.bootstrap(); master.runForMaster(); bmaster.runForMaster(); while ((master.getState() == MasterStates.RUNNING) || (bmaster.getState() == MasterStates.RUNNING)) { Thread.sleep(100); } boolean singleMaster = (((master.getState() == MasterStates.ELECTED) && (bmaster.getState() != MasterStates.ELECTED)) || ((master .getState() != MasterStates.ELECTED) && (bmaster.getState() == MasterStates.ELECTED))); Assert.assertTrue("Master not elected.", singleMaster); master.close(); bmaster.close(); } @Test(timeout = 50000) public void testMasterExists() throws Exception { Master master = new Master("localhost:" + port); master.startZK(); while (!master.isConnected()) { Thread.sleep(500); } master.bootstrap(); master.masterExists(); int attempts = 10; boolean elected = true; while ((master.getState() == MasterStates.RUNNING)) { Thread.sleep(200); if (attempts-- == 0) { logger.info("Breaking..."); elected = false; break; } } Assert.assertTrue("Master not elected.", elected); master.close(); } }