package org.jboss.narayana.rest.integration.test.integration; import java.io.File; import org.junit.Assert; import org.jboss.arquillian.container.test.api.Config; import org.jboss.arquillian.container.test.api.ContainerController; import org.jboss.arquillian.container.test.api.Deployer; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.jbossts.star.util.TxSupport; import org.junit.After; import org.junit.Before; /** * * @author <a href="mailto:gytis@redhat.com">Gytis Trikleris</a> * */ public abstract class AbstractIntegrationTestCase { private static final String CONTAINER_NAME = "jboss"; protected static final String DEPLOYMENT_NAME = "test"; protected static final String BASE_URL = getBaseUrl(); protected static final String DEPLOYMENT_URL = BASE_URL + "/" + DEPLOYMENT_NAME; protected static final String TRANSACTION_MANAGER_URL = BASE_URL + "/rest-at-coordinator/tx/transaction-manager"; @ArquillianResource private ContainerController containerController; @ArquillianResource private Deployer deployer; protected TxSupport txSupport; @Before public void before() { txSupport = new TxSupport(TRANSACTION_MANAGER_URL); } @After public void after() { try { txSupport.rollbackTx(); } catch (Throwable t){ } } protected void startContainer() { startContainer(null); } protected void startContainer(final String vmArguments) { if (!containerController.isStarted(CONTAINER_NAME)) { clearObjectStore(); if (vmArguments == null) { containerController.start(CONTAINER_NAME); } else { final Config config = new Config(); config.add("javaVmArguments", vmArguments); containerController.start(CONTAINER_NAME, config.map()); } deployer.deploy(DEPLOYMENT_NAME); } } protected void restartContainer(final String vmArguments) { if (vmArguments == null) { containerController.start(CONTAINER_NAME); } else { final Config config = new Config(); config.add("javaVmArguments", vmArguments); containerController.start(CONTAINER_NAME, config.map()); } } protected void stopContainer() { deployer.undeploy(DEPLOYMENT_NAME); containerController.stop(CONTAINER_NAME); containerController.kill(CONTAINER_NAME); } protected void clearObjectStore() { final String jbossHome = System.getenv("JBOSS_HOME"); if (jbossHome == null) { Assert.fail("$JBOSS_HOME not set"); } else { final File objectStore = new File(jbossHome + File.separator + "standalone" + File.separator + "data" + File.separator + "tx-object-store"); if (objectStore.exists()) { if (!deleteDirectory(objectStore)) { Assert.fail("Failed to remove tx-object-store: " + objectStore.getPath()); } } } } protected static boolean deleteDirectory(final File path) { if (path.exists()) { final File[] files = path.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { deleteDirectory(files[i]); } else { files[i].delete(); } } } return (path.delete()); } private static String getBaseUrl() { String baseAddress = System.getProperty("jboss.bind.address"); String basePort = System.getProperty("jboss.bind.port"); if (baseAddress == null) { baseAddress = "http://localhost"; } else if (!baseAddress.toLowerCase().startsWith("http://") && !baseAddress.toLowerCase().startsWith("https://")) { baseAddress = "http://" + baseAddress; } if (basePort == null) { basePort = "8080"; } return baseAddress + ":" + basePort; } }