/*
* IronJacamar, a Java EE Connector Architecture implementation
* Copyright 2014, Red Hat Inc, 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 Eclipse Public License 1.0 as
* published by the Free Software Foundation.
*
* 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 Eclipse
* Public License for more details.
*
* You should have received a copy of the Eclipse 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.ironjacamar.common.metadata.resourceadapter;
import org.ironjacamar.common.api.metadata.common.Capacity;
import org.ironjacamar.common.api.metadata.common.Credential;
import org.ironjacamar.common.api.metadata.common.Extension;
import org.ironjacamar.common.api.metadata.common.FlushStrategy;
import org.ironjacamar.common.api.metadata.common.Pool;
import org.ironjacamar.common.api.metadata.common.Recovery;
import org.ironjacamar.common.api.metadata.common.Security;
import org.ironjacamar.common.api.metadata.common.Timeout;
import org.ironjacamar.common.api.metadata.common.TransactionSupportEnum;
import org.ironjacamar.common.api.metadata.common.Validation;
import org.ironjacamar.common.api.metadata.common.XaPool;
import org.ironjacamar.common.api.metadata.resourceadapter.Activation;
import org.ironjacamar.common.api.metadata.resourceadapter.Activations;
import org.ironjacamar.common.api.metadata.resourceadapter.AdminObject;
import org.ironjacamar.common.api.metadata.resourceadapter.ConnectionDefinition;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.List;
import java.util.Map;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* ResourceAdapters 2.0 tests
* @author <a href="mailto:jesper.pedersen@ironjacamar.org">Jesper Pedersen</a>
*/
public class ResourceAdapters20TestCase
{
/**
* Read
* @throws Exception In case of an error
*/
@Test
public void testRead() throws Exception
{
ResourceAdapterParser parser = new ResourceAdapterParser();
InputStream is = ResourceAdapters20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/resourceadapter/dashra-2.0.xml");
assertNotNull(is);
XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is);
Activations a = parser.parse(xsr);
assertNotNull(a);
is.close();
checkActivations(a);
}
/**
* ToString
* @throws Exception In case of an error
*/
@Test
public void testToString() throws Exception
{
ResourceAdapterParser parser = new ResourceAdapterParser();
InputStream is = ResourceAdapters20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/resourceadapter/dashra-2.0.xml");
assertNotNull(is);
XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is);
Activations a = parser.parse(xsr);
assertNotNull(a);
is.close();
StringReader sr = new StringReader(a.toString());
XMLStreamReader nxsr = XMLInputFactory.newInstance().createXMLStreamReader(sr);
Activations an = parser.parse(nxsr);
checkActivations(an);
assertEquals(a, an);
}
/**
* Write
* @throws Exception In case of an error
*/
@Test
public void testWrite() throws Exception
{
ResourceAdapterParser parser = new ResourceAdapterParser();
InputStream is = ResourceAdapters20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/resourceadapter/dashra-2.0.xml");
assertNotNull(is);
XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is);
Activations a = parser.parse(xsr);
assertNotNull(a);
is.close();
StringWriter sw = new StringWriter();
XMLStreamWriter xsw = XMLOutputFactory.newInstance().createXMLStreamWriter(sw);
xsw.setDefaultNamespace("");
xsw.writeStartDocument("UTF-8", "1.0");
parser.store(a, xsw);
xsw.writeEndDocument();
xsw.flush();
xsw.close();
assertEquals(a.toString(), sw.toString());
}
/**
* Equal
* @throws Exception In case of an error
*/
@Test
public void testEqual() throws Exception
{
ResourceAdapterParser parser = new ResourceAdapterParser();
InputStream is1 = ResourceAdapters20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/resourceadapter/dashra-2.0.xml");
assertNotNull(is1);
XMLStreamReader xsr1 = XMLInputFactory.newInstance().createXMLStreamReader(is1);
Activations a1 = parser.parse(xsr1);
assertNotNull(a1);
is1.close();
InputStream is2 = ResourceAdapters20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/resourceadapter/dashra-2.0.xml");
assertNotNull(is2);
XMLStreamReader xsr2 = XMLInputFactory.newInstance().createXMLStreamReader(is2);
Activations a2 = parser.parse(xsr2);
assertNotNull(a2);
is2.close();
assertEquals(a1, a2);
}
/**
* Checks activations parsing
* @param Activation
*/
private void checkActivations(Activations ac)
{
List<Activation> al = ac.getActivations();
assertEquals(5, al.size());
for (Activation a : al)
{
String id = a.getId();
String archive = a.getArchive();
assertNull(a.getWorkManager());
List<String> ls = a.getBeanValidationGroups();
Map<String, String> mp = a.getConfigProperties();
List<ConnectionDefinition> cds = a.getConnectionDefinitions();
List<AdminObject> aos = a.getAdminObjects();
if (archive.equals("some.rar"))
{
assertEquals("someContext", a.getBootstrapContext());
assertEquals("ID1", id);
assertEquals(2, ls.size());
assertTrue(ls.contains("Class0"));
assertTrue(ls.contains("Class00"));
assertEquals(TransactionSupportEnum.XATransaction, a.getTransactionSupport());
assertEquals(2, mp.size());
assertEquals("A", mp.get("Property1"));
assertEquals("B", mp.get("Property2"));
assertEquals(3, cds.size());
for (ConnectionDefinition cd : cds)
{
XaPool pool = (XaPool)cd.getPool();
Capacity cp = pool.getCapacity();
Security s = cd.getSecurity();
Timeout t = cd.getTimeout();
Validation v = cd.getValidation();
Recovery r = cd.getRecovery();
Credential c = r.getCredential();
Extension e = r.getPlugin();
if (cd.getClassName().contains("Class1"))
{
assertEquals("java:jboss/name1", cd.getJndiName());
assertEquals("Pool1", cd.getId());
assertTrue(cd.isUseCcm());
assertTrue(cd.isEnabled());
assertTrue(cd.isSharable());
assertTrue(cd.isEnlistment());
assertTrue(cd.isConnectable());
assertTrue(cd.isTracking());
mp = cd.getConfigProperties();
assertEquals(2, mp.size());
assertEquals("1", mp.get("Property3"));
assertEquals("2", mp.get("Property4"));
assertTrue(cd.isXa());
assertEquals(1, (int)pool.getMinPoolSize());
assertEquals(5, (int)pool.getMaxPoolSize());
assertEquals(5, (int)pool.getInitialPoolSize());
assertEquals(FlushStrategy.IDLE_CONNECTIONS, pool.getFlushStrategy());
assertTrue(pool.isPrefill());
assertTrue(pool.isIsSameRmOverride());
assertTrue(pool.isPadXid());
assertFalse(pool.isWrapXaResource());
assertNotNull(cp);
assertEquals("ic", cp.getIncrementer().getClassName());
assertEquals("dc", cp.getDecrementer().getClassName());
assertNull(s);
assertEquals(5000L, (long)t.getBlockingTimeoutMillis());
assertEquals(4, (int)t.getIdleTimeoutMinutes());
assertEquals(2L, (long)t.getAllocationRetry());
assertEquals(3000L, (long)t.getAllocationRetryWaitMillis());
assertEquals(300L, (long)t.getXaResourceTimeout());
assertEquals(5000L, (long)v.getBackgroundValidationMillis());
assertTrue(v.isBackgroundValidation());
assertTrue(v.isUseFastFail());
assertFalse(r.isNoRecovery());
assertNotNull(c);
assertEquals("MyRecoveryRealm", c.getSecurityDomain());
assertNotNull(e);
assertEquals("someClass2", e.getClassName());
assertEquals("some-module-name", e.getModuleName());
assertEquals("some-module-slot", e.getModuleSlot());
mp = e.getConfigPropertiesMap();
assertEquals(2, mp.size());
assertEquals("some", mp.get("Property5"));
assertEquals("true", mp.get("Property6"));
}
else if (cd.getClassName().contains("Class2"))
{
assertEquals("java:jboss/name2", cd.getJndiName());
assertNull(cd.getId());
assertFalse(cd.isUseCcm());
assertFalse(cd.isEnabled());
assertFalse(cd.isSharable());
assertFalse(cd.isEnlistment());
assertFalse(cd.isConnectable());
assertFalse(cd.isTracking());
mp = cd.getConfigProperties();
assertEquals(0, mp.size());
assertTrue(cd.isXa());
assertEquals(0, (int)pool.getMinPoolSize());
assertEquals(20, (int)pool.getMaxPoolSize());
assertNull(pool.getInitialPoolSize());
assertEquals(FlushStrategy.ENTIRE_POOL, pool.getFlushStrategy());
assertFalse(pool.isPrefill());
assertFalse(pool.isIsSameRmOverride());
assertFalse(pool.isPadXid());
assertTrue(pool.isWrapXaResource());
assertNull(pool.getCapacity());
assertEquals("domain", s.getSecurityDomain());
assertNull(t);
assertNull(v.getBackgroundValidationMillis());
assertTrue(v.isValidateOnMatch());
assertNull(v.isBackgroundValidation());
assertFalse(v.isUseFastFail());
assertTrue(r.isNoRecovery());
assertNotNull(c);
assertEquals("HsqlDbRealm", c.getSecurityDomain());
assertNull(e);
}
else if (cd.getClassName().contains("Class3"))
{
assertEquals("java:jboss/name3", cd.getJndiName());
assertNull(cd.getId());
assertTrue(cd.isUseCcm());
assertTrue(cd.isEnabled());
assertTrue(cd.isSharable());
assertTrue(cd.isEnlistment());
assertFalse(cd.isConnectable());
assertNull(cd.isTracking());
mp = cd.getConfigProperties();
assertEquals(0, mp.size());
assertTrue(cd.isXa());
assertEquals(0, (int)pool.getMinPoolSize());
assertEquals(20, (int)pool.getMaxPoolSize());
assertNull(pool.getInitialPoolSize());
assertEquals(FlushStrategy.FAILING_CONNECTION_ONLY, pool.getFlushStrategy());
assertFalse(pool.isPrefill());
assertNull(pool.isIsSameRmOverride());
assertFalse(pool.isPadXid());
assertTrue(pool.isWrapXaResource());
assertNull(pool.getCapacity());
assertEquals("domain", s.getSecurityDomain());
assertNull(t);
assertNull(v);
assertFalse(r.isNoRecovery());
assertNull(c);
assertNull(e);
}
else
{
fail("Unexpected element " + cd.getClassName());
}
assertEquals(2, aos.size());
for (AdminObject ao : aos)
{
mp = ao.getConfigProperties();
if (ao.getClassName().equals("Class4"))
{
assertEquals("java:jboss/name4", ao.getJndiName());
assertEquals("Pool4", ao.getId());
assertTrue(ao.isEnabled());
assertEquals(2, mp.size());
assertEquals("3.6", mp.get("Property7"));
assertEquals("", mp.get("Property8"));
}
else if (ao.getClassName().equals("Class5"))
{
assertEquals("java:jboss/name5", ao.getJndiName());
assertNull(ao.getId());
assertTrue(ao.isEnabled());
assertEquals(0, mp.size());
}
else
{
fail("Unexpected element " + ao.getClassName());
}
}
}
}
else if (archive.equals("some1.rar"))
{
assertNull(a.getBootstrapContext());
assertNull(ls);
assertNull(id);
assertEquals(TransactionSupportEnum.LocalTransaction, a.getTransactionSupport());
assertNull(mp);
assertEquals(1, cds.size());
ConnectionDefinition cd = cds.get(0);
assertEquals("java:jboss/name9", cd.getJndiName());
assertNull(cd.getClassName());
assertNull(cd.getId());
assertTrue(cd.isUseCcm());
assertTrue(cd.isEnabled());
assertTrue(cd.isSharable());
assertTrue(cd.isEnlistment());
assertNull(cd.isTracking());
assertFalse(cd.isConnectable());
mp = cd.getConfigProperties();
assertEquals(0, mp.size());
assertFalse(cd.isXa());
Pool pool = cd.getPool();
assertEquals(0, (int)pool.getMinPoolSize());
assertEquals(20, (int)pool.getMaxPoolSize());
assertNull(pool.getInitialPoolSize());
assertEquals(FlushStrategy.FAILING_CONNECTION_ONLY, pool.getFlushStrategy());
assertFalse(pool.isPrefill());
assertNull(pool.getCapacity());
assertNull(cd.getSecurity());
assertNull(cd.getTimeout());
assertNull(cd.getValidation());
assertNull(cd.getRecovery());
assertNull(aos);
}
else if (archive.equals("some2.rar"))
{
assertNull(a.getBootstrapContext());
assertEquals("ID2", id);
assertNull(ls);
assertEquals(TransactionSupportEnum.NoTransaction, a.getTransactionSupport());
assertNull(mp);
assertEquals(1, cds.size());
ConnectionDefinition cd = cds.get(0);
assertEquals("java:jboss/name8", cd.getJndiName());
assertNull(cd.getClassName());
assertNull(cd.getId());
assertTrue(cd.isUseCcm());
assertTrue(cd.isEnabled());
assertTrue(cd.isSharable());
assertTrue(cd.isEnlistment());
assertFalse(cd.isConnectable());
assertNull(cd.isTracking());
mp = cd.getConfigProperties();
assertEquals(0, mp.size());
assertFalse(cd.isXa());
Pool pool = cd.getPool();
assertEquals(1, (int)pool.getMinPoolSize());
assertEquals(5, (int)pool.getMaxPoolSize());
assertEquals(5, (int)pool.getInitialPoolSize());
assertEquals(FlushStrategy.IDLE_CONNECTIONS, pool.getFlushStrategy());
assertTrue(pool.isPrefill());
assertNotNull(pool.getCapacity());
assertEquals("ic", pool.getCapacity().getIncrementer().getClassName());
assertEquals("dc", pool.getCapacity().getDecrementer().getClassName());
assertNull(cd.getSecurity());
assertNull(cd.getTimeout());
assertNull(cd.getValidation());
assertNull(cd.getRecovery());
assertEquals(2, aos.size());
for (AdminObject ao : aos)
{
mp = ao.getConfigProperties();
if ((ao.getClassName() != null) && ao.getClassName().equals("Class6"))
{
assertEquals("java:jboss/name6", ao.getJndiName());
assertEquals("Pool6", ao.getId());
assertFalse(ao.isEnabled());
assertEquals(2, mp.size());
assertEquals(".", mp.get("Property9"));
assertEquals("", mp.get("Property0"));
}
else if (ao.getClassName() == null)
{
assertEquals("java:jboss/name7", ao.getJndiName());
assertNull(ao.getId());
assertTrue(ao.isEnabled());
assertEquals(0, mp.size());
}
else
{
fail("Unexpected element " + ao.getClassName());
}
}
}
else if (archive.equals("some3.rar"))
{
assertNull(a.getBootstrapContext());
assertNull(ls);
assertNull(id);
assertNull(a.getTransactionSupport());
assertNull(mp);
assertNull(cds);
assertEquals(1, aos.size());
AdminObject ao = aos.get(0);
assertEquals("java:jboss/name0", ao.getJndiName());
assertNull(ao.getClassName());
assertNull(ao.getId());
assertTrue(ao.isEnabled());
mp = ao.getConfigProperties();
assertEquals(0, mp.size());
}
else if (archive.equals("some4.rar"))
{
assertNull(a.getBootstrapContext());
assertNull(ls);
assertNull(id);
assertNull(a.getTransactionSupport());
assertNull(mp);
assertNull(cds);
assertNull(aos);
}
else
{
fail("Unexpected archive " + archive);
}
}
}
}