public void testLimeDHTManager() throws Exception { DHTSettings.PERSIST_ACTIVE_DHT_ROUTETABLE.setValue(true); DHTSettings.PERSIST_DHT_DATABASE.setValue(true); TestExecutor executor = new TestExecutor(); DHTManagerImpl manager = new DHTManagerImpl(executor, dhtControllerFactory); try { assertFalse(manager.isRunning()); assertFalse(manager.isBootstrapped()); assertFalse(manager.isWaitingForNodes()); assertEquals(0, manager.getActiveDHTNodes(10).size()); manager.start(DHTMode.ACTIVE); assertEquals(1, executor.getRunners().size()); Thread.sleep(200); assertTrue(manager.isRunning()); assertEquals(DHTMode.ACTIVE, manager.getDHTMode()); KUID activeLocalNodeID = manager.getMojitoDHT().getLocalNodeID(); // Rry starting again manager.start(DHTMode.ACTIVE); Thread.sleep(200); assertEquals(activeLocalNodeID, manager.getMojitoDHT().getLocalNodeID()); // Try switching mode manager.start(DHTMode.PASSIVE); Thread.sleep(200); assertEquals(DHTMode.PASSIVE, manager.getDHTMode()); assertTrue(manager.isRunning()); KUID passiveLocalNodeID = manager.getMojitoDHT().getLocalNodeID(); assertNotEquals(activeLocalNodeID, passiveLocalNodeID); manager.start(DHTMode.PASSIVE); Thread.sleep(200); assertEquals(passiveLocalNodeID, manager.getMojitoDHT().getLocalNodeID()); manager.addressChanged(); Thread.sleep(200); assertEquals(passiveLocalNodeID, manager.getMojitoDHT().getLocalNodeID()); // Try switching multiple times (does some Disk I/O) manager.start(DHTMode.ACTIVE); manager.start(DHTMode.PASSIVE); manager.start(DHTMode.ACTIVE); // Give it enough time --> previous starts were offloaded to threadpool Thread.sleep(10000); // We should be in active mode assertEquals(DHTMode.ACTIVE, manager.getDHTMode()); // The Node ID should be something else than passiveLocalNodeID assertNotEquals(passiveLocalNodeID, manager.getMojitoDHT().getLocalNodeID()); // The Node ID should be (but it's not guaranteed) equals to activeLocalNodeID assertEquals(activeLocalNodeID, manager.getMojitoDHT().getLocalNodeID()); } finally { manager.stop(); } }