package org.infinispan.server.test.cs.custom; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import java.io.File; 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.commons.logging.Log; import org.infinispan.commons.logging.LogFactory; import org.infinispan.persistence.cluster.MyCustomCacheStore; import org.infinispan.persistence.spi.ExternalStore; import org.infinispan.server.infinispan.spi.InfinispanSubsystem; import org.infinispan.server.test.category.CacheStore; import org.infinispan.server.test.util.ITestUtils; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.exporter.ZipExporter; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; /** * Tests Deployeable Cache Stores which are placed into server deployments directory. * * @author <a href="mailto:jmarkos@redhat.com">Jakub Markos</a> * @author Sebastian Laskawiec */ @RunWith(Arquillian.class) @Category({CacheStore.class}) public class CustomCacheStoreIT { private static final Log log = LogFactory.getLog(CustomCacheStoreIT.class); @InfinispanResource("standalone-customcs") RemoteInfinispanServer server; final int managementPort = 9990; final String cacheLoaderMBean = "jboss." + InfinispanSubsystem.SUBSYSTEM_NAME + ":type=Cache,name=\"default(local)\",manager=\"local\",component=CacheLoader"; @BeforeClass public static void before() throws Exception { String serverDir = System.getProperty("server1.dist"); JavaArchive deployedCacheStore = ShrinkWrap.create(JavaArchive.class); deployedCacheStore.addPackage(MyCustomCacheStore.class.getPackage()); deployedCacheStore.addAsServiceProvider(ExternalStore.class, MyCustomCacheStore.class); deployedCacheStore.as(ZipExporter.class).exportTo( new File(serverDir, "/standalone/deployments/custom-store.jar"), true); } @Test @WithRunningServer({@RunningServer(name = "standalone-customcs")}) public void testIfDeployedCacheContainsProperValues() throws Exception { RemoteCacheManager rcm = ITestUtils.createCacheManager(server); RemoteCache<String, String> rc = rcm.getCache(); assertNull(rc.get("key1")); rc.put("key1", "value1"); assertEquals("value1", rc.get("key1")); // check via jmx that MyCustomCacheStore is indeed used MBeanServerConnectionProvider provider = new MBeanServerConnectionProvider(server.getHotrodEndpoint().getInetAddress().getHostName(), managementPort); assertEquals("[org.infinispan.persistence.cluster.MyCustomCacheStore]", getAttribute(provider, cacheLoaderMBean, "stores")); } private String getAttribute(MBeanServerConnectionProvider provider, String mbean, String attr) throws Exception { return provider.getConnection().getAttribute(new ObjectName(mbean), attr).toString(); } }