You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dj...@apache.org on 2006/10/31 21:09:08 UTC

svn commit: r469632 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit: DropDatabaseSetup.java TestConfiguration.java

Author: djd
Date: Tue Oct 31 12:09:07 2006
New Revision: 469632

URL: http://svn.apache.org/viewvc?view=rev&rev=469632
Log:
DERBY-1975 Enhance the single database decorator and DropDatabaseSetup to use a unique database name
and to drop the database at tearDown.

Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/DropDatabaseSetup.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/DropDatabaseSetup.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/DropDatabaseSetup.java?view=diff&rev=469632&r1=469631&r2=469632
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/DropDatabaseSetup.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/DropDatabaseSetup.java Tue Oct 31 12:09:07 2006
@@ -50,5 +50,44 @@
         } catch (SQLException e) {
             BaseJDBCTestCase.assertSQLState("Database shutdown", "08006", e);
         }
+
+        String dbName = TestConfiguration.getCurrent().getDatabaseName();
+        dbName = dbName.replace('/', File.separatorChar);
+        
+        String dsh = BaseTestCase.getSystemProperty("derby.system.home");
+        if (dsh == null)
+            fail("not implemented");
+        else
+            dbName = dsh + File.separator + dbName;
+        
+        final File dbDir = new File(dbName);
+        AccessController.doPrivileged(new java.security.PrivilegedAction() {
+
+            public Object run() {
+                removeDBDir(dbDir);
+                return null;
+            }
+        });
     } 
+
+    private static void removeDBDir(File dbDir) {
+
+        String[] list = dbDir.list();
+
+        // Some JVMs return null for File.list() when the
+        // directory is empty.
+        if (list != null) {
+            for (int i = 0; i < list.length; i++) {
+                File entry = new File(dbDir, list[i]);
+
+                if (entry.isDirectory()) {
+                    removeDBDir(entry);
+                } else {
+                    assertTrue(entry.delete());
+                }
+            }
+        }
+
+        assertTrue(dbDir.delete());
+    }
 }

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java?view=diff&rev=469632&r1=469631&r2=469632
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/junit/TestConfiguration.java Tue Oct 31 12:09:07 2006
@@ -63,6 +63,12 @@
      * Possible values of system properties.
      */
     private final static String UNUSED = "file://unused/";
+    
+    /**
+     * Simple count to provide a unique number for database
+     * names.
+     */
+    private static int uniqueDB;
 
 
     /**
@@ -250,6 +256,8 @@
      * first connection request to the database and shutdown & deleted at
      * tearDown. The configuration differs only from the current configuration
      * by the database name.
+     * This decorator expects the database file to be local so it
+     * can be removed.
      * @param test Test to be decorated
      * @return decorated test.
      */
@@ -257,8 +265,15 @@
     {
         TestConfiguration config = TestConfiguration.getCurrent();
 
-        // WORK IN PROGRESS - need to have unique name.
-        String dbName = "singleUse/wombat2";        
+        // Forward slash is ok, Derby treats database names
+        // as URLs and translates forward slash to the local
+        // separator.
+        String dbName = "singleUse/oneuse";
+        // Synchronize on the literal name which will be invariant
+        // since it is interned.
+        synchronized (dbName) {
+            dbName = dbName.concat(Integer.toHexString(uniqueDB++));
+        }
         TestConfiguration newDBconfig = 
             new TestConfiguration(config, dbName);
         return new ChangeConfigurationSetup(newDBconfig,