You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by cl...@apache.org on 2010/06/29 19:11:45 UTC

svn commit: r959037 - in /db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory: AfterCloseSetMethodsThrowException.java Close.java CloseFailsIfTransactionActive.java CloseWithoutPermissionThrowsSecurityException.java

Author: clr
Date: Tue Jun 29 17:11:45 2010
New Revision: 959037

URL: http://svn.apache.org/viewvc?rev=959037&view=rev
Log:
JDO-653 Thanks to Peter Dettman for the patch

Modified:
    db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java
    db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java
    db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java
    db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java

Modified: db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java?rev=959037&r1=959036&r2=959037&view=diff
==============================================================================
--- db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java (original)
+++ db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/AfterCloseSetMethodsThrowException.java Tue Jun 29 17:11:45 2010
@@ -21,7 +21,6 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
 
-import javax.jdo.JDOException;
 import javax.jdo.JDOFatalInternalException;
 import javax.jdo.JDOUserException;
 import javax.jdo.PersistenceManagerFactory;
@@ -67,40 +66,69 @@ public class AfterCloseSetMethodsThrowEx
     public void test() {
         Class[] stringParameters = new Class[]{String.class};
         Class[] booleanParameters = new Class[]{boolean.class};
+        Class[] objectParameters = new Class[]{Object.class};
+        Class[] integerParameters = new Class[]{Integer.class};
         Object[] stringParameter = new Object[]{"Nobody knows the trouble"};
         Object[] booleanParameter = new Object[]{new Boolean(false)};
+        Object[] objectParameter = new Object[]{null};
+        Object[] integerParameter = new Object[]{new Integer(0)};
         
         SetProperty[] setMethods = new SetProperty[] {
             new SetProperty("setConnectionDriverName", stringParameters, stringParameter),
+            new SetProperty("setConnectionFactory", objectParameters, objectParameter),
+            new SetProperty("setConnectionFactory2", objectParameters, objectParameter),
             new SetProperty("setConnectionFactoryName", stringParameters, stringParameter),
             new SetProperty("setConnectionFactory2Name", stringParameters, stringParameter),
+            new SetProperty("setConnectionPassword", stringParameters, stringParameter),
             new SetProperty("setConnectionURL", stringParameters, stringParameter),
             new SetProperty("setConnectionUserName", stringParameters, stringParameter),
-            new SetProperty("setConnectionPassword", stringParameters, stringParameter),
+            new SetProperty("setCopyOnAttach", booleanParameters, booleanParameter),
+            new SetProperty("setDetachAllOnCommit", booleanParameters, booleanParameter),
             new SetProperty("setIgnoreCache", booleanParameters, booleanParameter),
+            new SetProperty("setMapping", stringParameters, stringParameter),
             new SetProperty("setMultithreaded", booleanParameters, booleanParameter),
+            new SetProperty("setName", stringParameters, stringParameter),
             new SetProperty("setNontransactionalRead", booleanParameters, booleanParameter),
             new SetProperty("setNontransactionalWrite", booleanParameters, booleanParameter),
             new SetProperty("setOptimistic", booleanParameters, booleanParameter),
+            new SetProperty("setPersistenceUnitName", stringParameters, stringParameter),
+            new SetProperty("setReadOnly", booleanParameters, booleanParameter),
             new SetProperty("setRestoreValues", booleanParameters, booleanParameter),
-            new SetProperty("setRetainValues", booleanParameters, booleanParameter)
+            new SetProperty("setRetainValues", booleanParameters, booleanParameter),
+            new SetProperty("setServerTimeZoneID", stringParameters, stringParameter),
+            new SetProperty("setTransactionIsolationLevel", stringParameters, stringParameter),
+            new SetProperty("setTransactionType", stringParameters, stringParameter)
         };
-       
+
         GetProperty[] getMethods = new GetProperty[] {
             new GetProperty("getConnectionDriverName"),
+            new GetProperty("getConnectionFactory"),
+            new GetProperty("getConnectionFactory2"),
             new GetProperty("getConnectionFactoryName"),
             new GetProperty("getConnectionFactory2Name"),
             new GetProperty("getConnectionURL"),
             new GetProperty("getConnectionUserName"),
+            new GetProperty("getCopyOnAttach"),
+            new GetProperty("getDataStoreCache"),
+            new GetProperty("getDetachAllOnCommit"),
+            new GetProperty("getFetchGroups"),
             new GetProperty("getIgnoreCache"),
+            new GetProperty("getMapping"),
             new GetProperty("getMultithreaded"),
+            new GetProperty("getName"),
             new GetProperty("getNontransactionalRead"),
             new GetProperty("getNontransactionalWrite"),
             new GetProperty("getOptimistic"),
+            new GetProperty("getPersistenceUnitName"),
+            new GetProperty("getProperties"),
+            new GetProperty("getReadOnly"),
             new GetProperty("getRestoreValues"),
-            new GetProperty("getRetainValues")
+            new GetProperty("getRetainValues"),
+            new GetProperty("getServerTimeZoneID"),
+            new GetProperty("getTransactionIsolationLevel"),
+            new GetProperty("getTransactionType")
         };
-       
+
         pmf = getPMF();
         closePMF(pmf); // don't use closePMF() because that sets pmf to null
         // each set method should throw an exception
@@ -111,11 +139,14 @@ public class AfterCloseSetMethodsThrowEx
             try {
                 sp.execute(pmf);
                 fail(ASSERTION_FAILED,
-                     "pmf method " + where + " shoudl throw JDOUserException when called for closed pmf");
+                    "pmf method " + where + " should throw JDOUserException when called for closed pmf");
             } catch (JDOUserException ex) {
                 if (debug)
                     logger.debug("Caught expected exception " + ex.toString() +
                                  " from " + where);
+            } catch (Exception ex) {
+                fail(ASSERTION_FAILED,
+                     "Caught unexpected exception " + ex.toString() + " from " + where);
             }
         }
         // each get method should succeed
@@ -125,7 +156,7 @@ public class AfterCloseSetMethodsThrowEx
             String where = gp.getMethodName();
             try {
                 gp.execute(pmf);
-            } catch (JDOUserException ex) {
+            } catch (Exception ex) {
                 fail(ASSERTION_FAILED,
                      "Caught unexpected exception " + ex.toString() + " from " +
                      where);
@@ -157,7 +188,7 @@ public class AfterCloseSetMethodsThrowEx
             } catch (IllegalAccessException ex) {
                 throw new JDOFatalInternalException("IllegalAccessException", ex);
             } catch (java.lang.reflect.InvocationTargetException ex) {
-                throw (JDOException)ex.getTargetException();
+                throw (RuntimeException)ex.getTargetException();
             }
         }
        
@@ -187,7 +218,7 @@ public class AfterCloseSetMethodsThrowEx
             } catch (IllegalAccessException ex) {
                 throw new JDOFatalInternalException("IllegalAccessException", ex);
             } catch (java.lang.reflect.InvocationTargetException ex) {
-                throw (JDOException)ex.getTargetException();
+                throw (RuntimeException)ex.getTargetException();
             }
         }
        

Modified: db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java?rev=959037&r1=959036&r2=959037&view=diff
==============================================================================
--- db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java (original)
+++ db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/Close.java Tue Jun 29 17:11:45 2010
@@ -17,6 +17,9 @@
  
 package org.apache.jdo.tck.api.persistencemanagerfactory;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
 import javax.jdo.JDOFatalUserException;
 import javax.jdo.JDOUserException;
 
@@ -78,7 +81,28 @@ public class Close extends JDO_Test {
             fail(ASSERTION_FAILED, 
                  "Unexpected exception at pmf.close()/isClosed(): " + ex);
         }
-        
+
+        // pmf.close() on already-closed pmf should not throw an exception
+        try {
+            // don't use closePMF methods because they check isClosed before calling
+            AccessController.doPrivileged(
+                new PrivilegedAction () {
+                    public Object run () {
+                        pmf.close();
+                        return null;
+                    }
+                }
+            );
+        } catch (JDOUserException ex) {
+            // unexpected exception
+            fail(ASSERTION_FAILED, 
+                 "Unexpected exception at repeated pmf.close(): " + ex);
+        } catch (JDOFatalUserException ex) {
+            // unexpected exception
+            fail(ASSERTION_FAILED, 
+                 "Unexpected exception at repeated pmf.close(): " + ex);
+        }
+
         // trying to get a getPersistenceManager should result in a exception
         try {
             pm = pmf.getPersistenceManager();

Modified: db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java?rev=959037&r1=959036&r2=959037&view=diff
==============================================================================
--- db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java (original)
+++ db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseFailsIfTransactionActive.java Tue Jun 29 17:11:45 2010
@@ -111,6 +111,12 @@ public class CloseFailsIfTransactionActi
                              failed.toString());
                     }
                 }
+                if (pm1.isClosed()){
+                    fail(ASSERTION_FAILED, "Unexpected pm1 is closed.");
+                }
+                if (pm2.isClosed()){
+                    fail(ASSERTION_FAILED, "Unexpected pm2 is closed.");
+                }
             } 
             catch (Exception uex) {
                 setAborted();

Modified: db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java?rev=959037&r1=959036&r2=959037&view=diff
==============================================================================
--- db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java (original)
+++ db/jdo/trunk/tck/src/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java Tue Jun 29 17:11:45 2010
@@ -19,7 +19,10 @@ package org.apache.jdo.tck.api.persisten
 
 import java.security.Permission;
 
+import javax.jdo.JDOException;
+import javax.jdo.PersistenceManagerFactory;
 import javax.jdo.spi.JDOPermission;
+
 import org.apache.jdo.tck.JDO_Test;
 import org.apache.jdo.tck.util.BatchTestRunner;
 
@@ -57,6 +60,14 @@ public class CloseWithoutPermissionThrow
     public void test() {
 	    pmf = getPMF();
 
+        closeWithMySecurityManager(pmf);
+
+        closePMF(pmf);
+
+        closeWithMySecurityManager(pmf);
+    }
+
+    private void closeWithMySecurityManager(PersistenceManagerFactory pmf) {
         SecurityManager oldSecMgr = System.getSecurityManager();
         try {
             System.setSecurityManager(new MySecurityManager());
@@ -67,10 +78,15 @@ public class CloseWithoutPermissionThrow
 
         try {
             pmf.close();
+            fail(ASSERTION_FAILED,
+                "SecurityException was not thrown when calling pmf.close() " +
+                "without JDOPermission.CLOSE_PERSISTENCE_MANAGER_FACTORY");
         } catch (SecurityException ex) {
             // expected exception if JDOPermission("closePersistenceManagerFactory") is not set
             if (debug)
                 logger.debug("caught expected exception " + ex.toString());
+        } catch (JDOException e) {
+            fail(ASSERTION_FAILED, "Unexpected exception at pmf.close(): " + e);
         }
         finally {
             System.setSecurityManager(oldSecMgr);