package org.infinispan.server.test.task; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Collections; import java.util.List; 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.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.configuration.Configuration; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.client.hotrod.exceptions.HotRodClientException; import org.infinispan.server.test.category.Task; import org.infinispan.server.test.task.servertask.DistributedDeploymentTestServerTask; import org.infinispan.tasks.ServerTask; import org.jboss.arquillian.container.test.api.Deployer; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OverProtocol; import org.jboss.arquillian.container.test.api.TargetsContainer; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.InSequence; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; /** * Testing the jar task deployment/undeploy. */ @RunWith(Arquillian.class) @Category({Task.class}) @WithRunningServer({@RunningServer(name="clusteredcache-1"), @RunningServer(name = "clusteredcache-2")}) public class DistributedServerTaskDeploymentIT { @InfinispanResource("clusteredcache-1") RemoteInfinispanServer server1; @InfinispanResource("clusteredcache-2") RemoteInfinispanServer server2; @ArquillianResource private Deployer deployer; RemoteCacheManager rcm1; @Rule public ExpectedException exceptionRule = ExpectedException.none(); @Deployment(name = "node1", managed = false) @TargetsContainer("clusteredcache-1") @OverProtocol("jmx-as7") public static JavaArchive create1() { JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "custom-task-deployment.jar"); jar.addClass(DistributedDeploymentTestServerTask.class); jar.addAsServiceProvider(ServerTask.class, DistributedDeploymentTestServerTask.class); return jar; } @Deployment(name = "node2", managed = false) @TargetsContainer("clusteredcache-2") @OverProtocol("jmx-as7") public static JavaArchive create2() { JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "custom-task-deployment.jar"); jar.addClass(DistributedDeploymentTestServerTask.class); jar.addAsServiceProvider(ServerTask.class, DistributedDeploymentTestServerTask.class); return jar; } @Before public void setUp() { if (rcm1 == null) { Configuration conf = new ConfigurationBuilder().addServer().host(server1.getHotrodEndpoint().getInetAddress().getHostName()) .port(server1.getHotrodEndpoint().getPort()).build(); rcm1 = new RemoteCacheManager(conf); } } @Test @InSequence(1) public void testDeploy() { deployer.deploy("node1"); deployer.deploy("node2"); } @Test @InSequence(2) @SuppressWarnings("unchecked") public void shouldGatherNodeNamesInRemoteTasks() throws Exception { Object resultObject = rcm1.getCache().execute(DistributedDeploymentTestServerTask.NAME, Collections.emptyMap()); assertNotNull(resultObject); List<String> result = (List<String>) resultObject; assertEquals(2, result.size()); assertTrue("result list does not contain expected items.", result.containsAll(asList("node0", "node1"))); } @Test @InSequence(3) public void testTaskUndeploy() { deployer.undeploy("node1"); deployer.undeploy("node2"); exceptionRule.expect(HotRodClientException.class); exceptionRule.expectMessage("ISPN027002"); rcm1.getCache().execute(DistributedDeploymentTestServerTask.NAME, Collections.emptyMap()); } }