/*
* 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.cmp2.simple;
import java.math.BigDecimal;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.ejb.DuplicateKeyException;
import org.jboss.logging.Logger;
import junit.framework.Test;
import org.jboss.test.JBossTestCase;
import org.jboss.test.util.ejb.EJBTestCase;
/** Basic cmp2 tests
*
* @author alex@jboss.org
* @author Scott.Stark@jboss.org
* @version $Revision: 81036 $
*/
public class SimpleUnitTestCase extends EJBTestCase
{
private static Logger log = Logger.getLogger(SimpleUnitTestCase.class);
public static Test suite() throws Exception
{
return JBossTestCase.getDeploySetup(
SimpleUnitTestCase.class, "cmp2-simple.jar");
}
public SimpleUnitTestCase(String name)
{
super(name);
Calendar c = Calendar.getInstance();
c.clear(); // Must clear time components
c.set(1981, 4, 5);
sqlDateValue = new java.sql.Date(c.getTime().getTime());
c = Calendar.getInstance();
c.clear(); // Must set date components to epoch
c.set(Calendar.HOUR_OF_DAY, 22);
c.set(Calendar.MINUTE, 33);
c.set(Calendar.SECOND, 44);
// java.sql.Time does not have a millisecond component
timeValue = new java.sql.Time(c.getTime().getTime());
objectValue = new HashMap();
((HashMap) objectValue).put("boolean", booleanObject);
((HashMap) objectValue).put("byte", byteObject);
((HashMap) objectValue).put("short", shortObject);
((HashMap) objectValue).put("int", integerObject);
((HashMap) objectValue).put("long", longObject);
((HashMap) objectValue).put("float", floatObject);
((HashMap) objectValue).put("double", doubleObject);
((HashMap) objectValue).put("string", stringValue);
((HashMap) objectValue).put("utilDate", utilDateValue);
((HashMap) objectValue).put("sqlDate", sqlDateValue);
((HashMap) objectValue).put("time", timeValue);
((HashMap) objectValue).put("timestamp", timestampValue);
((HashMap) objectValue).put("bigDecimal", bigDecimalValue);
}
private SimpleHome getSimpleHome()
{
try
{
InitialContext jndiContext = new InitialContext();
return (SimpleHome) jndiContext.lookup("cmp2/simple/Simple");
}
catch (Exception e)
{
log.debug("failed", e);
fail("Exception in getSimpleHome: " + e.getMessage());
}
return null;
}
private Simple simple;
private final boolean booleanPrimitive = true;
private final Boolean booleanObject = Boolean.FALSE;
private final byte bytePrimitive = (byte) 11;
private final Byte byteObject = new Byte((byte) 22);
private final short shortPrimitive = (short) 33;
private final Short shortObject = new Short((short) 44);
private final int integerPrimitive = 55;
private final Integer integerObject = new Integer(66);
private final long longPrimitive = 77;
private final Long longObject = new Long(88);
private final float floatPrimitive = 11.11f;
private final Float floatObject = new Float(22.22f);
private final double doublePrimitive = 33.33;
private final Double doubleObject = new Double(44.44);
private final String stringValue = "test string value";
private final java.util.Date utilDateValue = new java.util.Date(1111);
private final java.sql.Date sqlDateValue;
private final Time timeValue;
private final Timestamp timestampValue = new Timestamp(4444);
private final BigDecimal bigDecimalValue = new BigDecimal("12345678.1234");
private final byte[] byteArrayValue = "byte array test".getBytes();
private final Object objectValue;
private final ValueClass valueClass = new ValueClass(111, 999);
private final Hashtable hashtable = new Hashtable();
public void testBooleanPrimitive() throws Exception
{
assertEquals(booleanPrimitive, simple.getBooleanPrimitive());
}
public void testBooleanObject() throws Exception
{
assertEquals(booleanObject, simple.getBooleanObject());
}
public void testBytePrimitive() throws Exception
{
assertEquals(bytePrimitive, simple.getBytePrimitive());
}
public void testByteObject() throws Exception
{
assertEquals(byteObject, simple.getByteObject());
}
public void testShortPrimitive() throws Exception
{
assertEquals(shortPrimitive, simple.getShortPrimitive());
}
public void testShortObject() throws Exception
{
assertEquals(shortObject, simple.getShortObject());
}
public void testIntegerPrimitive() throws Exception
{
assertEquals(integerPrimitive, simple.getIntegerPrimitive());
}
public void testIntegerObject() throws Exception
{
assertEquals(integerObject, simple.getIntegerObject());
}
public void testLongPrimitive() throws Exception
{
assertEquals(longPrimitive, simple.getLongPrimitive());
}
public void testLongObject() throws Exception
{
assertEquals(longObject, simple.getLongObject());
}
public void testFloatPrimitive() throws Exception
{
assertEquals(floatPrimitive, simple.getFloatPrimitive(), 0);
}
public void testFloatObject() throws Exception
{
assertEquals(floatObject, simple.getFloatObject());
}
public void testDoublePrimitive() throws Exception
{
assertEquals(doublePrimitive, simple.getDoublePrimitive(), 0);
}
public void testDoubleObject() throws Exception
{
assertEquals(doubleObject, simple.getDoubleObject());
}
public void testStringValue() throws Exception
{
assertEquals(stringValue, simple.getStringValue());
}
public void testUtilDateValue() throws Exception
{
assertTrue(
"expected :<" + simple.getUtilDateValue() + "> but was <" +
utilDateValue + ">",
utilDateValue.compareTo(simple.getUtilDateValue()) == 0);
}
public void testSqlDateValue() throws Exception
{
assertTrue(
"expected :<" + simple.getSqlDateValue() + "> but was <" +
sqlDateValue + ">",
sqlDateValue.compareTo(simple.getSqlDateValue()) == 0);
}
public void testTimeValue() throws Exception
{
assertTrue(
"expected :<" + simple.getTimeValue() + "> but was <" +
timeValue + ">",
timeValue.compareTo(simple.getTimeValue()) == 0);
}
public void testTimestampValue() throws Exception
{
assertTrue(
"expected :<" + simple.getTimestampValue() + "> but was <" +
timestampValue + ">",
timestampValue.compareTo(simple.getTimestampValue()) == 0);
}
public void testBigDecimalValue() throws Exception
{
assertTrue(
"expected :<" + simple.getBigDecimalValue() + "> but was <" +
bigDecimalValue + ">",
bigDecimalValue.compareTo(simple.getBigDecimalValue()) == 0);
}
public void testByteArrayValue() throws Exception
{
byte[] array = simple.getByteArrayValue();
assertEquals(byteArrayValue.length, array.length);
for (int i = 0; i < array.length; i++)
{
assertEquals(byteArrayValue[i], array[i]);
}
}
public void testValueClass() throws Exception
{
ValueClass vc = simple.getValueClass();
log.info("getValueClass class: " + vc.getClass().getName());
log.info("getValueClass classloader: " + vc.getClass().getClassLoader());
log.info("ValueClass class: " + valueClass.getClass().getName());
log.info("ValueClass classloader: " + valueClass.getClass().getClassLoader());
assertEquals(valueClass, vc);
}
public void testObjectValue() throws Exception
{
Object v = simple.getObjectValue();
log.info("getObjectValue class: " + v.getClass().getName());
log.info("getObjectValue classloader: " + v.getClass().getClassLoader());
log.info("objectValue class: " + objectValue.getClass().getName());
log.info("objectValue classloader: " + objectValue.getClass().getClassLoader());
assertEquals(objectValue, v);
}
public void testLiteralToLiteral() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE TRUE=TRUE",
new Object[0]);
assertTrue(c.size() == 1);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE 1.2=1.2",
new Object[0]);
assertTrue(c.size() == 1);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE 'funk'='funk'",
new Object[0]);
assertTrue(c.size() == 1);
}
public void testUtilDateBetween() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
java.util.Date utilDateBefore = new java.util.Date(100);
java.util.Date utilDateAfter = new java.util.Date(2000);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE s.utilDateValue BETWEEN ?1 AND ?2",
new Object[]{utilDateBefore, utilDateAfter});
assertTrue(c.size() == 1);
}
public void testSQLDateBetween() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
Calendar calendar;
calendar = Calendar.getInstance();
calendar.clear(); // Must clear time components
calendar.set(1981, 4, 3);
java.sql.Date sqlDateBefore =
new java.sql.Date(calendar.getTime().getTime());
calendar = Calendar.getInstance();
calendar.clear(); // Must clear time components
calendar.set(1981, 4, 6);
java.sql.Date sqlDateAfter =
new java.sql.Date(calendar.getTime().getTime());
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE s.sqlDateValue BETWEEN ?1 AND ?2",
new Object[]{sqlDateBefore, sqlDateAfter});
assertTrue(c.size() == 1);
}
public void testTimeBetween() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
Calendar calendar;
calendar = Calendar.getInstance();
calendar.clear(); // Must set date components to epoch
calendar.set(Calendar.HOUR_OF_DAY, 21);
calendar.set(Calendar.MINUTE, 33);
calendar.set(Calendar.SECOND, 44);
// java.sql.Time does not have a millisecond component
Time timeBefore = new java.sql.Time(calendar.getTime().getTime());
calendar = Calendar.getInstance();
calendar.clear(); // Must set date components to epoch
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 33);
calendar.set(Calendar.SECOND, 44);
// java.sql.Time does not have a millisecond component
Time timeAfter = new java.sql.Time(calendar.getTime().getTime());
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE s.timeValue BETWEEN ?1 AND ?2",
new Object[]{timeBefore, timeAfter});
assertTrue(c.size() == 1);
}
public void testTimestampBetween() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
Timestamp timestampBefore = new Timestamp(1111);
Timestamp timestampAfter = new Timestamp(8888);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE s.timestampValue BETWEEN ?1 AND ?2",
new Object[]{timestampBefore, timestampAfter});
assertTrue(c.size() == 1);
}
public void testTimestampComparison() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
Timestamp timestampBefore = new Timestamp(1111);
Timestamp timestampAfter = new Timestamp(8888);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE s.timestampValue >= ?1 AND s.timestampValue <= ?2",
new Object[]{timestampBefore, timestampAfter});
assertTrue(c.size() == 1);
}
public void testTimestampIn() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
Timestamp timestampBefore = new Timestamp(1111);
Timestamp timestampAfter = new Timestamp(8888);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE s.timestampValue IN(?1, ?2, ?3)",
new Object[]{timestampBefore, timestampAfter, timestampValue});
assertTrue(c.size() == 1);
}
public void testStringBetween() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE UCASE(s.stringValue) BETWEEN UCASE(?1) AND UCASE(?2)",
new Object[]{"aaaaa", "zzzzz"});
assertTrue(c.size() == 1);
}
public void testStringComparison() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE UCASE(s.stringValue) >= UCASE(?1) AND " +
" UCASE(s.stringValue) <= UCASE(?2)",
new Object[]{"aaaaa", "zzzzz"});
assertTrue(c.size() == 1);
}
public void testStringIn() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE UCASE(s.stringValue) IN(UCASE(?1), UCASE(?2), " +
" UCASE('" + stringValue + "'))",
new Object[]{"aaaaa", "zzzzz"});
assertTrue(c.size() == 1);
}
public void testLike() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE UCASE(s.stringValue) LIKE UCASE(?1)",
new Object[]{"% string %"});
assertTrue(c.size() == 1);
}
public void testNumericIn() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE SQRT(s.longPrimitive) " +
" IN(SQRT(?1), SQRT(?2), SQRT( " + longPrimitive + " ) )",
new Object[]{new Long(23094), new Long(20984)});
assertTrue(c.size() == 1);
}
public void testNumbericComparison() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE SQRT(s.longPrimitive) >= SQRT(?1) AND " +
" SQRT(s.longPrimitive) <= SQRT(?2)",
new Object[]{new Long(22), new Long(20984)});
assertTrue(c.size() == 1);
}
public void testConcatFunction() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE CONCAT(?1, ?2) = ?3",
new Object[]{
"foo",
"bar",
"foobar"}
);
assertTrue(c.size() == 1);
}
public void testLengthFunction() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE LENGTH(?1) = ?2",
new Object[]{
"12345",
new Integer(5)}
);
assertTrue(c.size() == 1);
}
public void testSelectValueClass() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c = simpleHome.selectValueClass();
assertEquals(1, c.size());
ValueClass v = (ValueClass) c.iterator().next();
assertEquals(valueClass, v);
}
public void testLocateFunction() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE LOCATE(?1, ?2, ?3) = ?4",
new Object[]{
"x",
"1x34x67x90",
new Integer(3),
new Integer(5)}
);
assertTrue(c.size() == 1);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE LOCATE(?1, ?2) = ?3",
new Object[]{
"x",
"1x34x67x90",
new Integer(2)}
);
assertTrue(c.size() == 1);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE LOCATE(?1, ?2, ?3) = ?4",
new Object[]{
"z",
"1x34x67x90",
new Integer(3),
new Integer(0)}
);
assertTrue(c.size() == 1);
}
/* Uncomment when we upgrade to Hypersonic 1.7
public void testSubstringFunction() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c;
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE SUBSTRING(?1, ?2, ?3) = ?4",
new Object[]{
"1234587890",
new Integer(5),
new Integer(3),
"567"}
);
assertTrue(c.size() == 1);
c = simpleHome.selectDynamic(
"SELECT OBJECT(s) " +
"FROM simple s " +
"WHERE SUBSTRING(?1, ?2) = ?3",
new Object[]{
"1234587890",
new Integer(5),
"567890"}
);
assertTrue(c.size() == 1);
}
*/
public void testFindWithByteArray() throws Exception
{
SimpleHome simpleHome = getSimpleHome();
Collection c = simpleHome.findWithByteArray(byteArrayValue);
assertEquals(1, c.size());
Simple s = (Simple) c.iterator().next();
assertTrue(s.isIdentical(simple));
assertEquals(booleanPrimitive, s.getBooleanPrimitive());
assertEquals(booleanObject, s.getBooleanObject());
assertEquals(bytePrimitive, s.getBytePrimitive());
assertEquals(byteObject, s.getByteObject());
assertEquals(shortPrimitive, s.getShortPrimitive());
assertEquals(shortObject, s.getShortObject());
assertEquals(integerPrimitive, s.getIntegerPrimitive());
assertEquals(integerObject, s.getIntegerObject());
assertEquals(longPrimitive, s.getLongPrimitive());
assertEquals(longObject, s.getLongObject());
assertEquals(floatPrimitive, s.getFloatPrimitive(), 0);
assertEquals(floatObject, s.getFloatObject());
assertEquals(doublePrimitive, s.getDoublePrimitive(), 0);
assertEquals(doubleObject, s.getDoubleObject());
assertEquals(stringValue, s.getStringValue());
assertTrue(
"expected :<" + simple.getUtilDateValue() + "> but was <" +
utilDateValue + ">",
utilDateValue.compareTo(simple.getUtilDateValue()) == 0);
assertTrue(
"expected :<" + simple.getSqlDateValue() + "> but was <" +
sqlDateValue + ">",
sqlDateValue.compareTo(simple.getSqlDateValue()) == 0);
assertTrue(
"expected :<" + simple.getTimeValue() + "> but was <" +
timeValue + ">",
timeValue.compareTo(simple.getTimeValue()) == 0);
assertTrue(
"expected :<" + simple.getTimestampValue() + "> but was <" +
timestampValue + ">",
timestampValue.compareTo(simple.getTimestampValue()) == 0);
assertTrue(
"expected :<" + simple.getBigDecimalValue() + "> but was <" +
bigDecimalValue + ">",
bigDecimalValue.compareTo(simple.getBigDecimalValue()) == 0);
byte[] array = simple.getByteArrayValue();
assertEquals(byteArrayValue.length, array.length);
for (int i = 0; i < array.length; i++)
{
assertEquals(byteArrayValue[i], array[i]);
}
assertEquals(valueClass, simple.getValueClass());
assertEquals(objectValue, simple.getObjectValue());
}
public void testDuplicateKey() throws Exception
{
try
{
SimpleHome simpleHome = getSimpleHome();
simpleHome.create("simple");
fail("Did not get DuplicateKeyException");
}
catch (DuplicateKeyException e)
{
// OK
}
}
public void testHashtable() throws Exception
{
simple.addToHashtable("key1", "value1");
simple.addToHashtable("key2", "value2");
Hashtable result = simple.getHashtable();
assertEquals(2, result.size());
}
public void testOptionAUpdate() throws Exception
{
InitialContext ctx = new InitialContext();
SimpleHome home = (SimpleHome) ctx.lookup("cmp2/simple/SimpleA");
Simple simpleA = null;
try
{
simpleA = home.findByPrimaryKey("simpleA");
}
catch (Exception e)
{
simpleA = home.create("simpleA");
}
simpleA.setIntegerPrimitive(47);
int i = simpleA.getIntegerPrimitive();
assertTrue("i == 47 ", i == 47);
}
public void setUpEJB(Properties props) throws Exception
{
SimpleHome simpleHome = getSimpleHome();
boolean wasCreated = false;
try
{
simple = simpleHome.findByPrimaryKey("simple");
}
catch (Exception e)
{
}
if (simple == null)
{
simple = simpleHome.create("simple");
wasCreated = true;
}
simple.setBooleanPrimitive(booleanPrimitive);
simple.setBooleanObject(booleanObject);
simple.setBytePrimitive(bytePrimitive);
simple.setByteObject(byteObject);
simple.setShortPrimitive(shortPrimitive);
simple.setShortObject(shortObject);
simple.setIntegerPrimitive(integerPrimitive);
simple.setIntegerObject(integerObject);
simple.setLongPrimitive(longPrimitive);
simple.setLongObject(longObject);
simple.setFloatPrimitive(floatPrimitive);
simple.setFloatObject(floatObject);
simple.setDoublePrimitive(doublePrimitive);
simple.setDoubleObject(doubleObject);
simple.setStringValue(stringValue);
simple.setUtilDateValue(utilDateValue);
simple.setSqlDateValue(sqlDateValue);
simple.setTimeValue(timeValue);
simple.setTimestampValue(timestampValue);
if (wasCreated)
{
simple.setBigDecimalValue(bigDecimalValue);
simple.setByteArrayValue(byteArrayValue);
simple.setObjectValue(objectValue);
simple.setValueClass(valueClass);
simple.setHashtable(hashtable);
}
}
public void tearDownEJB(Properties props) throws Exception
{
simple.remove();
}
}