package org.infinispan.jmx; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import javax.management.MBeanServer; import javax.management.ObjectName; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.global.GlobalConfigurationBuilder; import org.infinispan.health.HealthStatus; import org.infinispan.health.jmx.HealthJMXExposer; import org.infinispan.test.MultipleCacheManagersTest; import org.infinispan.test.TestingUtil; import org.testng.annotations.Test; @Test(groups = "functional", testName = "jmx.HealthJmxTest") public class HealthJmxTest extends MultipleCacheManagersTest { @Override protected void createCacheManagers() throws Throwable { addClusterEnabledCacheManager(getGlobalConfigurationBuilder("r1"), getConfigurationBuilder()) .defineConfiguration("test", getConfigurationBuilder().build()); } private ConfigurationBuilder getConfigurationBuilder() { ConfigurationBuilder cb = new ConfigurationBuilder(); cb.clustering().cacheMode(CacheMode.DIST_SYNC) .stateTransfer().awaitInitialTransfer(false) .partitionHandling().enabled(true); return cb; } private GlobalConfigurationBuilder getGlobalConfigurationBuilder(String rackId) { GlobalConfigurationBuilder gcb = GlobalConfigurationBuilder.defaultClusteredBuilder(); gcb.globalJmxStatistics() .enable() .mBeanServerLookup(new PerThreadMBeanServerLookup()) .transport().rackId(rackId); return gcb; } public void testHealthCheckAPI() throws Exception { //given //we need this to start a cache with a custom name cacheManagers.get(0).getCache("test").put("1", "1"); final MBeanServer mBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer(); //when String domain0 = manager(0).getCacheManagerConfiguration().globalJmxStatistics().domain(); ObjectName healthAPI0 = TestingUtil.getCacheManagerObjectName(domain0, "DefaultCacheManager", HealthJMXExposer.OBJECT_NAME); Object numberOfCpus = mBeanServer.getAttribute(healthAPI0, "NumberOfCpus"); Object totalMemoryKb = mBeanServer.getAttribute(healthAPI0, "TotalMemoryKb"); Object freeMemoryKb = mBeanServer.getAttribute(healthAPI0, "FreeMemoryKb"); Object clusterHealth = mBeanServer.getAttribute(healthAPI0, "ClusterHealth"); Object clusterName = mBeanServer.getAttribute(healthAPI0, "ClusterName"); Object numberOfNodes = mBeanServer.getAttribute(healthAPI0, "NumberOfNodes"); Object cacheHealth = mBeanServer.getAttribute(healthAPI0, "CacheHealth"); //then assertTrue((int) numberOfCpus > 0); assertTrue((long) totalMemoryKb > 0); assertTrue((long) freeMemoryKb > 0); assertEquals((String) clusterHealth, HealthStatus.HEALTHY.toString()); assertEquals((String) clusterName, "ISPN"); assertEquals((int) numberOfNodes, 1); assertEquals(((String[]) cacheHealth)[0], "test"); assertEquals(((String[]) cacheHealth)[1], HealthStatus.HEALTHY.toString()); } }