Author: mtylenda
Date: Sun Jul  5 07:06:15 2009
New Revision: 791204

URL: http://svn.apache.org/viewvc?rev=791204&view=rev
Log:
OPENJPA-1147: Modify TestAutoIncrement not to rely on -Dplatform property, add 
sequence creation statement

Modified:
    
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java

Modified: 
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java?rev=791204&r1=791203&r2=791204&view=diff
==============================================================================
--- 
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java
 (original)
+++ 
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/oracle/TestAutoIncrement.java
 Sun Jul  5 07:06:15 2009
@@ -19,18 +19,25 @@
 package org.apache.openjpa.persistence.jdbc.oracle;
 
 import javax.persistence.EntityManager;
+import javax.persistence.PersistenceException;
+import javax.persistence.Query;
 
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.jdbc.sql.OracleDictionary;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
 /**
  * Tests identity value assignment with IDENTITY strategy specifically for
- * Oracle database. IDENTITY strategy for most database platform is supported
+ * Oracle database. IDENTITY strategy for most database platforms is supported
  * with auto-increment capabilities. As Oracle does not natively support
  * auto-increment, the same effect is achieved by a combination of a database
  * sequence and a pre-insert database trigger [1].
  * 
- * This test verifies that a persistence entity using IDENTITY generation type
- * is allocated identities in monotonic sequence on Oracle platform.
+ * This test verifies that a persistent entity using IDENTITY generation type
+ * is allocating identities in monotonic sequence on Oracle platform.
  * 
  * [1] http://jen.fluxcapacitor.net/geek/autoincr.html
  * 
@@ -38,37 +45,33 @@
  * 
  */
 public class TestAutoIncrement extends SingleEMFTestCase {
-       private static String PLATFORM = "oracle";
 
-       public void setUp() throws Exception {
-               if (!isTargetPlatform(PLATFORM)) {
-                       System.err.println("*** " + getName() + " skipped. Run 
with "
-                                       + "-Dplatform=" + PLATFORM + " to 
activate");
-                       return;
-               }
-               if 
("testAutoIncrementIdentityWithNamedSequence".equals(getName())) {
-                       super.setUp(CLEAR_TABLES, PObject.class,
-                           "openjpa.jdbc.DBDictionary",
-                           "oracle(UseTriggersForAutoAssign=true," + 
-                           "autoAssignSequenceName=autoIncrementSequence)");
-               } else {
-                       super.setUp(CLEAR_TABLES, PObjectNative.class,
-                                       "openjpa.jdbc.DBDictionary",
-                                       
"oracle(UseTriggersForAutoAssign=true)");
-               }
-       }
-
-       boolean isTargetPlatform(String target) {
-               String url = getPlatform();
-               return url != null && url.indexOf(target) != -1;
-       }
-
-       public String getPlatform() {
-               return System.getProperty("platform", "derby");
-       }
+    public void setUp() throws Exception {
+        if (!isTargetPlatform())
+            return;
+
+        if ("testAutoIncrementIdentityWithNamedSequence".equals(getName())) {
+            String sequence = "autoIncrementSequence";
+            createSequence(sequence);
+            super.setUp(CLEAR_TABLES, PObject.class,
+                "openjpa.jdbc.DBDictionary",
+                "oracle(UseTriggersForAutoAssign=true,autoAssignSequenceName=" 
+ sequence + ")");
+        } else {
+            super.setUp(CLEAR_TABLES, PObjectNative.class,
+                    "openjpa.jdbc.DBDictionary",
+                    "oracle(UseTriggersForAutoAssign=true)");
+        }
+    }
+
+    boolean isTargetPlatform() {
+        OpenJPAEntityManagerFactorySPI factorySPI = createEMF();
+        OpenJPAEntityManagerSPI em = factorySPI.createEntityManager();
+        DBDictionary dict = ((JDBCConfiguration) 
em.getConfiguration()).getDBDictionaryInstance();
+        return (dict instanceof OracleDictionary);
+    }
 
        public void testAutoIncrementIdentityWithNamedSequence() {
-               if (!isTargetPlatform(PLATFORM))
+               if (!isTargetPlatform())
                        return;
 
                EntityManager em = emf.createEntityManager();
@@ -83,7 +86,7 @@
        }
 
        public void testAutoIncrementIdentityWithNativeSequence() {
-               if (!isTargetPlatform(PLATFORM))
+               if (!isTargetPlatform())
                        return;
 
                EntityManager em = emf.createEntityManager();
@@ -96,4 +99,23 @@
 
                assertEquals(1, Math.abs(pc1.getId() - pc2.getId()));
        }
+
+    /**
+     * Create sequence so that the test does not require manual intervention 
in database.
+     */
+    private void createSequence(String sequence) {
+        OpenJPAEntityManagerFactorySPI factorySPI = createEMF();
+        OpenJPAEntityManagerSPI em = factorySPI.createEntityManager();
+
+        try {
+            em.getTransaction().begin();
+            Query q = em.createNativeQuery("CREATE SEQUENCE " + sequence + " 
START WITH 1");
+            q.executeUpdate();
+            em.getTransaction().commit();
+        } catch (PersistenceException e) {          
+            // Sequence probably exists.
+            em.getTransaction().rollback();
+        }
+        closeEMF(factorySPI);
+    }
 }


Reply via email to