public void testHosts() throws Exception { ZkRing ring = ZkRing.create(getZk(), coordinator, ring_group_root, 1, null, 1); assertEquals(0, ring.getHosts().size()); Host host = ring.addHost(LOCALHOST); assertEquals(LOCALHOST, host.getAddress()); for (int i = 0; i < 20; i++) { if (!ring.getHosts().isEmpty()) { break; } Thread.sleep(100); } assertEquals(Collections.singleton(host), ring.getHosts()); assertEquals(LOCALHOST, ring.getHostByAddress(LOCALHOST).getAddress()); ring.close(); // assure that hosts reload well, too ring = new ZkRing(getZk(), ring_root, null, coordinator); assertEquals(1, ring.getHosts().size()); assertEquals(Collections.singleton(host), ring.getHosts()); assertEquals(LOCALHOST, ring.getHostByAddress(LOCALHOST).getAddress()); assertTrue(ring.removeHost(LOCALHOST)); assertNull(ring.getHostByAddress(LOCALHOST)); assertFalse(ring.removeHost(LOCALHOST)); ring.close(); }
public void testListenersPreservedWhenHostAdded() throws Exception { ZkRing ring = ZkRing.create( getZk(), coordinator, ZkPath.append(getRoot(), "ring-group-one"), 1, null, 10); Host h1 = ring.addHost(new PartitionServerAddress("localhost", 1)); MockHostCommandQueueChangeListener l1 = new MockHostCommandQueueChangeListener(); h1.setCommandQueueChangeListener(l1); MockHostStateChangeListener l2 = new MockHostStateChangeListener(); h1.setStateChangeListener(l2); ring.addHost(new PartitionServerAddress("localhost", 2)); h1.setState(HostState.UPDATING); synchronized (l2) { l2.wait(WAIT_TIME); } assertEquals(h1, l2.calledWith); h1.enqueueCommand(HostCommand.EXECUTE_UPDATE); l1.waitForNotification(); assertEquals(h1, l1.calledWith); }