public void testClientAndServerEmptyConfig() throws Exception {
final StandbyServer server = new StandbyServer(this.port, this.storeS);
server.start();
System.setProperty(StandbyClient.CLIENT_ID_PROPERTY_NAME, "Bar");
final StandbyClient client = new StandbyClient("127.0.0.1", this.port, this.storeC);
client.start();
final MBeanServer jmxServer = ManagementFactory.getPlatformMBeanServer();
ObjectName status = new ObjectName(StandbyStatusMBean.JMX_NAME + ",id=*");
ObjectName clientStatus = new ObjectName(client.getMBeanName());
ObjectName serverStatus = new ObjectName(server.getMBeanName());
try {
Set<ObjectName> instances = jmxServer.queryNames(status, null);
assertEquals(3, instances.size());
ObjectName connectionStatus = null;
for (ObjectName s : instances) {
if (!s.equals(clientStatus) && !s.equals(serverStatus)) connectionStatus = s;
}
assertNotNull(connectionStatus);
assertTrue(jmxServer.isRegistered(clientStatus));
assertTrue(jmxServer.isRegistered(serverStatus));
assertTrue(jmxServer.isRegistered(connectionStatus));
String m = jmxServer.getAttribute(clientStatus, "Mode").toString();
if (!m.startsWith("client: ")) fail("unexpected mode " + m);
assertEquals("master", jmxServer.getAttribute(serverStatus, "Mode"));
assertEquals(true, jmxServer.getAttribute(serverStatus, "Running"));
assertEquals(true, jmxServer.getAttribute(clientStatus, "Running"));
assertEquals("0", jmxServer.getAttribute(clientStatus, "FailedRequests").toString());
assertEquals("0", jmxServer.getAttribute(clientStatus, "SecondsSinceLastSuccess").toString());
assertEquals("0", jmxServer.invoke(clientStatus, "calcFailedRequests", null, null).toString());
assertEquals("0", jmxServer.invoke(clientStatus, "calcSecondsSinceLastSuccess", null, null).toString());
Thread.sleep(1000);
assertEquals("0", jmxServer.getAttribute(clientStatus, "FailedRequests").toString());
assertEquals("1", jmxServer.getAttribute(clientStatus, "SecondsSinceLastSuccess").toString());
assertEquals("0", jmxServer.invoke(clientStatus, "calcFailedRequests", null, null).toString());
assertEquals("1", jmxServer.invoke(clientStatus, "calcSecondsSinceLastSuccess", null, null).toString());
assertEquals(new Long(2), jmxServer.getAttribute(connectionStatus, "TransferredSegments"));
assertEquals(new Long(128), jmxServer.getAttribute(connectionStatus, "TransferredSegmentBytes"));
// stop the master
jmxServer.invoke(serverStatus, "stop", null, null);
assertEquals(false, jmxServer.getAttribute(serverStatus, "Running"));
m = jmxServer.getAttribute(serverStatus, "Status").toString();
if (!m.equals(StandbyStatusMBean.STATUS_STOPPED) && !m.equals("channel unregistered"))
fail("unexpected Status" + m);
// restart the master
jmxServer.invoke(serverStatus, "start", null, null);
assertEquals(true, jmxServer.getAttribute(serverStatus, "Running"));
assertEquals(true, jmxServer.getAttribute(clientStatus, "Running"));
m = jmxServer.getAttribute(serverStatus, "Status").toString();
if (!m.equals(StandbyStatusMBean.STATUS_STARTING) && !m.equals("channel unregistered"))
fail("unexpected Status" + m);
// stop the slave
jmxServer.invoke(clientStatus, "stop", null, null);
assertEquals(true, jmxServer.getAttribute(serverStatus, "Running"));
assertEquals(false, jmxServer.getAttribute(clientStatus, "Running"));
assertEquals(StandbyStatusMBean.STATUS_STOPPED, jmxServer.getAttribute(clientStatus, "Status"));
// restart the slave
jmxServer.invoke(clientStatus, "start", null, null);
assertEquals(true, jmxServer.getAttribute(clientStatus, "Running"));
assertEquals(StandbyStatusMBean.STATUS_RUNNING, jmxServer.getAttribute(clientStatus, "Status"));
} finally {
client.close();
server.close();
}
assertTrue(!jmxServer.isRegistered(clientStatus));
assertTrue(!jmxServer.isRegistered(serverStatus));