Revision: 9397
http://datanucleus.svn.sourceforge.net/datanucleus/?rev=9397&view=rev
Author: andy_jefferson
Date: 2010-03-31 13:50:45 +0000 (Wed, 31 Mar 2010)
Log Message:
-----------
Fix handling of timezone in tests. If we generate a new PMF then we have to reinstate it for the next test
Modified Paths:
--------------
test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/DateTest.java
test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlDateTest.java
test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlTimeTest.java
test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URITest.java
test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URLTest.java
Added Paths:
-----------
test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractTypeTestCase.java
Removed Paths:
-------------
test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractSimpleTestCase.java
Deleted: test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractSimpleTestCase.java
===================================================================
--- test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractSimpleTestCase.java 2010-03-31 09:29:22 UTC (rev 9396)
+++ test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractSimpleTestCase.java 2010-03-31 13:50:45 UTC (rev 9397)
@@ -1,322 +0,0 @@
-package org.datanucleus.tests.types;
-
-import javax.jdo.JDOHelper;
-import javax.jdo.PersistenceManager;
-import javax.jdo.Transaction;
-
-import org.datanucleus.tests.JDOPersistenceTestCase;
-
-/**
- * Abstract base class for tests on types.
- * @version $Revision: 1.2 $
- */
-public abstract class AbstractSimpleTestCase extends JDOPersistenceTestCase
-{
- private static boolean initialised = false;
-
- /**
- * @param name
- */
- protected AbstractSimpleTestCase(String name)
- {
- super(name);
- if (!initialised)
- {
- addClassesToSchema(new Class[]
- {
- getSimpleClass()
- }
- );
- initialised = true;
- }
- }
-
- protected abstract Class getSimpleClass();
-
- protected abstract Object getOneObject();
-
- protected abstract void assertCorrectValues(Object obj);
-
- protected abstract void changeObject(Object obj);
-
- protected abstract void replaceObject(Object obj);
-
- protected abstract int getNumberOfMutabilityChecks();
-
- /**
- * Test of the basic persistence and retrieval of java.net.URI mutable SCO type.
- */
- public void testBasicPersistence()
- throws Exception
- {
- Class type = null;
- try
- {
- Object obj1 = getOneObject();
- type = obj1.getClass();
- Object id;
- PersistenceManager pm = pmf.getPersistenceManager();
- Transaction tx = pm.currentTransaction();
- try
- {
- tx.begin();
- pm.makePersistent(obj1);
- id = JDOHelper.getObjectId(obj1);
- Object obj2 = pm.getObjectById(id,true);
- pm.refresh(obj2);
-
- assertCorrectValues(obj2);
- tx.commit();
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
-
- // Check retrieval with new PM (so we go to the datastore)
- pm = pmf.getPersistenceManager();
- tx = pm.currentTransaction();
- try
- {
- tx.begin();
- Object obj3 = pm.getObjectById(id,true);
- assertCorrectValues(obj3);
- tx.commit();
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
-
- for( int i=0; i<getNumberOfMutabilityChecks(); i++)
- {
- // Check the mutability
- pm = pmf.getPersistenceManager();
- tx = pm.currentTransaction();
- try
- {
- tx.begin();
- Object obj4 = pm.getObjectById(id,true);
- assertCorrectValues(obj4);
-
- changeObject(obj4);
-
- tx.commit();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- LOG.error(e);
- fail("Error updating the location of the Point : " + e.getMessage());
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
-
- // Check the mutability
- pm = pmf.getPersistenceManager();
- tx = pm.currentTransaction();
- try
- {
- tx.begin();
- Object obj4 = pm.getObjectById(id,true);
- assertCorrectValues(obj4);
- tx.commit();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- LOG.error(e);
- fail("Error updating the location of the Point : " + e.getMessage());
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
- }
- }
- finally
- {
- clean(type);
- }
- }
-
- /**
- * Test of the attach/detach process for an object that contains a SCO Point.
- * @throws Exception
- */
- public void testDetachAttach()
- throws Exception
- {
- Class type = null;
- try
- {
- Object obj1 = getOneObject();
- type = obj1.getClass();
- Object detached = null;
- Object id;
- PersistenceManager pm = pmf.getPersistenceManager();
- Transaction tx = pm.currentTransaction();
- pm.getFetchPlan().addGroup("group");
- try
- {
- tx.begin();
- pm.makePersistent(obj1);
- detached = pm.detachCopy(obj1);
-
- tx.commit();
- id = pm.getObjectId(obj1);
-
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
-
- assertCorrectValues(detached);
-
- changeObject(detached);
-
- // Attach the Point
- pm = pmf.getPersistenceManager();
- pm.getFetchPlan().addGroup("group");
- tx = pm.currentTransaction();
- try
- {
- tx.begin();
-
- pm.makePersistent(detached);
-
- tx.commit();
- }
- catch (Exception e)
- {
- fail("Error whilst attaching object containing SCO Point : " + e.getMessage());
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
-
- pm.close();
-
- }
-
- // Check retrieval with new PM (so we go to the datastore)
- pm = pmf.getPersistenceManager();
- tx = pm.currentTransaction();
- try
- {
- tx.begin();
- Object obj3 = pm.getObjectById(id,true);
- assertCorrectValues(obj3);
- tx.commit();
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
-
- // Check retrieval with new PM (so we go to the datastore)
- pm = pmf.getPersistenceManager();
- tx = pm.currentTransaction();
- pm.getFetchPlan().addGroup("group");
- try
- {
- tx.begin();
- Object obj4 = pm.getObjectById(id,true);
- detached = pm.detachCopy(obj4);
-
- tx.commit();
-
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
-
- replaceObject(detached);
-
- // Attach the Point
- pm = pmf.getPersistenceManager();
- pm.getFetchPlan().addGroup("group");
- tx = pm.currentTransaction();
- try
- {
- tx.begin();
-
- pm.makePersistent(detached);
-
- tx.commit();
- }
- catch (Exception e)
- {
- fail("Error whilst attaching object containing SCO Point : " + e.getMessage());
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
-
- pm.close();
-
- }
-
- // Check retrieval with new PM (so we go to the datastore)
- pm = pmf.getPersistenceManager();
- tx = pm.currentTransaction();
- try
- {
- tx.begin();
- Object obj3 = pm.getObjectById(id,true);
- assertCorrectValues(obj3);
- tx.commit();
- }
- finally
- {
- if (tx.isActive())
- {
- tx.rollback();
- }
- pm.close();
- }
- }
- finally
- {
- clean(type);
- }
- }
-}
\ No newline at end of file
Copied: test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractTypeTestCase.java (from rev 9277, test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractSimpleTestCase.java)
===================================================================
--- test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractTypeTestCase.java (rev 0)
+++ test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/AbstractTypeTestCase.java 2010-03-31 13:50:45 UTC (rev 9397)
@@ -0,0 +1,317 @@
+package org.datanucleus.tests.types;
+
+import javax.jdo.JDOHelper;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.datanucleus.tests.JDOPersistenceTestCase;
+
+/**
+ * Abstract base class for tests on types.
+ */
+public abstract class AbstractTypeTestCase extends JDOPersistenceTestCase
+{
+ private static boolean initialised = false;
+
+ protected AbstractTypeTestCase(String name)
+ {
+ super(name);
+ if (!initialised)
+ {
+ addClassesToSchema(new Class[]
+ {
+ getSimpleClass()
+ }
+ );
+ initialised = true;
+ }
+ }
+
+ protected abstract Class getSimpleClass();
+
+ protected abstract Object getOneObject();
+
+ protected abstract void assertCorrectValues(Object obj);
+
+ protected abstract void changeObject(Object obj);
+
+ protected abstract void replaceObject(Object obj);
+
+ protected abstract int getNumberOfMutabilityChecks();
+
+ /**
+ * Test of the basic persistence and retrieval of the type holder being tested.
+ */
+ public void testBasicPersistence()
+ throws Exception
+ {
+ Class type = null;
+ try
+ {
+ Object obj1 = getOneObject();
+ type = obj1.getClass();
+ Object id;
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+ pm.makePersistent(obj1);
+ id = JDOHelper.getObjectId(obj1);
+ Object obj2 = pm.getObjectById(id,true);
+ pm.refresh(obj2);
+
+ assertCorrectValues(obj2);
+ tx.commit();
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+
+ // Check retrieval with new PM (so we go to the datastore)
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+ Object obj3 = pm.getObjectById(id,true);
+ assertCorrectValues(obj3);
+ tx.commit();
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+
+ for( int i=0; i<getNumberOfMutabilityChecks(); i++)
+ {
+ // Check the mutability
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+ Object obj4 = pm.getObjectById(id,true);
+ assertCorrectValues(obj4);
+
+ changeObject(obj4);
+
+ tx.commit();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ LOG.error(e);
+ fail("Error updating the location of the Point : " + e.getMessage());
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+
+ // Check the mutability
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+ Object obj4 = pm.getObjectById(id,true);
+ assertCorrectValues(obj4);
+ tx.commit();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ LOG.error(e);
+ fail("Error updating the location of the Point : " + e.getMessage());
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+ }
+ finally
+ {
+ clean(type);
+ }
+ }
+
+ /**
+ * Test of the attach/detach process for a holder of the type being tested.
+ */
+ public void testDetachAttach()
+ throws Exception
+ {
+ Class type = null;
+ try
+ {
+ Object obj1 = getOneObject();
+ type = obj1.getClass();
+ Object detached = null;
+ Object id;
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ pm.getFetchPlan().addGroup("group");
+ try
+ {
+ tx.begin();
+ pm.makePersistent(obj1);
+ detached = pm.detachCopy(obj1);
+
+ tx.commit();
+ id = pm.getObjectId(obj1);
+
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+
+ assertCorrectValues(detached);
+
+ changeObject(detached);
+
+ // Attach the Point
+ pm = pmf.getPersistenceManager();
+ pm.getFetchPlan().addGroup("group");
+ tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+
+ pm.makePersistent(detached);
+
+ tx.commit();
+ }
+ catch (Exception e)
+ {
+ fail("Error whilst attaching object containing SCO Point : " + e.getMessage());
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+
+ pm.close();
+
+ }
+
+ // Check retrieval with new PM (so we go to the datastore)
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+ Object obj3 = pm.getObjectById(id,true);
+ assertCorrectValues(obj3);
+ tx.commit();
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+
+ // Check retrieval with new PM (so we go to the datastore)
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ pm.getFetchPlan().addGroup("group");
+ try
+ {
+ tx.begin();
+ Object obj4 = pm.getObjectById(id,true);
+ detached = pm.detachCopy(obj4);
+
+ tx.commit();
+
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+
+ replaceObject(detached);
+
+ // Attach the Point
+ pm = pmf.getPersistenceManager();
+ pm.getFetchPlan().addGroup("group");
+ tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+
+ pm.makePersistent(detached);
+
+ tx.commit();
+ }
+ catch (Exception e)
+ {
+ fail("Error whilst attaching object containing SCO Point : " + e.getMessage());
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+
+ pm.close();
+
+ }
+
+ // Check retrieval with new PM (so we go to the datastore)
+ pm = pmf.getPersistenceManager();
+ tx = pm.currentTransaction();
+ try
+ {
+ tx.begin();
+ Object obj3 = pm.getObjectById(id,true);
+ assertCorrectValues(obj3);
+ tx.commit();
+ }
+ finally
+ {
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+ finally
+ {
+ clean(type);
+ }
+ }
+}
\ No newline at end of file
Modified: test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/DateTest.java
===================================================================
--- test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/DateTest.java 2010-03-31 09:29:22 UTC (rev 9396)
+++ test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/DateTest.java 2010-03-31 13:50:45 UTC (rev 9397)
@@ -44,7 +44,7 @@
* control over semantics, and so the tests in this case are checking for correct
* conversions across timezones.
*/
-public class DateTest extends AbstractSimpleTestCase
+public class DateTest extends AbstractTypeTestCase
{
/**
* Holds the default TimeZone before any tests run, so that it may be restored
@@ -209,16 +209,22 @@
holder.setValue2(generateValueInTZ("2001-03-01 20:00:00.001"));
msvalue = holder.getValue2().getTime();
- PersistenceManager pm = getPM();
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
pm.makePersistent(holder);
- pm.currentTransaction().commit();
+ tx.commit();
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ getPMF(); // Reinstate default PMF
}
}
@@ -229,17 +235,23 @@
TimeZone.setDefault(TimeZone.getTimeZone("GMT+0"));
- PersistenceManager pm = getPM();
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
DateHolderC holder = (DateHolderC)pm.getObjectById(DateHolderC.class, generateValueInTZ("2007-09-09 12:27:00.021"));
assertEquals(generateValueInTZ("2001-03-01 20:00:00.001"), holder.getValue2());
assertEquals(msvalue, holder.getValue2().getTime()); // MS value still same
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ getPMF(); // Reinstate default PMF
}
}
@@ -252,10 +264,11 @@
TimeZone.setDefault(TimeZone.getTimeZone("GMT-3"));
- PersistenceManager pm = getPM();
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
DateHolderC holder = (DateHolderC)pm.getObjectById(DateHolderC.class, generateValueInTZ("2007-09-09 09:27:00.021"));
assertNotNull(holder);
assertEquals(generateValueInTZ("2001-03-01 17:00:00.001"), holder.getValue2());
@@ -263,7 +276,12 @@
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ getPMF(); // Reinstate default PMF
}
}
@@ -281,26 +299,32 @@
try
{
- PersistenceManager pm = getPM();
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
DateHolderA a = new DateHolderA();
a.setKey(generateValueInTZ("2001-03-01 20:00:00.001"));
pm.makePersistent(a);
- pm.currentTransaction().commit();
+ tx.commit();
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
}
- pm = getPM();
+ pm = getPMWithTimezoneAsGMT();
+ tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
pm.getObjectById(DateHolderA.class, generateValueInTZ("2001-03-01 20:00:00.001"));
- pm.currentTransaction().commit();
+ tx.commit();
}
catch (Exception e)
{
@@ -309,11 +333,16 @@
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
}
}
finally
{
+ getPMF(); // Reinstate default PMF
clean(DateHolderA.class);
}
}
@@ -332,18 +361,19 @@
try
{
- PersistenceManager pm = getPM();
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
DateHolderB b = new DateHolderB();
b.setKey(generateValueInTZ("2001-03-01 20:00:00.001"));
pm.makePersistent(b);
- pm.currentTransaction().commit();
+ tx.commit();
- pm.currentTransaction().begin();
+ tx.begin();
pm.getObjectById(DateHolderB.class, generateValueInTZ("2001-03-01 20:00:00.001"));
- pm.currentTransaction().commit();
+ tx.commit();
}
catch (Exception e)
{
@@ -352,15 +382,20 @@
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
}
- pm = getPM();
+ pm = getPMWithTimezoneAsGMT();
+ tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
pm.getObjectById(DateHolderB.class, generateValueInTZ("2001-03-01 20:00:00.001"));
- pm.currentTransaction().commit();
+ tx.commit();
}
catch (Exception e)
{
@@ -369,11 +404,16 @@
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
}
}
finally
{
+ getPMF(); // Reinstate default PMF
clean(DateHolderB.class);
}
}
@@ -385,38 +425,13 @@
* persisting to the database is required. So here the PersistenceManager
* has the datastore timezone set.
*/
- protected PersistenceManager getPM()
+ protected PersistenceManager getPMWithTimezoneAsGMT()
{
Properties props = new Properties();
props.setProperty("javax.jdo.option.ServerTimeZoneID", "GMT");
return pm = getPMF(props).getPersistenceManager();
}
- private void closePM()
- {
- if (pm != null)
- {
- try
- {
- try
- {
- if (pm.currentTransaction().isActive())
- {
- pm.currentTransaction().rollback();
- }
- }
- finally
- {
- pm.close();
- }
- }
- finally
- {
- pm = null;
- }
- }
- }
-
private Date valueWithCounter(String value, long add)
{
try
Modified: test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlDateTest.java
===================================================================
--- test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlDateTest.java 2010-03-31 09:29:22 UTC (rev 9396)
+++ test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlDateTest.java 2010-03-31 13:50:45 UTC (rev 9397)
@@ -41,7 +41,7 @@
*
* @author Michael Brown
*/
-public class SqlDateTest extends AbstractSimpleTestCase
+public class SqlDateTest extends AbstractTypeTestCase
{
/**
* Holds the default TimeZone before any tests run, so that it may be restored
Modified: test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlTimeTest.java
===================================================================
--- test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlTimeTest.java 2010-03-31 09:29:22 UTC (rev 9396)
+++ test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/SqlTimeTest.java 2010-03-31 13:50:45 UTC (rev 9397)
@@ -22,6 +22,7 @@
import java.util.Properties;
import java.util.TimeZone;
+
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.Transaction;
@@ -39,15 +40,8 @@
* conversions across timezones, i.e. none, as pure times should not be effected
* by time zones.
*/
-public class SqlTimeTest extends AbstractSimpleTestCase
+public class SqlTimeTest extends AbstractTypeTestCase
{
- /**
- * Holds the default TimeZone before any tests run, so that it may be restored
- * after the test completes.
- */
- private TimeZone savedTz;
-
-
public SqlTimeTest()
{
super("SqlTimeTest");
@@ -58,8 +52,6 @@
super(name);
}
-
-
/* Save the current TimeZone and cleanup from any previous tests.
* Cleanup is done here, and not at test completion, so that the
* database can be examined when tests fail.
@@ -67,7 +59,6 @@
public void setUp() throws Exception
{
super.setUp();
- savedTz = TimeZone.getDefault();
}
/* Restore the default TimeZone, since some of these tests change
@@ -75,24 +66,85 @@
*/
public void tearDown() throws Exception
{
- if (savedTz != null)
- {
- TimeZone.setDefault(savedTz);
- }
clean(SqlTimeHolder.class);
super.tearDown();
}
+ protected Class getSimpleClass()
+ {
+ return SqlTimeHolder.class;
+ }
- /* A common well defined database timezone is set for timezone tests.
- */
- protected PersistenceManager getPM()
+ SqlTimeHolder holder;
+ static long counter = 1;
+
+ protected Object getOneObject()
{
- Properties props = new Properties();
- props.setProperty("javax.jdo.option.ServerTimeZoneID", "GMT"); // Although not used by the java.sql.Time as String persistence, set for completeness
- return pm = getPMF(props).getPersistenceManager();
+ holder = new SqlTimeHolder();
+ holder.setValue(generateTestValue2());
+ counter++;
+
+ SqlTimeHolder u = new SqlTimeHolder();
+ u.setKey(generateTestValue1());
+ u.setValue(holder.getValue());
+ return u;
}
+ private Time generateTestValue1()
+ {
+ return valueWithCounter("09:09:09", System.currentTimeMillis() + counter);
+ }
+
+ private Time generateTestValue2()
+ {
+ return valueWithCounter("11:23:45", System.currentTimeMillis() + counter);
+ }
+
+ private Time generateTestValue3()
+ {
+ return valueWithCounter("01:01:01", 511);
+ }
+
+ private Time valueWithCounter(String value, long add)
+ {
+ Time result = Time.valueOf(value);
+ result.setTime(result.getTime() + (Math.abs(add) % 1000 * 1000));
+ return result;
+ }
+
+ protected void assertCorrectValues(Object obj)
+ {
+ SqlTimeHolder u = (SqlTimeHolder) obj;
+ assertEquals(holder.getValue().toString(), u.getValue().toString());
+ }
+
+ protected void changeObject(Object obj)
+ {
+ SqlTimeHolder u = (SqlTimeHolder) obj;
+ u.setValue(generateTestValue2());
+ counter++;
+
+ //update local holder
+ holder.setValue(u.getValue());
+ }
+
+ protected void replaceObject(Object obj)
+ {
+ SqlTimeHolder u = (SqlTimeHolder) obj;
+ u.setValue(generateTestValue2());
+ counter++;
+
+ //update local holder
+ holder.setValue(u.getValue());
+ }
+
+ protected int getNumberOfMutabilityChecks()
+ {
+ return 0;
+ }
+
+ // -------------------------------------------------------------------------------------------------------
+
private void closePM()
{
if (pm != null)
@@ -118,40 +170,8 @@
}
}
-
-
- /***************************************
- * First test block, for time with default mapping.
- */
-
-
-
- private Time valueWithCounter(String value, long add)
- {
- Time result = Time.valueOf(value);
- result.setTime(result.getTime() + (Math.abs(add) % 1000 * 1000));
- return result;
- }
-
- private Time generateTestValue1()
- {
- return valueWithCounter("09:09:09", System.currentTimeMillis() + counter);
- }
-
- private Time generateTestValue2()
- {
- return valueWithCounter("11:23:45", System.currentTimeMillis() + counter);
- }
-
- private Time generateTestValue3()
- {
- return valueWithCounter("01:01:01", 511);
- }
-
-
/**
- * Test for querying of URI fields.
- * @throws Exception
+ * Test for querying of time fields.
*/
public void testQuery()
throws Exception
@@ -161,25 +181,27 @@
try
{
tx.begin();
+LOG.info(">> testQuery persisting 3 one objects and 1 other");
pm.makePersistent(getOneObject());
pm.makePersistent(getOneObject());
pm.makePersistent(getOneObject());
+
SqlTimeHolder holder = new SqlTimeHolder();
holder.setKey(generateTestValue1());
holder.setValue(generateTestValue3());
holder.setValue2(generateTestValue3());
pm.makePersistent(holder);
+ // Query when stored in "native"
Query q = pm.newQuery(getSimpleClass(), "value == p");
- q.declareImports("import java.sql.Time");
- q.declareParameters("Time p");
+ q.declareParameters("java.sql.Time p");
Collection c = (Collection) q.execute(holder.getValue());
assertEquals(1, c.size());
assertEquals(generateTestValue3(), ((SqlTimeHolder)c.iterator().next()).getValue());
+ // Query when stored as String
q = pm.newQuery(getSimpleClass(), "value2 == p");
- q.declareImports("import java.sql.Time");
- q.declareParameters("Time p");
+ q.declareParameters("java.sql.Time p");
c = (Collection) q.execute(holder.getValue2());
assertEquals(1, c.size());
assertEquals(generateTestValue3(), ((SqlTimeHolder)c.iterator().next()).getValue2());
@@ -196,131 +218,113 @@
}
}
- SqlTimeHolder holder;
- static long counter = 1;
-
- protected Class getSimpleClass()
+ /**
+ * Test persistence of Time field as String.
+ */
+ public void testWritePersistingAsString()
{
- return SqlTimeHolder.class;
+ performWrite();
+ getPMF();
}
- protected Object getOneObject()
- {
- holder = new SqlTimeHolder();
- holder.setValue(generateTestValue2());
- counter++;
-
- SqlTimeHolder u = new SqlTimeHolder();
- u.setKey(generateTestValue1());
- u.setValue(holder.getValue());
- return u;
- }
-
- protected void assertCorrectValues(Object obj)
- {
- SqlTimeHolder u = (SqlTimeHolder) obj;
- assertEquals(holder.getValue().toString(), u.getValue().toString());
- }
-
- protected void changeObject(Object obj)
- {
- SqlTimeHolder u = (SqlTimeHolder) obj;
- u.setValue(generateTestValue2());
- counter++;
-
- //update local holder
- holder.setValue(u.getValue());
- }
-
- protected void replaceObject(Object obj)
- {
- SqlTimeHolder u = (SqlTimeHolder) obj;
- u.setValue(generateTestValue2());
- counter++;
-
- //update local holder
- holder.setValue(u.getValue());
- }
-
- protected int getNumberOfMutabilityChecks()
- {
- return 0;
- }
-
-
-
-
- /***************************************
- * Second test block, for time with varchar mapping.
+ /**
+ * Test retrieval of Time field as String.
*/
-
- private Time generateValue(String value)
+ public void testReadPersistingAsString()
{
- return Time.valueOf(value);
- }
+ performWrite();
- private long msvalue;
-
- public void testWrite()
- {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+0"));
-
- SqlTimeHolder holder = new SqlTimeHolder();
- holder.setKey(generateValue("12:27:00"));
- holder.setValue2(generateValue("20:00:00"));
- msvalue = holder.getValue2().getTime();
-
- PersistenceManager pm = getPM();
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
- pm.makePersistent(holder);
- pm.currentTransaction().commit();
+ tx.begin();
+ SqlTimeHolder holder = (SqlTimeHolder)pm.getObjectById(SqlTimeHolder.class, generateValue("12:27:00"));
+ assertEquals(generateValue("20:00:00"), holder.getValue2());
+ assertEquals(msvalue, holder.getValue2().getTime()); // MS value same
}
finally
{
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
closePM();
+ getPMF();
}
}
- public void testRead()
+ /**
+ * Test timezone handling of Time field as String.
+ */
+ public void testTimezonePersistingAsString()
{
- testWrite();
+ performWrite();
- TimeZone.setDefault(TimeZone.getTimeZone("GMT+0"));
-
- PersistenceManager pm = getPM();
+ TimeZone.setDefault(TimeZone.getTimeZone("GMT-3"));
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
+ tx.begin();
SqlTimeHolder holder = (SqlTimeHolder)pm.getObjectById(SqlTimeHolder.class, generateValue("12:27:00"));
+ assertNotNull(holder);
assertEquals(generateValue("20:00:00"), holder.getValue2());
- assertEquals(msvalue, holder.getValue2().getTime()); // MS value same
+ assertEquals(msvalue + 3*60*60*1000l, holder.getValue2().getTime()); // MS value different
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
+ getPMF(); // Reset to default PMF
}
}
- public void testTimezone()
+ private long msvalue;
+
+ private Time generateValue(String value)
{
- testWrite();
+ return Time.valueOf(value);
+ }
- TimeZone.setDefault(TimeZone.getTimeZone("GMT-3"));
+ public void performWrite()
+ {
+ TimeZone.setDefault(TimeZone.getTimeZone("GMT+0"));
- PersistenceManager pm = getPM();
+ SqlTimeHolder holder = new SqlTimeHolder();
+ holder.setKey(generateValue("12:27:00"));
+ holder.setValue2(generateValue("20:00:00"));
+ msvalue = holder.getValue2().getTime();
+
+ PersistenceManager pm = getPMWithTimezoneAsGMT();
+ Transaction tx = pm.currentTransaction();
try
{
- pm.currentTransaction().begin();
- SqlTimeHolder holder = (SqlTimeHolder)pm.getObjectById(SqlTimeHolder.class, generateValue("12:27:00"));
- assertNotNull(holder);
- assertEquals(generateValue("20:00:00"), holder.getValue2());
- assertEquals(msvalue + 3*60*60*1000l, holder.getValue2().getTime()); // MS value different
+ tx.begin();
+ pm.makePersistent(holder);
+ tx.commit();
}
finally
{
- closePM();
+ if (tx.isActive())
+ {
+ tx.rollback();
+ }
+ pm.close();
}
}
+
+ /**
+ * Use a PMF with "GMT" set as the timezone.
+ */
+ protected PersistenceManager getPMWithTimezoneAsGMT()
+ {
+ Properties props = new Properties();
+ props.setProperty("javax.jdo.option.ServerTimeZoneID", "GMT"); // Although not used by the java.sql.Time as String persistence, set for completeness
+ return pm = getPMF(props).getPersistenceManager();
+ }
}
\ No newline at end of file
Modified: test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URITest.java
===================================================================
--- test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URITest.java 2010-03-31 09:29:22 UTC (rev 9396)
+++ test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URITest.java 2010-03-31 13:50:45 UTC (rev 9397)
@@ -29,7 +29,7 @@
/**
* Tests for SCO mutable type java.net.URI.
*/
-public class URITest extends AbstractSimpleTestCase
+public class URITest extends AbstractTypeTestCase
{
public URITest()
Modified: test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URLTest.java
===================================================================
--- test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URLTest.java 2010-03-31 09:29:22 UTC (rev 9396)
+++ test/accessplatform/trunk/test.jdo.general/src/test/org/datanucleus/tests/types/URLTest.java 2010-03-31 13:50:45 UTC (rev 9397)
@@ -30,7 +30,7 @@
/**
* Tests for SCO type java.net.URL.
*/
-public class URLTest extends AbstractSimpleTestCase
+public class URLTest extends AbstractTypeTestCase
{
public URLTest()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|