package org.springside.examples.showcase.unit.jmx; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springside.examples.showcase.jmx.client.JmxClientService; import org.springside.examples.showcase.jmx.server.ServerConfigMBean; import org.springside.modules.log.Log4jMBean; import org.springside.modules.test.spring.SpringContextTestCase; import org.springside.modules.utils.jmx.JmxClientTemplate; /** * springside-extension中{@link JmxClientTemplate}的测试用例. * * @author calvin */ @DirtiesContext @ContextConfiguration(locations = { "/applicationContext-test.xml", "/jmx/applicationContext-jmx-server.xml", "/log/applicationContext-log.xml" }) public class JmxClientTemplateTest extends SpringContextTestCase { private JmxClientTemplate jmxClientTemplate; private ServerConfigMBean serverConfigMbean; @Before public void setUp() throws Exception { jmxClientTemplate = new JmxClientTemplate("service:jmx:rmi:///jndi/rmi://localhost:18080/jmxrmi"); serverConfigMbean = jmxClientTemplate.createMBeanProxy(ServerConfigMBean.SERVER_CONFIG_MBEAN_NAME, ServerConfigMBean.class); } @After public void tearDown() throws Exception { jmxClientTemplate.close(); } @Test public void accessMBeanAttribute() { String oldName = serverConfigMbean.getNodeName(); serverConfigMbean.setNodeName("foo"); assertEquals("foo", serverConfigMbean.getNodeName()); serverConfigMbean.setNodeName(oldName); } @Test public void accessMBeanAttributeByReflection() { String oldName = (String) jmxClientTemplate .getAttribute(ServerConfigMBean.SERVER_CONFIG_MBEAN_NAME, "NodeName"); jmxClientTemplate.setAttribute(ServerConfigMBean.SERVER_CONFIG_MBEAN_NAME, "NodeName", "foo"); assertEquals("foo", jmxClientTemplate.getAttribute(ServerConfigMBean.SERVER_CONFIG_MBEAN_NAME, "NodeName")); jmxClientTemplate.setAttribute(ServerConfigMBean.SERVER_CONFIG_MBEAN_NAME, "NodeName", oldName); } @Test public void invokeMBeanMethodByReflection() { //无参数 jmxClientTemplate.inoke(JmxClientService.TRACE_MBEAN_NAME, "startTrace"); //以参数Class名描述函数签名 assertEquals("WARN", jmxClientTemplate.invoke(Log4jMBean.LOG4J_MBEAN_NAME, "getLoggerLevel", new String[] { "java.lang.String" }, new Object[] { "foo" })); //以参数Class类描述函数签名 assertEquals("WARN", jmxClientTemplate.invoke(Log4jMBean.LOG4J_MBEAN_NAME, "getLoggerLevel", new Class[] { String.class }, new Object[] { "foo" })); } }