1 5 package com.tctest; 6 7 import com.tc.management.beans.L2MBeanNames; 8 import com.tc.management.beans.TCServerInfoMBean; 9 import com.tc.object.config.ConfigVisitor; 10 import com.tc.object.config.DSOClientConfigHelper; 11 import com.tc.object.config.TransparencyClassSpec; 12 import com.tc.simulator.app.ApplicationConfig; 13 import com.tc.simulator.listener.ListenerProvider; 14 import com.tc.util.Assert; 15 import com.tctest.runner.AbstractTransparentApp; 16 17 import java.io.IOException ; 18 import java.util.concurrent.CyclicBarrier ; 19 20 import javax.management.MBeanServerConnection ; 21 import javax.management.MBeanServerInvocationHandler ; 22 import javax.management.remote.JMXConnector ; 23 import javax.management.remote.JMXConnectorFactory ; 24 import javax.management.remote.JMXServiceURL ; 25 26 public class JMXHeartBeatTestApp extends AbstractTransparentApp { 27 28 public static final String CONFIG_FILE = "config-file"; 29 public static final String PORT_NUMBER = "port-number"; 30 public static final String HOST_NAME = "host-name"; 31 public static final String JMX_PORT = "jmx-port"; 32 33 private final ApplicationConfig config; 34 35 private final int initialNodeCount = getParticipantCount(); 36 private final CyclicBarrier stage1 = new CyclicBarrier (initialNodeCount); 37 38 private MBeanServerConnection mbsc = null; 39 private JMXConnector jmxc; 40 private TCServerInfoMBean serverMBean; 41 42 public JMXHeartBeatTestApp(String appId, ApplicationConfig config, ListenerProvider listenerProvider) { 43 super(appId, config, listenerProvider); 44 this.config = config; 45 } 46 47 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 48 49 String testClass = JMXHeartBeatTestApp.class.getName(); 50 String methodExpression = "* " + testClass + "*.*(..)"; 51 config.addWriteAutolock(methodExpression); 52 TransparencyClassSpec spec = config.getOrCreateSpec(testClass); 53 config.addIncludePattern(testClass + "$*"); 54 55 spec.addRoot("stage1", "stage1"); 57 } 58 59 public void run() { 60 try { 61 runTest(); 62 } catch (Throwable t) { 63 notifyError(t); 64 } 65 } 66 67 private boolean isServerAlive() { 68 boolean isAlive = false; 69 70 try { 71 String theUrl = "service:jmx:rmi:///jndi/rmi://localhost:" + config.getAttribute(JMX_PORT) + "/jmxrmi"; 72 JMXServiceURL url = new JMXServiceURL (theUrl); 73 jmxc = JMXConnectorFactory.connect(url, null); 74 mbsc = jmxc.getMBeanServerConnection(); 75 serverMBean = (TCServerInfoMBean) MBeanServerInvocationHandler 76 .newProxyInstance(mbsc, L2MBeanNames.TC_SERVER_INFO, TCServerInfoMBean.class, false); 77 String result = serverMBean.getHealthStatus(); 78 jmxc.close(); 79 isAlive = result.equals("OK"); 80 } catch (Throwable e) { 81 e.printStackTrace(); 82 } 83 finally { 84 if (jmxc != null) { 85 try { 86 jmxc.close(); 87 } catch (IOException e) { 88 throw new RuntimeException (e); 89 } 90 } 91 } 92 93 return isAlive; 94 } 95 96 private void runTest() throws Throwable { 97 98 Assert.assertEquals(true, isServerAlive()); 99 echo("Server is alive"); 100 config.getServerControl().crash(); 101 Assert.assertEquals(false, isServerAlive()); 102 echo("Server is down"); 103 config.getServerControl().start(30 * 1000); 104 stage1.await(); 105 echo("Server restarted successfully."); 106 Assert.assertEquals(true, isServerAlive()); 107 } 108 109 private static void echo(String msg) { 110 System.out.println(msg); 111 } 112 113 } 114
| Popular Tags
|