package org.infinispan.server.test.cache.container; import static org.infinispan.server.test.util.ITestUtils.SERVER1_MGMT_PORT; import static org.junit.Assert.assertTrue; import java.util.Scanner; import javax.management.ObjectName; import org.infinispan.arquillian.core.InfinispanResource; import org.infinispan.arquillian.core.RemoteInfinispanServer; import org.infinispan.arquillian.core.RunningServer; import org.infinispan.arquillian.core.WithRunningServer; import org.infinispan.arquillian.utils.MBeanServerConnectionProvider; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.configuration.Configuration; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.server.infinispan.spi.InfinispanSubsystem; import org.jboss.arquillian.junit.Arquillian; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; /** * - test start, default-cache, eviction-executor, listener-executor and replication-queue-executor attributes of cache-container element * - test the cache-container attribute of hotrod-connector, so that we can have different hotrod endpoints for different containers * * @author <a href="mailto:mgencur@redhat.com">Martin Gencur</a> * @author <a href="mailto:jmarkos@redhat.com">Jakub Markos</a> */ @RunWith(Arquillian.class) @WithRunningServer({@RunningServer(name = "cachecontainer")}) public class CacheContainerIT { @InfinispanResource("cachecontainer") RemoteInfinispanServer server1; final String dumpServicesBean = "jboss.msc:type=container,name=jboss-as"; final String dumpServicesOp = "dumpServicesToString"; RemoteCacheManager rcm1; // connects to 'default' cache container RemoteCacheManager rcm2; // connects to 'special-cache-container' cache container MBeanServerConnectionProvider provider; @Before public void setUp() { if (rcm1 == null) { provider = new MBeanServerConnectionProvider(server1.getHotrodEndpoint().getInetAddress().getHostName(), SERVER1_MGMT_PORT); Configuration conf = new ConfigurationBuilder().addServer().host(server1.getHotrodEndpoint().getInetAddress().getHostName()).port(server1 .getHotrodEndpoint().getPort()).build(); Configuration conf2 = new ConfigurationBuilder().addServer() .host(server1.getHotrodEndpoint("hotrodconnector2").getInetAddress().getHostName()) .port(server1.getHotrodEndpoint("hotrodconnector2").getPort()).build(); rcm1 = new RemoteCacheManager(conf); rcm2 = new RemoteCacheManager(conf2); } } @Test public void testEndpointConfiguration() throws Exception { RemoteCache<String, String> cache1 = rcm1.getCache("default"); RemoteCache<String, String> cache2 = rcm2.getCache("other-cache"); cache1.put("key", "value"); cache2.put("key2", "value2"); assertTrue(1 == server1.getCacheManager("default").getCache("default").getNumberOfEntries()); assertTrue(1 == server1.getCacheManager("special-cache-container").getCache("other-cache").getNumberOfEntries()); cache1.remove("key"); cache2.remove("key2"); } @Test public void testDefaultCacheAttribute() throws Exception { RemoteCache<String, String> cache = rcm2.getCache(); cache.put("key", "value"); assertTrue(1 == server1.getCacheManager("special-cache-container").getCache("special-cache").getNumberOfEntries()); assertTrue(0 == server1.getCacheManager("special-cache-container").getCache("other-cache").getNumberOfEntries()); cache.remove("key"); } /* * test that eviction-executor, listener-executor and replication-queue-executor attributes have been picked up by * infinispan-subsystem and jboss.infinispan.default service should depend on these executors * also test the start attribute: * 'default' cache container has default start mode (=LAZY) (mode of service - ACTIVE) * 'special-cache-container' has EAGER start mode (mode of service - ON_DEMAND) */ @Ignore @Test public void testExecutorAttributesAndStartMode() throws Exception { String services = provider.getConnection().invoke(new ObjectName(dumpServicesBean), dumpServicesOp, null, null) .toString(); boolean b1 = false, b2 = false, b3 = false; final String executorPrefix = "jboss.thread.executor."; Scanner s = new Scanner(services).useDelimiter("\n"); while (true) { try { String line = s.nextLine(); if (line.contains("Service \"jboss." + InfinispanSubsystem.SUBSYSTEM_NAME + ".default.config\"") && line.contains("dependencies:")) { String dependencies = line.substring(line.indexOf("dependencies:")); if (dependencies.contains(executorPrefix + "test-infinispan-listener") && dependencies.contains(executorPrefix + "test-infinispan-eviction")) { b1 = true; } } if (line.contains("Service \"jboss." + InfinispanSubsystem.SUBSYSTEM_NAME + ".special-cache-container\"") && line.contains("mode ACTIVE state UP")) { b2 = true; } if (line.contains("Service \"jboss." + InfinispanSubsystem.SUBSYSTEM_NAME + ".other-cache\"") && line.contains("mode ON_DEMAND state UP")) { b3 = true; } } catch (Exception e) { break; } } assertTrue(b1 && b2 && b3); } }