Skip to content

Commit

Permalink
ConnectionListener test for JBJCA-704
Browse files Browse the repository at this point in the history
ConnectionListener test for JBJCA-704
  • Loading branch information
Hynek Svabek committed Oct 14, 2015
1 parent 9419fcc commit e674ea7
Show file tree
Hide file tree
Showing 6 changed files with 753 additions and 0 deletions.
4 changes: 4 additions & 0 deletions testsuite/integration/manualmode/pom.xml
Expand Up @@ -85,6 +85,10 @@
</includes>
<runOrder>alphabetical</runOrder>

<environmentVariables>
<JBOSS_HOME>${jboss.dist}</JBOSS_HOME>
</environmentVariables>

<!-- Parameters to test cases. -->
<systemPropertyVariables combine.children="append">
<arquillian.launch>manual-mode</arquillian.launch>
Expand Down
@@ -0,0 +1,243 @@
package org.jboss.as.test.manualmode.jca.connectionlistener;

import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.naming.Context;
import javax.naming.NamingException;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.as.arquillian.api.ServerSetupTask;
import org.jboss.as.arquillian.container.ManagementClient;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.test.integration.management.base.ContainerResourceMgmtTestBase;
import org.jboss.as.test.integration.management.util.CLIWrapper;
import org.jboss.as.test.integration.management.util.MgmtOperationException;
import org.jboss.as.test.manualmode.ejb.Util;
import org.jboss.as.test.shared.ServerReload;
import org.jboss.dmr.ModelNode;
import org.jboss.logging.Logger;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.exporter.ZipExporter;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.xnio.IoUtils;

/**
* @author <a href="mailto:hsvabek@redhat.com">Hynek Svabek</a>
*/
public abstract class AbstractTestsuite {
private static final Logger log = Logger.getLogger(AbstractTestsuite.class);

protected final static String MODULE_NAME = "connlistener";

protected static final String CONTAINER = "default-jbossas";
protected static final String DEP_1="connlist_1";
protected static final String DEP_1_XA="connlist_1_xa";
protected static final String DEP_2="connlist_2";
protected static final String DEP_2_XA="connlist_2_xa";
protected static final String DEP_3="connlist_3";
protected static final String DEP_3_XA="connlist_3_xa";

private static final String CONNECTION_LISTENER_CLASS_IMPL=TestConnectionListener.class.getName();

static final String jndiDs = "java:jboss/datasources/StatDS";
static final String jndiXaDs = "java:jboss/datasources/StatXaDS";

protected Context context;

@Deployment(name = DEP_1, managed = false)
public static JavaArchive createDeployment1() throws Exception {
return createDeployment(DEP_1);
}
@Deployment(name = DEP_1_XA, managed = false)
public static JavaArchive createDeployment1Xa() throws Exception {
return createDeployment(DEP_1_XA);
}
@Deployment(name = DEP_2, managed = false)
public static JavaArchive createDeployment2() throws Exception {
return createDeployment(DEP_2);
}
@Deployment(name = DEP_2_XA, managed = false)
public static JavaArchive createDeployment2Xa() throws Exception {
return createDeployment(DEP_2_XA);
}
@Deployment(name = DEP_3, managed = false)
public static JavaArchive createDeployment3() throws Exception {
return createDeployment(DEP_3);
}
@Deployment(name = DEP_3_XA, managed = false)
public static JavaArchive createDeployment3Xa() throws Exception {
return createDeployment(DEP_3_XA);
}

public static JavaArchive createDeployment(String name) throws Exception {
JavaArchive ja = ShrinkWrap.create(JavaArchive.class, name+".jar");
ja.addClasses(ConnectionListenerTestCase.class, AbstractTestsuite.class, JpaTestSlsb.class, JpaTestSlsbRemote.class, MgmtOperationException.class, ContainerResourceMgmtTestBase.class)
.addAsManifestResource(
new StringAsset("Dependencies: org.jboss.dmr \n"), "MANIFEST.MF");
return ja;
}

protected static class TestCaseSetup extends ContainerResourceMgmtTestBase implements ServerSetupTask{

public static final TestCaseSetup INSTANCE = new TestCaseSetup();

ModelNode dsAddress;
ModelNode dsXaAddress;

@Override
public void setup(final ManagementClient managementClient, String containerId) throws Exception{
setManagementClient(managementClient);
try {
tryRemoveConnListenerModule();//before test, in tearDown we cannot connect to CLI....
addConnListenerModule();
dsAddress = createDataSource(false, jndiDs);
dsXaAddress = createDataSource(true, jndiXaDs);
} catch (Throwable e) {
removeDss();
throw new Exception(e);
}
}

@Override
public void tearDown(final ManagementClient managementClient, final String containerId) throws Exception {
removeDss();
}

public void removeDss() {
try {
remove(dsAddress);
} catch (Throwable e) {
log.warn(e.getMessage());
}
try {
remove(dsXaAddress);
} catch (Throwable e) {
log.warn(e.getMessage());
}
}

/**
* Creates data source and return its node address
*
* @param xa - should be data source XA?
* @param jndiName of data source
* @return ModelNode - address of data source node
* @throws Exception
*/
private ModelNode createDataSource(boolean xa, String jndiName) throws Exception {
ModelNode address = new ModelNode();
address.add(SUBSYSTEM, "datasources");
address.add((xa ? "xa-" : "") + "data-source", jndiName);
address.protect();

ModelNode operation = new ModelNode();
operation.get(OP).set(ADD);
operation.get(OP_ADDR).set(address);
operation.get("jndi-name").set(jndiName);
operation.get("driver-name").set("h2");
operation.get("prepared-statements-cache-size").set(3);
operation.get("user-name").set("sa");
operation.get("password").set("sa");

if (!xa){
operation.get("connection-url").set("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1");
}

operation.get("connection-listener-class").set(CONNECTION_LISTENER_CLASS_IMPL);
/**
* Uncomment after finishing task https://issues.jboss.org/browse/WFLY-2492
*/
// operation.get("connection-listener-module-name").set(MODULE_NAME);
// operation.get("connection-listener-slot").set("main");
operation.get("enabled").set("false");
executeOperation(operation);

if (xa) {
final ModelNode xaDatasourcePropertiesAddress = address.clone();
xaDatasourcePropertiesAddress.add("xa-datasource-properties", "URL");
xaDatasourcePropertiesAddress.protect();
final ModelNode xaDatasourcePropertyOperation = new ModelNode();
xaDatasourcePropertyOperation.get(OP).set("add");
xaDatasourcePropertyOperation.get(OP_ADDR).set(xaDatasourcePropertiesAddress);
xaDatasourcePropertyOperation.get("value").set("jdbc:h2:mem:test");
executeOperation(xaDatasourcePropertyOperation);
}


operation = new ModelNode();
operation.get(OP).set(ModelDescriptionConstants.WRITE_ATTRIBUTE_OPERATION);
operation.get(OP_ADDR).set(address);
operation.get("name").set("enabled");
operation.get("value").set("true");
executeOperation(operation);

ServerReload.executeReloadAndWaitForCompletion(getModelControllerClient(), 50000);

return address;
}

protected void addConnListenerModule() throws Exception{
JavaArchive jar = ShrinkWrap.create(JavaArchive.class);
jar.addClasses(TestConnectionListener.class)
.addPackage(Logger.class.getPackage());

File moduleJar = File.createTempFile(MODULE_NAME, ".jar");
copyModuleFile(moduleJar, jar.as(ZipExporter.class).exportAsInputStream());

CLIWrapper cli = new CLIWrapper(true);
cli.sendLine("module add --name="+MODULE_NAME+" --slot=main --dependencies=org.jboss.ironjacamar.jdbcadapters --resources="+moduleJar.getAbsolutePath());
/**
* Delete global module after finishing this task
* https://issues.jboss.org/browse/WFLY-2492
*/
cli.sendLine("/subsystem=ee:write-attribute(name=global-modules,value=[{name => "+MODULE_NAME+",slot => main}]");
cli.quit();
}

protected void tryRemoveConnListenerModule() throws Exception{
try {
CLIWrapper cli = new CLIWrapper(true);
cli.sendLine("module remove --name="+MODULE_NAME+" --slot=main");
cli.quit();
} catch (Throwable e) {
log.warn(e.getMessage());
}
}
}

protected static void copyModuleFile(File target, InputStream src) throws IOException {
final BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(target));
try {
int i = src.read();
while (i != -1) {
out.write(i);
i = src.read();
}
} finally {
IoUtils.safeClose(out);
}
}

protected <T> T lookup(final Class<T> remoteClass, final Class<?> beanClass, final String archiveName) throws NamingException {
String myContext = Util.createRemoteEjbJndiContext(
"",
archiveName,
"",
beanClass.getSimpleName(),
remoteClass.getName(),
false);

return remoteClass.cast(context.lookup(myContext));
}
}

0 comments on commit e674ea7

Please sign in to comment.