You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2013/04/02 00:13:20 UTC

svn commit: r1463322 - in /jena/Experimental/jena-jdbc: jena-jdbc-core/src/test/java/org/apache/jena/jdbc/ jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/ jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/ jena-jdbc-driver-tdb/sr...

Author: rvesse
Date: Mon Apr  1 22:13:19 2013
New Revision: 1463322

URL: http://svn.apache.org/r1463322
Log:
Expand driver tests a little, add a test that checks driver throws an error on connect attempt with known bad connection URL

Modified:
    jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcDriverTests.java
    jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/TestJenaJdbcMemDriver.java
    jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/TDBDriver.java
    jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/TestJenaJdbcTdbDriver.java

Modified: jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcDriverTests.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcDriverTests.java?rev=1463322&r1=1463321&r2=1463322&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcDriverTests.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-core/src/test/java/org/apache/jena/jdbc/AbstractJenaJdbcDriverTests.java Mon Apr  1 22:13:19 2013
@@ -18,7 +18,6 @@
 
 package org.apache.jena.jdbc;
 
-
 import java.sql.Connection;
 import java.sql.SQLException;
 
@@ -33,11 +32,12 @@ import com.hp.hpl.jena.query.ARQ;
 
 /**
  * Abstract tests for {@link JenaJdbcDriver} implementations
+ * 
  * @author rvesse
- *
+ * 
  */
 public abstract class AbstractJenaJdbcDriverTests {
-    
+
     static {
         // Init Log4j
         BasicConfigurator.resetConfiguration();
@@ -65,9 +65,25 @@ public abstract class AbstractJenaJdbcDr
      * @return Connection URL or null
      */
     protected abstract String getConnectionUrl();
-    
+
+    /**
+     * Method which derives classes must implement to provide a connection URL
+     * which is known to result in a creation error in the form of a
+     * {@link SQLException} when the
+     * {@link JenaJdbcDriver#connect(String, java.util.Properties)} is called
+     * with it.
+     * <p>
+     * {@code null} may be returned if there are no invalid connection URLs for
+     * the driver (this is considered highly unlikely)
+     * </p>
+     * 
+     * @return Bad Connection URL or null
+     */
+    protected abstract String getBadConnectionUrl();
+
     /**
      * Test that an implementation will accept its own URLs
+     * 
      * @throws SQLException
      */
     @Test
@@ -75,24 +91,26 @@ public abstract class AbstractJenaJdbcDr
         String url = this.getConnectionUrl();
         Assume.assumeNotNull(url);
         JenaJdbcDriver driver = this.getDriver();
-        
+
         Assert.assertTrue(driver.acceptsURL(url));
     }
-    
+
     /**
      * Tests that an implementation will not accept an arbitrary URL
+     * 
      * @throws SQLException
      */
     @Test
     public void driver_accepts_02() throws SQLException {
         String url = "jdbc:unknown:http://example.org";
         JenaJdbcDriver driver = this.getDriver();
-        
+
         Assert.assertFalse(driver.acceptsURL(url));
     }
-    
+
     /**
      * Tests using a driver to create a connection with its own URLs
+     * 
      * @throws SQLException
      */
     @Test
@@ -100,10 +118,24 @@ public abstract class AbstractJenaJdbcDr
         String url = this.getConnectionUrl();
         Assume.assumeNotNull(url);
         JenaJdbcDriver driver = this.getDriver();
-        
+
         Connection conn = driver.connect(url, null);
         Assert.assertFalse(conn.isClosed());
         conn.close();
         Assert.assertTrue(conn.isClosed());
     }
+    
+    /**
+     * Tests using a driver to create a connection with its own URLs which are known to be bad
+     * 
+     * @throws SQLException
+     */
+    @Test(expected=SQLException.class)
+    public void driver_connect_02() throws SQLException {
+        String url = this.getBadConnectionUrl();
+        Assume.assumeNotNull(url);
+        JenaJdbcDriver driver = this.getDriver();
+
+        driver.connect(url, null);
+    }
 }

Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/TestJenaJdbcMemDriver.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/TestJenaJdbcMemDriver.java?rev=1463322&r1=1463321&r2=1463322&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/TestJenaJdbcMemDriver.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-mem/src/test/java/org/apache/jena/jdbc/mem/TestJenaJdbcMemDriver.java Mon Apr  1 22:13:19 2013
@@ -37,5 +37,8 @@ public class TestJenaJdbcMemDriver exten
         return JenaJdbcDriver.DRIVER_PREFIX + JenaJdbcMemDriver.MEM_DRIVER_PREFIX + JenaJdbcMemDriver.PARAM_EMPTY + "=true";
     }
 
-
+    @Override
+    protected String getBadConnectionUrl() {
+        return JenaJdbcDriver.DRIVER_PREFIX + JenaJdbcMemDriver.MEM_DRIVER_PREFIX + JenaJdbcMemDriver.PARAM_EMPTY + "=false";
+    }
 }

Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/TDBDriver.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/TDBDriver.java?rev=1463322&r1=1463321&r2=1463322&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/TDBDriver.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/main/java/org/apache/jena/jdbc/tdb/TDBDriver.java Mon Apr  1 22:13:19 2013
@@ -60,9 +60,7 @@ import com.hp.hpl.jena.tdb.TDBFactory;
  */
 public class TDBDriver extends JenaJdbcDriver {
     private static final Logger LOGGER = LoggerFactory.getLogger(TDBDriver.class);
-    
-    
-    
+
     /**
      * Constant for the TDB driver prefix, this is appended to the base
      * {@link JenaJdbcDriver#DRIVER_PREFIX} to form the URL prefix for JDBC
@@ -109,35 +107,54 @@ public class TDBDriver extends JenaJdbcD
             throw new SQLException("Required connection parameter " + PARAM_LOCATION
                     + " is not present in the connection URL or the provided Properties object");
 
-        String mustExist = props.getProperty(PARAM_MUST_EXIST, "false").toLowerCase();
-        if ("true".equals(mustExist)) {
-            // TODO Ensure the location exists
-        }
-
-        String transactional = props.getProperty(PARAM_TRANSACTIONAL, "false").toLowerCase();
-
-        // Open the TDB dataset
+        // Determine location
         boolean useMem = location.trim().toLowerCase().equals(LOCATION_MEM);
         File loc = new File(location);
         if (useMem) {
             LOGGER.warn("TDB Driver connection string specifies use of a pure in-memory dataset, this is not recommended for anything other than basic testing");
         } else {
             if (!loc.isAbsolute()) {
-                LOGGER.warn("TDB Driver connection string specifies location " + loc.getAbsolutePath() + ", if this was not the expected location consider using an absolute instead of a relative path");
+                LOGGER.warn("TDB Driver connection string specifies location " + loc.getAbsolutePath()
+                        + ", if this was not the expected location consider using an absolute instead of a relative path");
             } else {
                 LOGGER.info("TDB Driver connection string specifies location " + loc.getAbsolutePath());
             }
         }
-        Dataset tdb = useMem ? TDBFactory.createDataset() : TDBFactory
-                .createDataset(location);
 
-        if ("true".equals(transactional)) {
-            // TODO If transactional is set use the dataset in transactional
-            // mode - needs a Transactional connection instance
-            throw new SQLFeatureNotSupportedException("Transactional usage of TDB not yet supported by the Jena JDBC driver");
-        } else {
-            // Return a JenaJdbcDatasetConnection for the TDB dataset
-            return (Connection) new JenaJdbcDatasetConnection(tdb, JenaJdbcConnection.DEFAULT_HOLDABILITY);
+        // Validate location if required
+        String mustExist = props.getProperty(PARAM_MUST_EXIST, "false").toLowerCase();
+        if ("true".equals(mustExist) && !useMem) {
+            if (!loc.exists()) {
+                throw new SQLException("TDB Driver connection string specifies location " + loc.getAbsolutePath()
+                        + " which does not exist, correct the " + PARAM_LOCATION + " parameter or set the " + PARAM_MUST_EXIST
+                        + " parameter to false");
+            } else if (!loc.isDirectory()) {
+                throw new SQLException("TDB Driver connection string specifies location " + loc.getAbsolutePath()
+                        + " which is not a directory, correct the " + PARAM_LOCATION + " parameter or set the "
+                        + PARAM_MUST_EXIST + " parameter to false");
+            }
+        }
+
+        // Open the TDB dataset
+        try {
+            Dataset tdb = useMem ? TDBFactory.createDataset() : TDBFactory.createDataset(location);
+
+            // Return the appropriate connection based on whether we are doing
+            // transactional/non-transactional
+            String transactional = props.getProperty(PARAM_TRANSACTIONAL, "false").toLowerCase();
+
+            if ("true".equals(transactional)) {
+                // TODO If transactional is set use the dataset in transactional
+                // mode - needs a Transactional connection instance
+                throw new SQLFeatureNotSupportedException("Transactional usage of TDB not yet supported by the Jena JDBC driver");
+            } else {
+                // Return a JenaJdbcDatasetConnection for the TDB dataset
+                return (Connection) new JenaJdbcDatasetConnection(tdb, JenaJdbcConnection.DEFAULT_HOLDABILITY);
+            }
+        } catch (SQLException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new SQLException("Unexpected error establishing TDB driver connection, see inner exception for details", e);
         }
     }
 

Modified: jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/TestJenaJdbcTdbDriver.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/TestJenaJdbcTdbDriver.java?rev=1463322&r1=1463321&r2=1463322&view=diff
==============================================================================
--- jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/TestJenaJdbcTdbDriver.java (original)
+++ jena/Experimental/jena-jdbc/jena-jdbc-driver-tdb/src/test/java/org/apache/jena/jdbc/tdb/TestJenaJdbcTdbDriver.java Mon Apr  1 22:13:19 2013
@@ -18,12 +18,15 @@
 
 package org.apache.jena.jdbc.tdb;
 
+import java.io.File;
+import java.io.IOException;
+
 import org.apache.jena.jdbc.AbstractJenaJdbcDriverTests;
 import org.apache.jena.jdbc.JenaJdbcDriver;
 
 /**
  * Tests for the {@link TDBDriver} implementation
- *
+ * 
  */
 public class TestJenaJdbcTdbDriver extends AbstractJenaJdbcDriverTests {
 
@@ -34,7 +37,18 @@ public class TestJenaJdbcTdbDriver exten
 
     @Override
     protected String getConnectionUrl() {
-        return JenaJdbcDriver.DRIVER_PREFIX + TDBDriver.TDB_DRIVER_PREFIX + TDBDriver.PARAM_LOCATION + "=" + TDBDriver.LOCATION_MEM;
+        return JenaJdbcDriver.DRIVER_PREFIX + TDBDriver.TDB_DRIVER_PREFIX + TDBDriver.PARAM_LOCATION + "="
+                + TDBDriver.LOCATION_MEM;
+    }
+
+    @Override
+    protected String getBadConnectionUrl() {
+        try {
+            return JenaJdbcDriver.DRIVER_PREFIX + TDBDriver.TDB_DRIVER_PREFIX + TDBDriver.PARAM_LOCATION + "="
+                    + File.createTempFile("tdb-driver-test", "").getAbsolutePath() + "&" + TDBDriver.PARAM_MUST_EXIST + "=true";
+        } catch (IOException e) {
+            return null;
+        }
     }
 
 }