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;
+ }
}
}