package com.bagri.server.hazelcast; import static com.bagri.core.Constants.*; import static com.bagri.server.hazelcast.util.HazelcastUtils.hz_instance; import static com.bagri.server.hazelcast.util.SpringContextHolder.schema_context; import static org.junit.Assert.*; import java.util.HashMap; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bagri.server.hazelcast.BagriCacheServer; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; public class BagriCacheServerTest { private static String url = "service:jmx:rmi://localhost/jndi/rmi://localhost:3330/jmxrmi"; private static String user = "admin"; private static String password = "password"; private static String adminCtx = "spring/admin-system-context.xml"; @BeforeClass public static void setUpBeforeClass() throws Exception { //<sysproperty key="node.logdir" value="./logs"/> //<sysproperty key="node.name" value="admin"/> //<sysproperty key="com.sun.management.jmxremote" value="true"/> //<sysproperty key="com.sun.management.jmxremote.ssl" value="false"/> //<sysproperty key="bdb.cluster.node.role" value="admin"/> System.setProperty("hz.log.level", "info"); //System.setProperty("bdb.log.level", "trace"); System.setProperty("logback.configurationFile", "hz-logging.xml"); System.setProperty(pn_access_filename, "access.xml"); System.setProperty(pn_cluster_node_name, "admin"); System.setProperty(pn_cluster_node_schemas, ""); System.setProperty(pn_config_path, "src/main/resources"); System.setProperty(pn_config_filename, "config.xml"); System.setProperty(pn_config_context_file, adminCtx); System.setProperty(pn_config_properties_file, "admin.properties"); BagriCacheServer.main(null); } @AfterClass public static void tearDownAfterClass() throws Exception { HazelcastInstance hz = Hazelcast.getHazelcastInstanceByName(hz_instance); ClassPathXmlApplicationContext ctx = (ClassPathXmlApplicationContext) hz.getUserContext().get(schema_context); ctx.close(); } @Test public void testJMXConnection() throws Exception { HashMap env = new HashMap(); String[] creds = new String[] {user, password}; env.put(JMXConnector.CREDENTIALS, creds); JMXServiceURL jmxUrl = new JMXServiceURL(url); //JMXConnector jmxc = JMXConnectorFactory.connect(jmxUrl, env); JMXConnector jmxc = JMXConnectorFactory.newJMXConnector(jmxUrl, null); jmxc.connect(env); MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); String[] domains = mbsc.getDomains(); assertTrue(containsDomain(domains, "com.bagri.db")); ObjectName name = new ObjectName("com.bagri.db:type=Management,name=ClusterManagement"); Object nodes = mbsc.getAttribute(name, "NodeNames"); //System.out.println("got nodes: " + Arrays.toString((String[]) nodes)); String[] sNodes = (String[]) nodes; assertTrue(sNodes.length > 0); } private boolean containsDomain(String[] domains, String domain) { for (String d : domains) { if (d.equals(domain)) return true; } return false; } }