db-jdo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From m..@apache.org
Subject svn commit: r168430 - in /incubator/jdo/trunk: ri11/test/java/org/apache/jdo/test/util/ tck11/test/java/org/apache/jdo/tck/ tck11/test/java/org/apache/jdo/tck/api/persistencemanager/ tck20/test/java/org/apache/jdo/tck/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/
Date Thu, 05 May 2005 21:44:58 GMT
Author: mbo
Date: Thu May  5 14:44:58 2005
New Revision: 168430

URL: http://svn.apache.org/viewcvs?rev=168430&view=rev
Log:
JDO-32 Some tests, when they fail, do not close pmf. Change method closePMF to make sure that
the pmf is closed and changed cleanup method in PersistenceManagerTest

Modified:
    incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/util/AbstractTest.java
    incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/JDO_Test.java
    incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java
    incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/JDO_Test.java
    incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java

Modified: incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/util/AbstractTest.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/util/AbstractTest.java?rev=168430&r1=168429&r2=168430&view=diff
==============================================================================
--- incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/util/AbstractTest.java (original)
+++ incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/util/AbstractTest.java Thu May
 5 14:44:58 2005
@@ -47,6 +47,7 @@
 import javax.jdo.PersistenceManager;
 import javax.jdo.PersistenceManagerFactory;
 import javax.jdo.Transaction;
+import javax.jdo.JDOException;
 
 import junit.framework.TestCase;
 
@@ -297,7 +298,8 @@
      *
      */
     protected void closePMF() {
-        if (pmf != null) {
+        JDOException failure = null;
+        while (pmf != null) {
             if (debug) logger.debug("closePMF");
             try {
                 // Execute pmf.close in a privileged block, otherwise the test
@@ -307,11 +309,56 @@
                             pmf.close();
                             return null;
                         }});
-            }
-            finally {
                 pmf = null;
             }
+            catch (JDOException ex) {
+                // store failure of first call pmf.close
+                if (failure == null)
+                    failure = ex;
+                PersistenceManager[] pms = getFailedPersistenceManagers(ex);
+                for (int i = 0; i < pms.length; i++) {
+                    closePM(pms[i]);
+                }
+            }
+        }
+
+        // rethrow JDOException thrown by pmf.close
+        if (failure != null)
+            throw failure;
+    }
+
+    /** 
+     * This method cleans up the specified 
+     * <code>PersistenceManager</code>. If the pm still has an open
+     * transaction, it will be rolled back, before closing the pm.
+     */
+    protected void closePM(PersistenceManager pm) 
+    {
+        if ((pm != null) && !pm.isClosed()) {
+            if (pm.currentTransaction().isActive()) {
+                pm.currentTransaction().rollback();
+            }
+            pm.close();
+        }
+    }
+
+    /** */
+    protected PersistenceManager[] getFailedPersistenceManagers(
+        JDOException ex) {
+        Throwable[] nesteds = ex.getNestedExceptions();
+        int numberOfExceptions = nesteds==null ? 0 : nesteds.length;
+        PersistenceManager[] result = new PersistenceManager[numberOfExceptions];
+        for (int i = 0; i < numberOfExceptions; ++i) {
+            JDOException exc = (JDOException)nesteds[i];
+            Object failedObject = exc.getFailedObject();
+            if (exc.getFailedObject() instanceof PersistenceManager) {
+                result[i] = (PersistenceManager)failedObject;
+            } else {
+                fail("Unexpected failed object of type: " +
+                     failedObject.getClass().getName());
+            }
         }
+        return result;
     }
 
     /**

Modified: incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/JDO_Test.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/JDO_Test.java?rev=168430&r1=168429&r2=168430&view=diff
==============================================================================
--- incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/JDO_Test.java (original)
+++ incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/JDO_Test.java Thu May  5 14:44:58
2005
@@ -26,6 +26,7 @@
 import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManager;
 import javax.jdo.PersistenceManagerFactory;
+import javax.jdo.JDOException;
 
 import junit.framework.TestCase;
 
@@ -229,10 +230,47 @@
     /** Closes the pmf stored in this instance. */
     protected void closePMF()
     {
-        if (pmf != null) {
-            pmf.close();
-            pmf = null;
+        JDOException failure = null;
+        while (pmf != null) {
+            try {
+                pmf.close();
+                pmf = null;
+            }
+            catch (JDOException ex) {
+                // store failure of first call pmf.close
+                if (failure == null)
+                    failure = ex;
+                PersistenceManager[] pms = getFailedPersistenceManagers(
+                    "closePMF", ex);
+                for (int i = 0; i < pms.length; i++) {
+                    cleanupPM(pms[i]);
+                }
+            }
+        }
+
+        // rethrow JDOException thrown by pmf.close
+        if (failure != null)
+            throw failure;
+    }
+
+    /** */
+    protected PersistenceManager[] getFailedPersistenceManagers(
+        String assertionFailure, JDOException ex) {
+        Throwable[] nesteds = ex.getNestedExceptions();
+        int numberOfExceptions = nesteds==null ? 0 : nesteds.length;
+        PersistenceManager[] result = new PersistenceManager[numberOfExceptions];
+        for (int i = 0; i < numberOfExceptions; ++i) {
+            JDOException exc = (JDOException)nesteds[i];
+            Object failedObject = exc.getFailedObject();
+            if (exc.getFailedObject() instanceof PersistenceManager) {
+                result[i] = (PersistenceManager)failedObject;
+            } else {
+                fail(assertionFailure,
+                     "Unexpected failed object of type: " +
+                     failedObject.getClass().getName());
+            }
         }
+        return result;
     }
 
     /**

Modified: incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java?rev=168430&r1=168429&r2=168430&view=diff
==============================================================================
--- incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java
(original)
+++ incubator/jdo/trunk/tck11/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java
Thu May  5 14:44:58 2005
@@ -36,25 +36,24 @@
 
     /** */
     protected void tearDown() {
+        Throwable cleanupFailure = null;
         try {
             cleanup();
             cleanupMylib();
-            closePMF();
         }
         catch (Throwable ex) {
-            if (debug) ex.printStackTrace();
-            if (testSucceeded) {
-                // runTest succeeded, but closePMF throws exception =>
-                // failure
-                fail("Exception during tearDown: " + ex);
-            }
-            else {
-                // runTest failed and closePMF throws exception =>
-                // just print the closePMF exception, otherwise the
-                // closePMF exception would swallow the test case failure
-                if (debug)
-                    logger.debug("Exception during tearDown: " + ex);
-            }
+            cleanupFailure = ex;
+            // set testSucceeded to false, otherwise a failure during
+            // super.tearDown would swallow this exception
+            testSucceeded = false;
+        }
+
+        // cleanup pmf
+        super.tearDown();
+
+        // fail if there was an exception during cleanup
+        if (cleanupFailure != null) {
+            fail("Exception during cleanupMylib: " + cleanupFailure);
         }
     }
     
@@ -66,12 +65,10 @@
             pm = pmf.getPersistenceManager();
             tx = pm.currentTransaction();
             tx.begin();
-            Collection c = getAllObjects(pm, PCPoint.class);
+            // Note, remove PCRect instances first because of FK constraints
+            Collection c = getAllObjects(pm, PCRect.class);
             pm.deletePersistentAll(c);
-            tx.commit();
-        
-            tx.begin();
-            c = getAllObjects(pm, PCRect.class);
+            c = getAllObjects(pm, PCPoint.class);
             pm.deletePersistentAll(c);
             tx.commit();
         }

Modified: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/JDO_Test.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/JDO_Test.java?rev=168430&r1=168429&r2=168430&view=diff
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/JDO_Test.java (original)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/JDO_Test.java Thu May  5 14:44:58
2005
@@ -26,6 +26,7 @@
 import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManager;
 import javax.jdo.PersistenceManagerFactory;
+import javax.jdo.JDOException;
 
 import junit.framework.TestCase;
 
@@ -229,10 +230,47 @@
     /** Closes the pmf stored in this instance. */
     protected void closePMF()
     {
-        if (pmf != null) {
-            pmf.close();
-            pmf = null;
+        JDOException failure = null;
+        while (pmf != null) {
+            try {
+                pmf.close();
+                pmf = null;
+            }
+            catch (JDOException ex) {
+                // store failure of first call pmf.close
+                if (failure == null)
+                    failure = ex;
+                PersistenceManager[] pms = getFailedPersistenceManagers(
+                    "closePMF", ex);
+                for (int i = 0; i < pms.length; i++) {
+                    cleanupPM(pms[i]);
+                }
+            }
+        }
+
+        // rethrow JDOException thrown by pmf.close
+        if (failure != null)
+            throw failure;
+    }
+
+    /** */
+    protected PersistenceManager[] getFailedPersistenceManagers(
+        String assertionFailure, JDOException ex) {
+        Throwable[] nesteds = ex.getNestedExceptions();
+        int numberOfExceptions = nesteds==null ? 0 : nesteds.length;
+        PersistenceManager[] result = new PersistenceManager[numberOfExceptions];
+        for (int i = 0; i < numberOfExceptions; ++i) {
+            JDOException exc = (JDOException)nesteds[i];
+            Object failedObject = exc.getFailedObject();
+            if (exc.getFailedObject() instanceof PersistenceManager) {
+                result[i] = (PersistenceManager)failedObject;
+            } else {
+                fail(assertionFailure,
+                     "Unexpected failed object of type: " +
+                     failedObject.getClass().getName());
+            }
         }
+        return result;
     }
 
     /**

Modified: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java?rev=168430&r1=168429&r2=168430&view=diff
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java
(original)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/api/persistencemanager/PersistenceManagerTest.java
Thu May  5 14:44:58 2005
@@ -36,25 +36,24 @@
 
     /** */
     protected void tearDown() {
+        Throwable cleanupFailure = null;
         try {
             cleanup();
             cleanupMylib();
-            closePMF();
         }
         catch (Throwable ex) {
-            if (debug) ex.printStackTrace();
-            if (testSucceeded) {
-                // runTest succeeded, but closePMF throws exception =>
-                // failure
-                fail("Exception during tearDown: " + ex);
-            }
-            else {
-                // runTest failed and closePMF throws exception =>
-                // just print the closePMF exception, otherwise the
-                // closePMF exception would swallow the test case failure
-                if (debug)
-                    logger.debug("Exception during tearDown: " + ex);
-            }
+            cleanupFailure = ex;
+            // set testSucceeded to false, otherwise a failure during
+            // super.tearDown would swallow this exception
+            testSucceeded = false;
+        }
+
+        // cleanup pmf
+        super.tearDown();
+
+        // fail if there was an exception during cleanup
+        if (cleanupFailure != null) {
+            fail("Exception during cleanupMylib: " + cleanupFailure);
         }
     }
     
@@ -66,12 +65,10 @@
             pm = pmf.getPersistenceManager();
             tx = pm.currentTransaction();
             tx.begin();
-            Collection c = getAllObjects(pm, PCPoint.class);
+            // Note, remove PCRect instances first because of FK constraints
+            Collection c = getAllObjects(pm, PCRect.class);
             pm.deletePersistentAll(c);
-            tx.commit();
-        
-            tx.begin();
-            c = getAllObjects(pm, PCRect.class);
+            c = getAllObjects(pm, PCPoint.class);
             pm.deletePersistentAll(c);
             tx.commit();
         }



Mime
View raw message