package org.infinispan.jmx;
import static org.infinispan.test.TestingUtil.getCacheObjectName;
import java.io.Serializable;
import javax.management.Attribute;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.infinispan.Cache;
import org.infinispan.stats.impl.AbstractClusterStats;
import org.infinispan.test.TestingUtil;
import org.testng.annotations.Test;
/**
*
*/
@Test(groups = "functional", testName = "jmx.ClusterCacheStatsMBeanTest")
public class ClusterCacheStatsMBeanTest extends AbstractClusterMBeanTest {
public ClusterCacheStatsMBeanTest() {
super(ClusterCacheStatsMBeanTest.class.getName());
}
public void testClusterStats() throws Exception {
Cache<String, Serializable> cache1 = manager(0).getCache(cachename);
MBeanServer mBeanServer = PerThreadMBeanServerLookup.getThreadMBeanServer();
ObjectName clusterStats = getCacheObjectName(jmxDomain, cachename + "(repl_sync)", "ClusterCacheStats");
mBeanServer.setAttribute(clusterStats, new Attribute("StatisticsEnabled", false));
assert !(boolean) mBeanServer.getAttribute(clusterStats, "StatisticsEnabled");
mBeanServer.setAttribute(clusterStats, new Attribute("StatisticsEnabled", true));
assert (boolean) mBeanServer.getAttribute(clusterStats, "StatisticsEnabled");
long newStaleThreshold = AbstractClusterStats.DEFAULT_STALE_STATS_THRESHOLD - 1;
mBeanServer.setAttribute(clusterStats, new Attribute("StaleStatsThreshold", newStaleThreshold));
assertAttributeValue(mBeanServer, clusterStats, "StaleStatsThreshold", newStaleThreshold);
cache1.put("a1", "b1");
cache1.put("a2", "b2");
cache1.put("a3", "b3");
cache1.put("a4", "b4");
assertAttributeValue(mBeanServer, clusterStats, "NumberOfEntries", 4);
assertAttributeValue(mBeanServer, clusterStats, "Stores", 4);
assertAttributeValue(mBeanServer, clusterStats, "Evictions", 0);
assertAttributeValueGreaterThanOrEqualTo(mBeanServer, clusterStats, "AverageWriteTime", 0);
cache1.remove("a1");
//sleep so we pick up refreshed values after remove
TestingUtil.sleepThread(AbstractClusterStats.DEFAULT_STALE_STATS_THRESHOLD + 1000);
assertAttributeValue(mBeanServer, clusterStats, "RemoveHits", 1);
assertAttributeValue(mBeanServer, clusterStats, "RemoveMisses", 0);
assertAttributeValue(mBeanServer, clusterStats, "NumberOfLocksAvailable", 0);
assertAttributeValue(mBeanServer, clusterStats, "NumberOfLocksHeld", 0);
assertAttributeValue(mBeanServer, clusterStats, "Activations", 0);
assertAttributeValue(mBeanServer, clusterStats, "Passivations", 0);
assertAttributeValue(mBeanServer, clusterStats, "Invalidations", 0);
assertAttributeValue(mBeanServer, clusterStats, "CacheLoaderLoads", 0);
assertAttributeValue(mBeanServer, clusterStats, "CacheLoaderMisses", 0);
assertAttributeValue(mBeanServer, clusterStats, "StoreWrites", 0);
}
}