package org.infinispan.server.memcached;
import java.util.Properties;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.ReflectionException;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.jmx.MBeanServerLookup;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;
/**
* Tests whether statistics of clustered Memcached instances
* are calculated correctly.
*
* @author Galder ZamarreƱo
* @since 5.2
*/
@Test(groups = "unstable", testName = "server.memcached.MemcachedClusteredStatsTest",
description = "original group: functional - randomly fails with: expected [2] but found [1])")
public class MemcachedClusteredStatsTest extends MemcachedMultiNodeTest {
private String jmxDomain = MemcachedClusteredStatsTest.class.getSimpleName();
private MBeanServerLookup mbeanServerLookup = new ProvidedMBeanServerLookup(MBeanServerFactory.createMBeanServer());
@Override
public EmbeddedCacheManager createCacheManager(int index) {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.REPL_SYNC);
// Per-thread mbean server won't work here because the registration will
// happen in the 'main' thread and the remote call will try to resolve it
// in a lookup instance associated with an 'OOB-' thread.
return TestCacheManagerFactory.createClusteredCacheManagerEnforceJmxDomain(null, jmxDomain + "-" + index, true,
false, builder, mbeanServerLookup);
}
public void testSingleConnectionPerServer() throws MalformedObjectNameException, AttributeNotFoundException,
MBeanException, ReflectionException, InstanceNotFoundException {
ConnectionStatsTest.testGlobalConnections(jmxDomain + "-0", "Memcached", 2,
mbeanServerLookup.getMBeanServer(null));
}
class ProvidedMBeanServerLookup implements MBeanServerLookup {
private final MBeanServer mbeanServer;
ProvidedMBeanServerLookup(MBeanServer mbeanServer) {
this.mbeanServer = mbeanServer;
}
@Override
public MBeanServer getMBeanServer(Properties properties) {
return mbeanServer;
}
}
}