/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.jca.test;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.jboss.resource.deployers.builder.AbstractBuilder;
import org.jboss.resource.deployers.builder.ConnectionFactoryBindingBuilder;
import org.jboss.resource.deployers.builder.ConnectionManagerBuilder;
import org.jboss.resource.deployers.builder.ManagedConnectionPoolBuilder;
import org.jboss.resource.metadata.mcf.LocalDataSourceDeploymentMetaData;
import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup;
import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentMetaData;
import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryTransactionSupportMetaData;
import org.jboss.resource.metadata.mcf.NoTxConnectionFactoryDeploymentMetaData;
import org.jboss.resource.metadata.mcf.NoTxDataSourceDeploymentMetaData;
import org.jboss.resource.metadata.mcf.TxConnectionFactoryDeploymentMetaData;
import org.jboss.resource.metadata.mcf.XADataSourceDeploymentMetaData;
import org.jboss.system.metadata.ServiceMetaData;
import org.jboss.test.JBossTestCase;
import org.jboss.test.jca.support.ManagedDeploymentSupportHelper;
/**
* A ManagedDeploymentUnitTestCase.
*
* @author <a href="weston.price@jboss.org">Weston Price</a>
* @version $Revision: 85945 $
*/
public class ManagedDeploymentUnitTestCase extends JBossTestCase
{
public ManagedDeploymentUnitTestCase(String name)
{
super(name);
}
public void testDefaultValuesUnmarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/default-content-ds.xml");
List<ManagedConnectionFactoryDeploymentMetaData> deployments = group.getDeployments();
for (ManagedConnectionFactoryDeploymentMetaData md : deployments)
{
assertTrue(md.isUseJavaContext());
if(md instanceof NoTxDataSourceDeploymentMetaData)
{
assertFalse(md.getLocalTransactions());
assertTrue(md.getTrackConnectionByTransaction());
assertFalse(md.isInterleaving());
assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.NONE));
}else if(md instanceof LocalDataSourceDeploymentMetaData)
{
assertTrue(md.getLocalTransactions());
assertTrue(md.getTrackConnectionByTransaction());
assertFalse(md.isInterleaving());
assertFalse(md.getNoTxSeparatePools());
assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.LOCAL));
}else if(md instanceof XADataSourceDeploymentMetaData)
{
assertFalse(md.getLocalTransactions());
assertTrue(md.getTrackConnectionByTransaction());
assertFalse(md.isInterleaving());
assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.XA));
}
else if(md instanceof TxConnectionFactoryDeploymentMetaData)
{
TxConnectionFactoryDeploymentMetaData txmd = (TxConnectionFactoryDeploymentMetaData)md;
if(txmd.getJndiName().equalsIgnoreCase("Local"))
{
assertTrue(txmd.getLocalTransactions());
assertFalse(txmd.getXATransaction());
assertTrue(txmd.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.LOCAL));
}
else
{
assertFalse(txmd.getLocalTransactions());
assertTrue(txmd.getXATransaction());
assertTrue(txmd.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.XA));
}
}
else if(md instanceof NoTxConnectionFactoryDeploymentMetaData)
{
assertFalse(md.getLocalTransactions());
assertFalse(md.getTrackConnectionByTransaction());
assertFalse(md.isInterleaving());
assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.NONE));
}
}
}
public void testConnectionPoolUnmarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/pool-content-ds.xml");
ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
assertTrue(md.getPrefill());
}
public void testBasicMarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/remote-jdbc/remote-ds.xml");
String result = ManagedDeploymentSupportHelper.marshalResourceAsString(group);
group = ManagedDeploymentSupportHelper.unmarshalSource(result);
}
public void testEmptyContentUnmarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/empty-content-ds.xml");
ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
assertTrue(md.getTrackConnectionByTransaction()); // this is always true for local tx
assertFalse(md.isInterleaving());
assertTrue(md.getNoTxSeparatePools());
assertTrue(md.getUseStrictMin());
assertEquals(0, md.getAllocationRetry());
assertEquals(5000, md.getAllocationRetryWaitMillis());
}
public void testEmptyContentMarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/empty-content-ds.xml");
String result = ManagedDeploymentSupportHelper.marshalResourceAsString(group);
group = ManagedDeploymentSupportHelper.unmarshalSource(result);
ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
assertTrue(md.getTrackConnectionByTransaction()); // this is always true for local tx
assertFalse(md.isInterleaving());
assertTrue(md.getNoTxSeparatePools());
assertTrue(md.getUseStrictMin());
assertEquals(0, md.getAllocationRetry());
assertEquals(5000, md.getAllocationRetryWaitMillis());
}
public void testXAWithInterleavingMarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/xa-interleaving-ds.xml");
String result = ManagedDeploymentSupportHelper.marshalResourceAsString(group);
group = ManagedDeploymentSupportHelper.unmarshalSource(result);
ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
assertFalse(md.getTrackConnectionByTransaction());
assertTrue(md.isInterleaving());
}
public void testBasicUnmarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/remote-jdbc/remote-ds.xml");
ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
assertTrue(group.getDeployments().size() == 1);
assertTrue(md instanceof LocalDataSourceDeploymentMetaData);
assertTrue(md.getLocalTransactions());
assertTrue(ManagedDeploymentSupportHelper.isValidDeployment("jca/remote-jdbc/remote-ds.xml", md, "jndi-name",
"connection-url"));
assertTrue(ManagedDeploymentSupportHelper.hasAnnotation(md, "jndiName"));
}
public void testServiceMetaDataBuilder() throws Exception
{
List<AbstractBuilder> builders = new ArrayList<AbstractBuilder>();
// builders.add(new ManagedConnectionFactoryBuilder());
builders.add(new ManagedConnectionPoolBuilder());
builders.add(new ConnectionFactoryBindingBuilder());
builders.add(new ConnectionManagerBuilder());
// builders.add(new MetaDataTypeMappingBuilder());
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/remote-jdbc/remote-ds.xml");
ManagedConnectionFactoryDeploymentMetaData mcmd = group.getDeployments().get(0);
List<ServiceMetaData> results = new ArrayList<ServiceMetaData>();
for (AbstractBuilder abstractBuilder : builders)
{
ServiceMetaData md = abstractBuilder.build(mcmd);
results.add(md);
}
}
public void testTrackConnectionByTxUnmarshal() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/track-connection-by-tx-ds.xml");
List<ManagedConnectionFactoryDeploymentMetaData> deployments = group.getDeployments();
assertEquals(4, deployments.size());
for (ManagedConnectionFactoryDeploymentMetaData md : deployments)
{
assertTrue(md instanceof TxConnectionFactoryDeploymentMetaData);
if(md.getJndiName().equals("XAWithTrackConnectionByTx"))
{
assertTrue(md.getTrackConnectionByTransaction());
assertFalse(md.isInterleaving());
assertFalse(md.getLocalTransactions());
}
else if(md.getJndiName().equals("DefaultXA"))
{
assertTrue(md.getTrackConnectionByTransaction());
assertFalse(md.isInterleaving());
assertFalse(md.getLocalTransactions());
}
else if(md.getJndiName().equals("XAWithInterleaving"))
{
assertFalse(md.getTrackConnectionByTransaction());
assertTrue(md.isInterleaving());
assertFalse(md.getLocalTransactions());
}
else if(md.getJndiName().equals("Local"))
{
assertTrue(md.getTrackConnectionByTransaction());
assertFalse(md.isInterleaving());
assertTrue(md.getLocalTransactions());
}
else
fail("unexpected connection factory: " + md.getJndiName());
}
}
public void testAllocationRetry() throws Exception
{
ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/allocation-content-ds.xml");
List<ManagedConnectionFactoryDeploymentMetaData> deployments = group.getDeployments();
assertEquals(5, deployments.size());
for (ManagedConnectionFactoryDeploymentMetaData md : deployments)
{
assertEquals(1, md.getAllocationRetry());
assertEquals(1000, md.getAllocationRetryWaitMillis());
}
}
public static Test suite() throws Exception
{
TestSuite suite = new TestSuite();
suite.addTest(new ManagedDeploymentUnitTestCase("testBasicUnmarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testServiceMetaDataBuilder"));
suite.addTest(new ManagedDeploymentUnitTestCase("testBasicMarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testEmptyContentUnmarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testEmptyContentMarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testDefaultValuesUnmarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testConnectionPoolUnmarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testTrackConnectionByTxUnmarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testXAWithInterleavingMarshal"));
suite.addTest(new ManagedDeploymentUnitTestCase("testAllocationRetry"));
return suite;
}
}