package org.infinispan.test.integration.security.embedded; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.infinispan.Cache; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.test.integration.security.utils.Deployments; import org.infinispan.util.logging.Log; import org.infinispan.util.logging.LogFactory; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OperateOnDeployment; import org.jboss.arquillian.container.test.api.TargetsContainer; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.InSequence; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Test; import org.junit.runner.RunWith; /** * * Tests properties based auth callback handler, which is build-in in JGroups. * Handler checks provided auth information against configured properties file. * For test is used SASL MD5 authentication. * * @author vjuranek * @since 8.0 */ @RunWith(Arquillian.class) public class NodeAuthPropertiesHandlerIT extends AbstractNodeAuthentication { protected static final String COORDINATOR_JGROUSP_CONFIG_MD5 = "jgroups-tcp-sasl-prop-handler-node0.xml"; protected static final String JOINING_NODE_JGROUSP_CONFIG_MD5 = "jgroups-tcp-sasl-prop-handler-node1.xml"; protected static final String COORDINATOR_NODE = "simple-auth-node0"; protected static final String JOINING_NODE = "simple-auth-node1"; private static final Log LOG = LogFactory.getLog(NodeAuthPropertiesHandlerIT.class); public NodeAuthPropertiesHandlerIT() { super(false); } @Override protected String getCoordinatorNodeConfig() { return COORDINATOR_JGROUSP_CONFIG_MD5; } @Override protected String getJoiningNodeName() { return JOINING_NODE; } @Override protected String getJoiningNodeConfig() { return JOINING_NODE_JGROUSP_CONFIG_MD5; } @Deployment(name = COORDINATOR_NODE, managed = false) @TargetsContainer(COORDINATOR_NODE) public static WebArchive getCoordinatorDeployment() { return Deployments.createNodeAuthTestDeployment(COORDINATOR_JGROUSP_CONFIG_MD5); } @Deployment(name = JOINING_NODE, managed = false) @TargetsContainer(JOINING_NODE) public static WebArchive getJoiningNodeDeployment() { return Deployments.createNodeAuthTestDeployment(JOINING_NODE_JGROUSP_CONFIG_MD5); } @Test @InSequence(1) public void startNodes() throws Exception { controller.start(COORDINATOR_NODE); assertTrue(controller.isStarted(COORDINATOR_NODE)); controller.start(getJoiningNodeName()); assertTrue(controller.isStarted(getJoiningNodeName())); deployer.deploy(COORDINATOR_NODE); deployer.deploy(getJoiningNodeName()); } @Test @OperateOnDeployment(COORDINATOR_NODE) @InSequence(2) public void testCreateItemOnCoordinator() throws Exception { Cache<String, String> cache = getReplicatedCache(getCacheManager(getCoordinatorNodeConfig())); cache.put(TEST_ITEM_KEY, TEST_ITEM_VALUE); assertEquals(TEST_ITEM_VALUE, cache.get(TEST_ITEM_KEY)); } @Test @OperateOnDeployment(JOINING_NODE) @InSequence(3) public void testReadItemOnJoiningNode() throws Exception { EmbeddedCacheManager manager = getCacheManager(getJoiningNodeConfig()); Cache<String, String> cache = getReplicatedCache(manager); assertEquals("Insufficient number of cluster members", 2, manager.getMembers().size()); assertEquals(TEST_ITEM_VALUE, cache.get(TEST_ITEM_KEY)); } @Test @InSequence(4) public void stopJoiningNodes() throws Exception { deployer.undeploy(getJoiningNodeName()); deployer.undeploy(COORDINATOR_NODE); try { controller.stop(getJoiningNodeName()); } catch(Exception e) { LOG.warn("Joining node stop failed with %s", e.getCause()); controller.kill(getJoiningNodeName()); } try { controller.stop(COORDINATOR_NODE); } catch(Exception e) { LOG.warn("Coordinator node stop failed with %s", e.getCause()); controller.kill(COORDINATOR_NODE); } assertFalse(controller.isStarted(getJoiningNodeName())); assertFalse(controller.isStarted(COORDINATOR_NODE)); } }