/*
* 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.ironjacamar;
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.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;
/**
* IronJacamar 2.0 tests
* @author <a href="mailto:jesper.pedersen@ironjacamar.org">Jesper Pedersen</a>
*/
public class IronJacamar20TestCase
{
/**
* Read
* @throws Exception In case of an error
*/
@Test
public void testRead() throws Exception
{
IronJacamarParser parser = new IronJacamarParser();
InputStream is = IronJacamar20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/ironjacamar/ironjacamar-2.0.xml");
assertNotNull(is);
XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is);
Activation a = parser.parse(xsr);
assertNotNull(a);
is.close();
checkActivation(a);
}
/**
* ToString
* @throws Exception In case of an error
*/
@Test
public void testToString() throws Exception
{
IronJacamarParser parser = new IronJacamarParser();
InputStream is = IronJacamar20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/ironjacamar/ironjacamar-2.0.xml");
assertNotNull(is);
XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is);
Activation a = parser.parse(xsr);
assertNotNull(a);
is.close();
StringReader sr = new StringReader(a.toString());
XMLStreamReader nxsr = XMLInputFactory.newInstance().createXMLStreamReader(sr);
Activation an = parser.parse(nxsr);
checkActivation(an);
assertEquals(a, an);
}
/**
* Write
* @throws Exception In case of an error
*/
@Test
public void testWrite() throws Exception
{
IronJacamarParser parser = new IronJacamarParser();
InputStream is = IronJacamar20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/ironjacamar/ironjacamar-2.0.xml");
assertNotNull(is);
XMLStreamReader xsr = XMLInputFactory.newInstance().createXMLStreamReader(is);
Activation 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
{
IronJacamarParser parser = new IronJacamarParser();
InputStream is1 = IronJacamar20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/ironjacamar/ironjacamar-2.0.xml");
assertNotNull(is1);
XMLStreamReader xsr1 = XMLInputFactory.newInstance().createXMLStreamReader(is1);
Activation a1 = parser.parse(xsr1);
assertNotNull(a1);
is1.close();
InputStream is2 = IronJacamar20TestCase.class.getClassLoader().
getResourceAsStream("../../resources/test/ironjacamar/ironjacamar-2.0.xml");
assertNotNull(is2);
XMLStreamReader xsr2 = XMLInputFactory.newInstance().createXMLStreamReader(is2);
Activation a2 = parser.parse(xsr2);
assertNotNull(a2);
is2.close();
assertEquals(a1, a2);
}
/**
* Checks activation parsing
* @param Activation
*/
private void checkActivation(Activation a)
{
assertEquals("someContext", a.getBootstrapContext());
assertNull(a.getId());
assertNull(a.getArchive());
assertNull(a.getWorkManager());
assertEquals(TransactionSupportEnum.XATransaction, a.getTransactionSupport());
List<String> list = a.getBeanValidationGroups();
assertEquals(2, list.size());
assertTrue(list.contains("Class0"));
assertTrue(list.contains("Class00"));
Map<String, String> map = a.getConfigProperties();
assertEquals(2, map.size());
assertEquals("A", map.get("Property1"));
assertEquals("B", map.get("Property2"));
List<ConnectionDefinition> cds = a.getConnectionDefinitions();
assertEquals(3, cds.size());
for (ConnectionDefinition cd : cds)
{
Pool pool = cd.getPool();
XaPool xpool;
Security s = cd.getSecurity();
Timeout t = cd.getTimeout();
Validation v = cd.getValidation();
Recovery r = cd.getRecovery();
if (cd.getClassName().equals("Class1"))
{
assertEquals("java:jboss/name1", cd.getJndiName());
assertEquals("Pool1", cd.getId());
assertTrue(cd.isUseCcm());
assertTrue(cd.isEnabled());
assertTrue(cd.isXa());
assertTrue(cd.isSharable());
assertTrue(cd.isEnlistment());
assertFalse(cd.isConnectable());
assertNull(cd.isTracking());
map = cd.getConfigProperties();
assertEquals(2, map.size());
assertEquals("1", map.get("Property3"));
assertEquals("2", map.get("Property4"));
assertTrue(pool instanceof XaPool);
xpool = (XaPool) pool;
assertEquals(1, (int)xpool.getMinPoolSize());
assertEquals(5, (int)xpool.getMaxPoolSize());
assertEquals(2, (int)xpool.getInitialPoolSize());
assertEquals(FlushStrategy.IDLE_CONNECTIONS, xpool.getFlushStrategy());
assertTrue(xpool.isPrefill());
assertTrue(xpool.isIsSameRmOverride());
assertTrue(xpool.isPadXid());
assertFalse(xpool.isWrapXaResource());
Capacity cp = xpool.getCapacity();
assertNotNull(cp);
Extension e = cp.getIncrementer();
map = e.getConfigPropertiesMap();
assertEquals(2, map.size());
assertEquals("1", map.get("P1"));
assertEquals("2", map.get("P2"));
assertEquals("ic", e.getClassName());
e = cp.getDecrementer();
map = e.getConfigPropertiesMap();
assertEquals(2, map.size());
assertEquals("1", map.get("P1"));
assertEquals("2", map.get("P2"));
assertEquals("dc", e.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());
assertNull(v.isValidateOnMatch());
assertTrue(v.isUseFastFail());
assertFalse(r.isNoRecovery());
Credential c = r.getCredential();
assertNotNull(c);
assertEquals("MyRecoveryRealm", c.getSecurityDomain());
e = r.getPlugin();
assertEquals("someClass2", e.getClassName());
map = e.getConfigPropertiesMap();
assertEquals(2, map.size());
assertEquals("some", map.get("Property5"));
assertEquals("true", map.get("Property6"));
}
else if (cd.getClassName().equals("Class2"))
{
assertEquals("java:jboss/name2", cd.getJndiName());
assertNull(cd.getId());
assertFalse(cd.isUseCcm());
assertFalse(cd.isEnabled());
assertTrue(cd.isXa());
assertFalse(cd.isSharable());
assertFalse(cd.isEnlistment());
assertTrue(cd.isConnectable());
assertTrue(cd.isTracking());
map = cd.getConfigProperties();
assertEquals(0, map.size());
assertTrue(pool instanceof XaPool);
xpool = (XaPool) pool;
assertEquals(0, (int)xpool.getMinPoolSize());
assertEquals(20, (int)xpool.getMaxPoolSize());
assertEquals(FlushStrategy.ENTIRE_POOL, xpool.getFlushStrategy());
assertFalse(xpool.isPrefill());
assertFalse(xpool.isIsSameRmOverride());
assertFalse(xpool.isPadXid());
assertTrue(xpool.isWrapXaResource());
assertEquals("domain", s.getSecurityDomain());
assertNull(t);
assertNull(v.getBackgroundValidationMillis());
assertTrue(v.isValidateOnMatch());
assertNull(v.isBackgroundValidation());
assertFalse(v.isUseFastFail());
assertTrue(r.isNoRecovery());
Credential c = r.getCredential();
assertNotNull(c);
assertEquals("HsqlDbRealm", c.getSecurityDomain());
assertNull(r.getPlugin());
}
else if (cd.getClassName().equals("Class3"))
{
assertEquals("java:jboss/name3", cd.getJndiName());
assertNull(cd.getId());
assertTrue(cd.isUseCcm());
assertTrue(cd.isEnabled());
assertTrue(cd.isXa());
assertTrue(cd.isSharable());
assertTrue(cd.isEnlistment());
assertFalse(cd.isConnectable());
assertNull(cd.isTracking());
map = cd.getConfigProperties();
assertEquals(0, map.size());
assertTrue(pool instanceof XaPool);
xpool = (XaPool) pool;
assertEquals(0, (int)xpool.getMinPoolSize());
assertEquals(20, (int)xpool.getMaxPoolSize());
assertNull(xpool.getInitialPoolSize());
assertEquals(FlushStrategy.FAILING_CONNECTION_ONLY, xpool.getFlushStrategy());
assertFalse(xpool.isPrefill());
assertNull(xpool.isIsSameRmOverride());
assertFalse(xpool.isPadXid());
assertTrue(xpool.isWrapXaResource());
assertEquals("domain", s.getSecurityDomain());
assertNull(t);
assertNull(v);
assertFalse(r.isNoRecovery());
assertNull(r.getCredential());
assertNull(r.getPlugin());
}
else
{
fail("Unexpected element:" + cd.getClassName());
}
}
List<AdminObject> aos = a.getAdminObjects();
assertEquals(2, aos.size());
AdminObject ao1 = aos.get(0);
AdminObject ao2;
if (ao1.getClassName().equals("Class5"))
{
ao2 = ao1;
ao1 = aos.get(1);
}
else
{
ao2 = aos.get(1);
}
assertEquals("Class4", ao1.getClassName());
assertEquals("java:jboss/name4", ao1.getJndiName());
assertEquals("Pool4", ao1.getId());
assertTrue(ao1.isEnabled());
map = ao1.getConfigProperties();
assertEquals(2, map.size());
assertEquals("3.6", map.get("Property7"));
assertEquals("", map.get("Property8"));
assertEquals("Class5", ao2.getClassName());
assertEquals("java:jboss/name5", ao2.getJndiName());
assertNull(ao2.getId());
assertTrue(ao2.isEnabled());
map = ao2.getConfigProperties();
assertEquals(0, map.size());
}
}