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 km...@apache.org on 2006/05/31 22:53:51 UTC
svn commit: r410665 [2/2] - in
/db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests:
master/ master/DerbyNetClient/ suites/ tests/jdbcapi/ util/
Modified: db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/master/checkDataSource30.out
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/master/checkDataSource30.out?rev=410665&r1=410664&r2=410665&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/master/checkDataSource30.out (original)
+++ db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/master/checkDataSource30.out Wed May 31 13:53:51 2006
@@ -1,7 +1,17 @@
+Running JDBC 3.0 connection checks on Nested
+ holdability true
+JDBC 3.0 savepoint OK
Running connection checks on Nested
isolation level 2
auto commit false
read only false
+setTypeMap(EMPTY_MAP) - ok
+setTypeMap(null) - ok XJ081 - Invalid value 'null' passed as parameter 'map' to method 'java.sql.Connection.setTypeMap'
+setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
+method calls on a closed connection
+Nested <closedconn>.close() no error
+Nested <closedconn>.createStatement() 08003 - No current connection.
+Nested <closedstmt>.execute() XJ012 - 'Statement' already closed.
Running JDBC 3.0 connection checks on DriverManager
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
@@ -16,10 +26,10 @@
DriverManager <closedconn>.close() no error
DriverManager <closedconn>.createStatement() 08003 - No current connection.
DriverManager <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedDataSource
+Running JDBC 3.0 connection checks on DataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedDataSource
+Running connection checks on DataSource
isolation level 2
auto commit true
read only false
@@ -28,13 +38,13 @@
setTypeMap(null) - ok XJ081 - Invalid value 'null' passed as parameter 'map' to method 'java.sql.Connection.setTypeMap'
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
method calls on a closed connection
-EmbeddedDataSource <closedconn>.close() no error
-EmbeddedDataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedSimpleDataSource
+DataSource <closedconn>.close() no error
+DataSource <closedconn>.createStatement() 08003 - No current connection.
+DataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on SimpleDataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedSimpleDataSource
+Running connection checks on SimpleDataSource
isolation level 2
auto commit true
read only false
@@ -43,13 +53,13 @@
setTypeMap(null) - ok XJ081 - Invalid value 'null' passed as parameter 'map' to method 'java.sql.Connection.setTypeMap'
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
method calls on a closed connection
-EmbeddedSimpleDataSource <closedconn>.close() no error
-EmbeddedSimpleDataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedSimpleDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedConnectionPoolDataSource
+SimpleDataSource <closedconn>.close() no error
+SimpleDataSource <closedconn>.createStatement() 08003 - No current connection.
+SimpleDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on ConnectionPoolDataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedConnectionPoolDataSource
+Running connection checks on ConnectionPoolDataSource
isolation level 2
auto commit true
read only false
@@ -59,13 +69,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(1):connectionClosed
method calls on a closed connection
-EmbeddedConnectionPoolDataSource <closedconn>.close() no error
-EmbeddedConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedConnectionPoolDataSource
+ConnectionPoolDataSource <closedconn>.close() no error
+ConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
+ConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on ConnectionPoolDataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedConnectionPoolDataSource
+Running connection checks on ConnectionPoolDataSource
isolation level 2
auto commit true
read only false
@@ -75,22 +85,22 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(1):connectionClosed
method calls on a closed connection
-EmbeddedConnectionPoolDataSource <closedconn>.close() no error
-EmbeddedConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+ConnectionPoolDataSource <closedconn>.close() no error
+ConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
+ConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
Changes rolled back OK in auto closed pooled connection
EVENT(1):connectionClosed
expected SQL Exception: No current connection.
expected SQL Exception: No current connection.
-Start testPoolReset EmbeddedConnectionPoolDataSource
+Start testPoolReset ConnectionPoolDataSource
IDENTITY_VAL_LOCAL=1
IDENTITY_VAL_LOCAL=2
IDENTITY_VAL_LOCAL=3
-End testPoolReset EmbeddedConnectionPoolDataSource
-Running JDBC 3.0 connection checks on EmbeddedXADataSource
+End testPoolReset ConnectionPoolDataSource
+Running JDBC 3.0 connection checks on XADataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedXADataSource
+Running connection checks on XADataSource
isolation level 2
auto commit true
read only false
@@ -100,21 +110,31 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(3):connectionClosed
method calls on a closed connection
-EmbeddedXADataSource <closedconn>.close() no error
-EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+XADataSource <closedconn>.close() no error
+XADataSource <closedconn>.createStatement() 08003 - No current connection.
+XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
Changes rolled back OK in auto closed local XAConnection
EVENT(3):connectionClosed
-Start testPoolReset EmbeddedXADataSource
+Start testPoolReset XADataSource
IDENTITY_VAL_LOCAL=1
IDENTITY_VAL_LOCAL=2
IDENTITY_VAL_LOCAL=3
-End testPoolReset EmbeddedXADataSource
+End testPoolReset XADataSource
ERROR XJ015: Derby system shutdown.
+Running JDBC 3.0 connection checks on Nested
+ holdability true
+JDBC 3.0 savepoint OK
Running connection checks on Nested
isolation level 2
auto commit false
read only false
+setTypeMap(EMPTY_MAP) - ok
+setTypeMap(null) - ok XJ081 - Invalid value 'null' passed as parameter 'map' to method 'java.sql.Connection.setTypeMap'
+setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
+method calls on a closed connection
+Nested <closedconn>.close() no error
+Nested <closedconn>.createStatement() 08003 - No current connection.
+Nested <closedstmt>.execute() XJ012 - 'Statement' already closed.
Running JDBC 3.0 connection checks on DriverManager
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
@@ -129,10 +149,10 @@
DriverManager <closedconn>.close() no error
DriverManager <closedconn>.createStatement() 08003 - No current connection.
DriverManager <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedDataSource
+Running JDBC 3.0 connection checks on DataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedDataSource
+Running connection checks on DataSource
isolation level 2
auto commit true
read only false
@@ -141,9 +161,9 @@
setTypeMap(null) - ok XJ081 - Invalid value 'null' passed as parameter 'map' to method 'java.sql.Connection.setTypeMap'
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
method calls on a closed connection
-EmbeddedDataSource <closedconn>.close() no error
-EmbeddedDataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+DataSource <closedconn>.close() no error
+DataSource <closedconn>.createStatement() 08003 - No current connection.
+DataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
Running JDBC 3.0 connection checks on EmbeddedSimpleDataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
@@ -159,10 +179,10 @@
EmbeddedSimpleDataSource <closedconn>.close() no error
EmbeddedSimpleDataSource <closedconn>.createStatement() 08003 - No current connection.
EmbeddedSimpleDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedConnectionPoolDataSource
+Running JDBC 3.0 connection checks on ConnectionPoolDataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedConnectionPoolDataSource
+Running connection checks on ConnectionPoolDataSource
isolation level 2
auto commit true
read only false
@@ -172,13 +192,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(2):connectionClosed
method calls on a closed connection
-EmbeddedConnectionPoolDataSource <closedconn>.close() no error
-EmbeddedConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedConnectionPoolDataSource
+ConnectionPoolDataSource <closedconn>.close() no error
+ConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
+ConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on ConnectionPoolDataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedConnectionPoolDataSource
+Running connection checks on ConnectionPoolDataSource
isolation level 2
auto commit true
read only false
@@ -188,13 +208,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(2):connectionClosed
method calls on a closed connection
-EmbeddedConnectionPoolDataSource <closedconn>.close() no error
-EmbeddedConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedXADataSource
+ConnectionPoolDataSource <closedconn>.close() no error
+ConnectionPoolDataSource <closedconn>.createStatement() 08003 - No current connection.
+ConnectionPoolDataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on XADataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedXADataSource
+Running connection checks on XADataSource
isolation level 2
auto commit true
read only false
@@ -204,13 +224,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(4):connectionClosed
method calls on a closed connection
-EmbeddedXADataSource <closedconn>.close() no error
-EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on EmbeddedXADataSource
+XADataSource <closedconn>.close() no error
+XADataSource <closedconn>.createStatement() 08003 - No current connection.
+XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on XADataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on EmbeddedXADataSource
+Running connection checks on XADataSource
isolation level 2
auto commit true
read only false
@@ -220,14 +240,14 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(4):connectionClosed
method calls on a closed connection
-EmbeddedXADataSource <closedconn>.close() no error
-EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+XADataSource <closedconn>.close() no error
+XADataSource <closedconn>.createStatement() 08003 - No current connection.
+XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
EVENT(5):connectionClosed
-Running JDBC 3.0 connection checks on Global EmbeddedXADataSource
+Running JDBC 3.0 connection checks on Global XADataSource
holdability false
JDBC 3.0 savepoint SQL Exception: Cannot rollback a global transaction using the Connection, commit processing must go thru XAResource interface.
-Running connection checks on Global EmbeddedXADataSource
+Running connection checks on Global XADataSource
isolation level 2
auto commit false
read only false
@@ -236,13 +256,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(5):connectionClosed
method calls on a closed connection
-Global EmbeddedXADataSource <closedconn>.close() no error
-Global EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-Global EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on Global EmbeddedXADataSource
+Global XADataSource <closedconn>.close() no error
+Global XADataSource <closedconn>.createStatement() 08003 - No current connection.
+Global XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on Global XADataSource
holdability false
JDBC 3.0 savepoint SQL Exception: Cannot rollback a global transaction using the Connection, commit processing must go thru XAResource interface.
-Running connection checks on Global EmbeddedXADataSource
+Running connection checks on Global XADataSource
isolation level 2
auto commit false
read only false
@@ -251,13 +271,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(5):connectionClosed
method calls on a closed connection
-Global EmbeddedXADataSource <closedconn>.close() no error
-Global EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-Global EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on Switch to local EmbeddedXADataSource
+Global XADataSource <closedconn>.close() no error
+Global XADataSource <closedconn>.createStatement() 08003 - No current connection.
+Global XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on Switch to local XADataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on Switch to local EmbeddedXADataSource
+Running connection checks on Switch to local XADataSource
isolation level 2
auto commit true
read only false
@@ -267,13 +287,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(5):connectionClosed
method calls on a closed connection
-Switch to local EmbeddedXADataSource <closedconn>.close() no error
-Switch to local EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-Switch to local EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on Switch to local EmbeddedXADataSource
+Switch to local XADataSource <closedconn>.close() no error
+Switch to local XADataSource <closedconn>.createStatement() 08003 - No current connection.
+Switch to local XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on Switch to local XADataSource
holdability true
JDBC 3.0 savepoint SQL Exception: Cannot issue savepoint when autoCommit is on.
-Running connection checks on Switch to local EmbeddedXADataSource
+Running connection checks on Switch to local XADataSource
isolation level 2
auto commit true
read only false
@@ -283,13 +303,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(5):connectionClosed
method calls on a closed connection
-Switch to local EmbeddedXADataSource <closedconn>.close() no error
-Switch to local EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-Switch to local EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on Switch to global EmbeddedXADataSource
+Switch to local XADataSource <closedconn>.close() no error
+Switch to local XADataSource <closedconn>.createStatement() 08003 - No current connection.
+Switch to local XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on Switch to global XADataSource
holdability false
JDBC 3.0 savepoint SQL Exception: Cannot rollback a global transaction using the Connection, commit processing must go thru XAResource interface.
-Running connection checks on Switch to global EmbeddedXADataSource
+Running connection checks on Switch to global XADataSource
isolation level 2
auto commit false
read only false
@@ -299,13 +319,13 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(5):connectionClosed
method calls on a closed connection
-Switch to global EmbeddedXADataSource <closedconn>.close() no error
-Switch to global EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-Switch to global EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
-Running JDBC 3.0 connection checks on Switch to global EmbeddedXADataSource
+Switch to global XADataSource <closedconn>.close() no error
+Switch to global XADataSource <closedconn>.createStatement() 08003 - No current connection.
+Switch to global XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Running JDBC 3.0 connection checks on Switch to global XADataSource
holdability false
JDBC 3.0 savepoint SQL Exception: Cannot rollback a global transaction using the Connection, commit processing must go thru XAResource interface.
-Running connection checks on Switch to global EmbeddedXADataSource
+Running connection checks on Switch to global XADataSource
isolation level 2
auto commit false
read only false
@@ -315,9 +335,9 @@
setTypeMap(map) - ok 0A000 - Feature not implemented: no details.
EVENT(5):connectionClosed
method calls on a closed connection
-Switch to global EmbeddedXADataSource <closedconn>.close() no error
-Switch to global EmbeddedXADataSource <closedconn>.createStatement() 08003 - No current connection.
-Switch to global EmbeddedXADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
+Switch to global XADataSource <closedconn>.close() no error
+Switch to global XADataSource <closedconn>.createStatement() 08003 - No current connection.
+Switch to global XADataSource <closedstmt>.execute() XJ012 - 'Statement' already closed.
initial local
holdability true
isolation level READ_COMMITTED
@@ -645,6 +665,7 @@
acxs 1
acxs 2
autocommitxastart expected : XAException - null
+Expected XA error code: -9
acxs 3
testing jira 95 for DataSource; ok - expected exception: XCY00
testing jira 95 for XADataSource; ok - expected exception: XCY00
@@ -855,4 +876,22 @@
CALLABLE STATEMENT HOLDABILITY false
CONNECTION(held) HOLDABILITY true
PASS XA HOLDABILITY TEST
+**Test holdability state for: PooledConnection **
+PASS: Holdability matches expected holdability:HOLD_CURSORS_OVER_COMMIT
+** Test autoCommit state for: PooledConnection**
+PASS: autoCommit reset on getConnection
+done creating table
+*** Test isolation level reset on PooledConnection.getConnection()***
+setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED
+PASS: No lock timeout occurs for READ_UNCOMMITTED
+Get a new connection with PooledConnection.getConnection()
+Isolation level should be reset to READ_COMMITTED
+PASS: Expected lock timeout for READ_COMMITTED
+done creating table
+*** Test isolation level reset on XAConnection.getConnection()***
+setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED
+PASS: No lock timeout occurs for READ_UNCOMMITTED
+Get a new connection with XAConnection.getConnection()
+Isolation level should be reset to READ_COMMITTED
+PASS: Expected lock timeout for READ_COMMITTED
Completed checkDataSource30
Modified: db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetclientmats.runall
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetclientmats.runall?rev=410665&r1=410664&r2=410665&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetclientmats.runall (original)
+++ db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/suites/derbynetclientmats.runall Wed May 31 13:53:51 2006
@@ -2,3 +2,4 @@
jdbcapi/xaStateTran.sql
jdbcapi/XATest.java
jdbcapi/lobStreams.java
+jdbcapi/checkDataSource.java
Modified: db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java?rev=410665&r1=410664&r2=410665&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java (original)
+++ db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java Wed May 31 13:53:51 2006
@@ -20,43 +20,89 @@
package org.apache.derbyTesting.functionTests.tests.jdbcapi;
-import org.apache.derby.jdbc.EmbeddedDataSource;
-import org.apache.derby.jdbc.EmbeddedSimpleDataSource;
-import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
-import org.apache.derby.jdbc.EmbeddedXADataSource;
-
+import java.io.Serializable;
+import java.sql.CallableStatement;
import java.sql.Connection;
-import java.sql.ResultSet;
+import java.sql.DriverManager;
import java.sql.PreparedStatement;
-import java.sql.CallableStatement;
-import java.sql.Statement;
+import java.sql.ResultSet;
import java.sql.SQLException;
-import java.sql.DriverManager;
+import java.sql.Statement;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Properties;
+import javax.sql.ConnectionEvent;
+import javax.sql.ConnectionEventListener;
+import javax.sql.ConnectionPoolDataSource;
import javax.sql.DataSource;
-import javax.sql.XADataSource;
import javax.sql.PooledConnection;
import javax.sql.XAConnection;
-import javax.sql.ConnectionPoolDataSource;
-import javax.transaction.xa.XAResource;
+import javax.sql.XADataSource;
import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
-import javax.sql.ConnectionEventListener;
-import javax.sql.ConnectionEvent;
+
+import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
+import org.apache.derby.jdbc.EmbeddedDataSource;
+import org.apache.derby.jdbc.EmbeddedXADataSource;
import org.apache.derby.tools.JDBCDisplayUtil;
import org.apache.derby.tools.ij;
-
-import java.io.*;
-import java.util.Hashtable;
-import java.util.Iterator;
-
-import javax.naming.*;
-import javax.naming.directory.*;
+import org.apache.derbyTesting.functionTests.util.TestUtil;
public class checkDataSource
{
- protected static Hashtable conns = new Hashtable();
+ // Only test connection toString values for embedded.
+ // Client connection toString values are not correlated at this time and just
+ // use default toString
+ // These tests are exempted from other frameworks
+ private boolean testConnectionToString = TestUtil.isEmbeddedFramework();
+
+ // Only embedded supports SimpleDataSource (JSR169).
+ // These tests are exempted from other frameworks
+ private boolean testSimpleDataSource = TestUtil.isEmbeddedFramework();
+
+ // for a PooledConnection.getConnection() the connection gets closed.
+ // Embedded automatically rolls back any activity on the connection.
+ // Client requires the user to rollback and gives an SQLException
+ // java.sql.Connection.close() requested while a transaction is in progress
+ // This has been filed as DERBY-1004
+ private boolean needRollbackBeforePCGetConnection =
+ TestUtil.isDerbyNetClientFramework();
+
+ // DERBY-1035 With client, Connection.getTransactionIsolation() return value is
+ // wrong after changing the isolation level with an SQL statement such as
+ // "set current isolation = RS"
+ // Tests for setting isolation level this way only run in embedded for now.
+ private boolean canSetIsolationWithStatement = TestUtil.isEmbeddedFramework();
+
+ // DERBY-1148 - Client Connection state does not
+ // get set properly when joining a global transaction.
+ private static boolean isolationSetProperlyOnJoin = TestUtil.isEmbeddedFramework();
+
+ // DERBY-1183 getCursorName not correct after first statement execution
+ private static boolean hasGetCursorNameBug = TestUtil.isDerbyNetClientFramework();
+
+ // DERBY-1326 - Network server may abandon sessions when Derby system is shutdown
+ // and this causes intermittent hangs in the client
+ private static boolean hangAfterSystemShutdown = TestUtil.isDerbyNetClientFramework();
+ /**
+ * A hashtable of opened connections. This is used when checking to
+ * make sure connection strings are unique; we need to make sure all
+ * the connections are closed when we are done, so they are stored
+ * in this hashtable
+ */
+ protected static Hashtable conns = new Hashtable();
+
+ /** The expected format of a connection string. In English:
+ * "<classname>@<hashcode> (XID=<xid>), (SESSION = <sessionid>),
+ * (DATABASE=<dbname>), (DRDAID = <drdaid>)"
+ */
+ private static final String CONNSTRING_FORMAT = "\\S+@[0-9]+ " +
+ "\\(XID = .*\\), \\(SESSIONID = [0-9]+\\), " +
+ "\\(DATABASE = [A-Za-z]+\\), \\(DRDAID = .+\\)";
+
public static void main(String[] args) throws Exception {
try
@@ -73,7 +119,7 @@
}
- public checkDataSource() throws Exception {
+ public checkDataSource() {
}
protected void runTest(String[] args) throws Exception {
@@ -84,40 +130,53 @@
dmc.createStatement().executeUpdate("create table y(i int)");
- dmc.createStatement().executeUpdate("create procedure checkConn2(in dsname varchar(20)) parameter style java language java modifies SQL Data external name 'org.apache.derbyTesting.functionTests.tests.jdbcapi.checkDataSource.checkNesConn'");
+ dmc.createStatement().executeUpdate(
+ "create procedure checkConn2(in dsname varchar(20)) " +
+ "parameter style java language java modifies SQL DATA " +
+ "external name 'org.apache.derbyTesting.functionTests.tests.jdbcapi." +
+ this.getNestedMethodName() +
+ "'");
CallableStatement cs = dmc.prepareCall("call checkConn2(?)");
cs.setString(1,"Nested");
cs.execute();
checkConnection("DriverManager ", dmc);
- checkJBMSToString();
+ if (testConnectionToString)
+ checkJBMSToString();
- EmbeddedDataSource dscs = new EmbeddedDataSource();
- dscs.setDatabaseName("wombat");
- checkToString(dscs);
+ Properties attrs = new Properties();
+ attrs.setProperty("databaseName", "wombat");
+ DataSource dscs = TestUtil.getDataSource(attrs);
+
+ if (testConnectionToString)
+ checkToString(dscs);
DataSource ds = dscs;
- checkConnection("EmbeddedDataSource", ds.getConnection());
+ checkConnection("DataSource", ds.getConnection());
+
+ DataSource dssimple = null;
+ if (testSimpleDataSource)
+ {
+ dssimple = TestUtil.getSimpleDataSource(attrs);
+ ds = dssimple;
+ checkConnection("SimpleDataSource", ds.getConnection());
+ }
+
+ ConnectionPoolDataSource dsp = TestUtil.getConnectionPoolDataSource(attrs);
- EmbeddedSimpleDataSource dssimple = new EmbeddedSimpleDataSource();
- dssimple.setDatabaseName("wombat");
- ds = dssimple;
- checkConnection("EmbeddedSimpleDataSource", ds.getConnection());
-
- EmbeddedConnectionPoolDataSource dscsp = new EmbeddedConnectionPoolDataSource();
- dscsp.setDatabaseName("wombat");
- //dscsp.setConnectionAttributes("unicode=true");
- ConnectionPoolDataSource dsp = dscsp;
- checkToString(dsp);
+
+ if (testConnectionToString)
+ checkToString(dsp);
+
PooledConnection pc = dsp.getPooledConnection();
pc.addConnectionEventListener(new EventCatcher(1));
- checkConnection("EmbeddedConnectionPoolDataSource", pc.getConnection());
- checkConnection("EmbeddedConnectionPoolDataSource", pc.getConnection());
+ checkConnection("ConnectionPoolDataSource", pc.getConnection());
+ checkConnection("ConnectionPoolDataSource", pc.getConnection());
// BUG 4471 - check outstanding updates are rolled back.
Connection c1 = pc.getConnection();
@@ -132,7 +191,9 @@
// this update should be rolled back
s.executeUpdate("insert into t values(2)");
-
+ if (needRollbackBeforePCGetConnection)
+ c1.rollback();
+
c1 = pc.getConnection();
ResultSet rs = c1.createStatement().executeQuery("select count(*) from t");
@@ -162,20 +223,16 @@
pc.close();
pc = null;
- testPoolReset("EmbeddedConnectionPoolDataSource", dsp.getPooledConnection());
-
-
- EmbeddedXADataSource dscsx = new EmbeddedXADataSource();
- dscsx.setDatabaseName("wombat");
- //dscsx.setConnectionAttributes("unicode=true");
+ testPoolReset("ConnectionPoolDataSource", dsp.getPooledConnection());
- XADataSource dsx = dscsx;
- checkToString(dsx);
+ XADataSource dsx = TestUtil.getXADataSource(attrs);
+ if (testConnectionToString)
+ checkToString(dsx);
XAConnection xac = dsx.getXAConnection();
xac.addConnectionEventListener(new EventCatcher(3));
- checkConnection("EmbeddedXADataSource", xac.getConnection());
+ checkConnection("XADataSource", xac.getConnection());
// BUG 4471 - check outstanding updates are rolled back wi XAConnection.
c1 = xac.getConnection();
@@ -188,7 +245,9 @@
// this update should be rolled back
s.executeUpdate("insert into t values(2)");
-
+ if (needRollbackBeforePCGetConnection)
+ c1.rollback();
+
c1 = xac.getConnection();
rs = c1.createStatement().executeQuery("select count(*) from t");
@@ -203,14 +262,16 @@
xac.close();
xac = null;
- testPoolReset("EmbeddedXADataSource", dsx.getXAConnection());
+ testPoolReset("XADataSource", dsx.getXAConnection());
-
- try {
- DriverManager.getConnection("jdbc:derby:;shutdown=true");
- } catch (SQLException sqle) {
- JDBCDisplayUtil.ShowSQLException(System.out, sqle);
+ // DERBY-1326 - hang in client after Derby system shutdown
+ if(! hangAfterSystemShutdown) {
+ try {
+ TestUtil.getConnection("","shutdown=true");
+ } catch (SQLException sqle) {
+ JDBCDisplayUtil.ShowSQLException(System.out, sqle);
+ }
}
dmc = ij.startJBMS();
@@ -222,24 +283,28 @@
checkConnection("DriverManager ", dmc);
- // reset ds back to the EmbeddedDataSource
+ // reset ds back to the Regular DataSource
ds = dscs;
- checkConnection("EmbeddedDataSource", ds.getConnection());
+ checkConnection("DataSource", ds.getConnection());
// and back to EmbeddedSimpleDataSource
- ds = dssimple;
- checkConnection("EmbeddedSimpleDataSource", dssimple.getConnection());
+ if(TestUtil.isEmbeddedFramework())
+ {
+ // JSR169 (SimpleDataSource) is only available on embedded.
+ ds = dssimple;
+ checkConnection("EmbeddedSimpleDataSource", dssimple.getConnection());
+ }
pc = dsp.getPooledConnection();
pc.addConnectionEventListener(new EventCatcher(2));
- checkConnection("EmbeddedConnectionPoolDataSource", pc.getConnection());
- checkConnection("EmbeddedConnectionPoolDataSource", pc.getConnection());
+ checkConnection("ConnectionPoolDataSource", pc.getConnection());
+ checkConnection("ConnectionPoolDataSource", pc.getConnection());
// test "local" XAConnections
xac = dsx.getXAConnection();
xac.addConnectionEventListener(new EventCatcher(4));
- checkConnection("EmbeddedXADataSource", xac.getConnection());
- checkConnection("EmbeddedXADataSource", xac.getConnection());
+ checkConnection("XADataSource", xac.getConnection());
+ checkConnection("XADataSource", xac.getConnection());
xac.close();
// test "global" XAConnections
@@ -250,19 +315,19 @@
xar.start(xid, XAResource.TMNOFLAGS);
Connection xacc = xac.getConnection();
xacc.close();
- checkConnection("Global EmbeddedXADataSource", xac.getConnection());
- checkConnection("Global EmbeddedXADataSource", xac.getConnection());
+ checkConnection("Global XADataSource", xac.getConnection());
+ checkConnection("Global XADataSource", xac.getConnection());
xar.end(xid, XAResource.TMSUCCESS);
- checkConnection("Switch to local EmbeddedXADataSource", xac.getConnection());
- checkConnection("Switch to local EmbeddedXADataSource", xac.getConnection());
+ checkConnection("Switch to local XADataSource", xac.getConnection());
+ checkConnection("Switch to local XADataSource", xac.getConnection());
Connection backtoGlobal = xac.getConnection();
xar.start(xid, XAResource.TMJOIN);
- checkConnection("Switch to global EmbeddedXADataSource", backtoGlobal);
- checkConnection("Switch to global EmbeddedXADataSource", xac.getConnection());
+ checkConnection("Switch to global XADataSource", backtoGlobal);
+ checkConnection("Switch to global XADataSource", xac.getConnection());
xar.end(xid, XAResource.TMSUCCESS);
xar.commit(xid, true);
@@ -301,7 +366,9 @@
// and isolation level from the transaction,
// holdability remains that of this handle.
xar.start(xid, XAResource.TMJOIN);
- printState("re-join X1", cs1);
+ // DERBY-1148
+ if (isolationSetProperlyOnJoin)
+ printState("re-join X1", cs1);
xar.end(xid, XAResource.TMSUCCESS);
// should be the same as the reset local
@@ -318,7 +385,9 @@
xar.start(xid, XAResource.TMJOIN);
cs1 = xac.getConnection();
- printState("re-join with new handle X1", cs1);
+ // DERBY-1148
+ if (isolationSetProperlyOnJoin)
+ printState("re-join with new handle X1", cs1);
cs1.close();
xar.end(xid, XAResource.TMSUCCESS);
@@ -329,7 +398,9 @@
cs1.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
printState("pre-X1 commit - local", cs1);
xar.start(xid, XAResource.TMJOIN);
- printState("pre-X1 commit - X1", cs1);
+ // DERBY-1148
+ if (isolationSetProperlyOnJoin)
+ printState("pre-X1 commit - X1", cs1);
xar.end(xid, XAResource.TMSUCCESS);
printState("post-X1 end - local", cs1);
xar.commit(xid, true);
@@ -346,58 +417,8 @@
cs1.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
printState("setTransactionIsolation in local", cs1);
- System.out.println("Issue SQL to change isolation in local transaction");
- s.executeUpdate("set current isolation = RR");
- printState("SQL to change isolation in local", cs1);
-
- xid = new cdsXid(1, (byte) 35, (byte) 47);
- xar.start(xid, XAResource.TMNOFLAGS);
- printState("1st global(new)", cs1);
- xar.end(xid, XAResource.TMSUCCESS);
-
- printState("local", cs1);
- System.out.println("Issue SQL to change isolation in local transaction");
- s.executeUpdate("set current isolation = RS");
- printState("SQL to change isolation in local", cs1);
-
- // DERBY-1325 - Isolation level of local connection does not get reset after ending
- // a global transaction that was joined/resumed if the isolation level was changed
- // using SQL
- xar.start(xid, XAResource.TMJOIN);
- printState("1st global(existing)", cs1);
- xar.end(xid, XAResource.TMSUCCESS);
- printState("local", cs1);
- // DERBY-1325 end test
-
- Xid xid2 = new cdsXid(1, (byte) 93, (byte) 103);
- xar.start(xid2, XAResource.TMNOFLAGS);
- printState("2nd global(new)", cs1);
- xar.end(xid2, XAResource.TMSUCCESS);
-
- xar.start(xid, XAResource.TMJOIN);
- printState("1st global(existing)", cs1);
- xar.end(xid, XAResource.TMSUCCESS);
-
- printState("local", cs1);
-
- xar.start(xid, XAResource.TMJOIN);
- printState("1st global(existing)", cs1);
- System.out.println("Issue SQL to change isolation in 1st global transaction");
- s.executeUpdate("set current isolation = UR");
- printState("change isolation of existing 1st global transaction", cs1);
- xar.end(xid, XAResource.TMSUCCESS);
-
- printState("local", cs1);
-
- xar.start(xid2, XAResource.TMJOIN);
- printState("2nd global(existing)", cs1);
- xar.end(xid2, XAResource.TMSUCCESS);
-
- xar.rollback(xid2);
- printState("(After 2nd global rollback) local", cs1);
-
- xar.rollback(xid);
- printState("(After 1st global rollback) local", cs1);
+ if (canSetIsolationWithStatement)
+ testSetIsolationWithStatement(s, xar, cs1);
// now check re-use of *Statement objects across local/global connections.
System.out.println("TESTING RE_USE OF STATEMENT OBJECTS");
@@ -594,11 +615,16 @@
rs4 = s4.executeQuery("select i from autocommitxastart");
rs4.next(); System.out.println("acxs " + rs4.getInt(1));
rs4.next(); System.out.println("acxs " + rs4.getInt(1));
-
+
+ // Get a new xid to begin another transaction.
+ // This should give XAER_OUTSIDE exception because
+ // the resource manager is busy in the local transaction
+ xid4a = new cdsXid(4, (byte) 93, (byte) 103);
try {
xac4.getXAResource().start(xid4a, XAResource.TMNOFLAGS);
} catch (XAException xae) {
showXAException("autocommitxastart expected ", xae);
+ System.out.println("Expected XA error code: " + xae.errorCode);
}
rs4.next(); System.out.println("acxs " + rs4.getInt(1));
rs4.close();
@@ -636,11 +662,79 @@
} catch (Exception e) {
System.out.println("; wrong, unexpected exception: " + e.toString());
}
-
+ // skip testDSRequestAuthentication for client because of these
+ // two issues:
+ // DERBY-1130 : Client should not allow databaseName to be set with
+ // setConnectionAttributes
+ // DERBY-1131 : Deprecate Derby DataSource property attributesAsPassword
+ if (TestUtil.isDerbyNetClientFramework())
+ return;
testDSRequestAuthentication();
}
+ /**
+ * @param s
+ * @param xar
+ * @param conn
+ * @throws SQLException
+ * @throws XAException
+ */
+ private void testSetIsolationWithStatement(Statement s, XAResource xar, Connection conn) throws SQLException, XAException {
+ Xid xid;
+ System.out.println("Issue SQL to change isolation in local transaction");
+ s.executeUpdate("set current isolation = RR");
+ printState("SQL to change isolation in local", conn);
+
+ xid = new cdsXid(1, (byte) 35, (byte) 47);
+ xar.start(xid, XAResource.TMNOFLAGS);
+ printState("1st global(new)", conn);
+ xar.end(xid, XAResource.TMSUCCESS);
+
+ printState("local", conn);
+ System.out.println("Issue SQL to change isolation in local transaction");
+ s.executeUpdate("set current isolation = RS");
+ printState("SQL to change isolation in local", conn);
+
+ // DERBY-1325 - Isolation level of local connection does not get reset after ending
+ // a global transaction that was joined/resumed if the isolation level was changed
+ // using SQL
+ xar.start(xid, XAResource.TMJOIN);
+ printState("1st global(existing)", conn);
+ xar.end(xid, XAResource.TMSUCCESS);
+ printState("local", conn);
+ // DERBY-1325 end test
+
+ Xid xid2 = new cdsXid(1, (byte) 93, (byte) 103);
+ xar.start(xid2, XAResource.TMNOFLAGS);
+ printState("2nd global(new)", conn);
+ xar.end(xid2, XAResource.TMSUCCESS);
+
+ xar.start(xid, XAResource.TMJOIN);
+ printState("1st global(existing)", conn);
+ xar.end(xid, XAResource.TMSUCCESS);
+
+ printState("local", conn);
+
+ xar.start(xid, XAResource.TMJOIN);
+ printState("1st global(existing)", conn);
+ System.out.println("Issue SQL to change isolation in 1st global transaction");
+ s.executeUpdate("set current isolation = UR");
+ printState("change isolation of existing 1st global transaction", conn);
+ xar.end(xid, XAResource.TMSUCCESS);
+
+ printState("local", conn);
+
+ xar.start(xid2, XAResource.TMJOIN);
+ printState("2nd global(existing)", conn);
+ xar.end(xid2, XAResource.TMSUCCESS);
+ xar.rollback(xid2);
+ printState("(After 2nd global rollback) local", conn);
+
+ xar.rollback(xid);
+ printState("(After 1st global rollback) local", conn);
+ }
+
protected void showXAException(String tag, XAException xae) {
System.out.println(tag + " : XAException - " + xae.getMessage());
@@ -676,7 +770,10 @@
}
protected PreparedStatement createFloatStatementForStateChecking(Connection conn, String sql) throws SQLException {
PreparedStatement s = internalCreateFloatStatementForStateChecking(conn, sql);
- s.setCursorName("StokeNewington");
+ // Need to make a different cursor name here because of DERBY-1036
+ // client won't allow duplicate name.
+ //s.setCursorName("StokeNewington");
+ s.setCursorName("LondonNW17");
s.setFetchDirection(ResultSet.FETCH_REVERSE);
s.setFetchSize(888);
s.setMaxFieldSize(317);
@@ -687,7 +784,9 @@
}
protected CallableStatement createFloatCallForStateChecking(Connection conn, String sql) throws SQLException {
CallableStatement s = internalCreateFloatCallForStateChecking(conn, sql);
- s.setCursorName("StokeNewington");
+ //DERBY-1036 - need a new name
+ //s.setCursorName("StokeNewington");
+ s.setCursorName("districtInLondon");
s.setFetchDirection(ResultSet.FETCH_REVERSE);
s.setFetchSize(999);
s.setMaxFieldSize(137);
@@ -702,6 +801,16 @@
protected CallableStatement internalCreateFloatCallForStateChecking(Connection conn, String sql) throws SQLException {
return conn.prepareCall(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
}
+
+ /**
+ * Return the Java class and method for the procedure
+ * for the nested connection test.
+ * checkDataSource 30 will override.
+ */
+ protected String getNestedMethodName()
+ {
+ return "checkDataSource.checkNesConn";
+ }
static String rsType(int type) {
switch (type) {
@@ -770,7 +879,15 @@
}
private static void resultSetQuery(String tag, ResultSet rs) throws SQLException {
- System.out.print(tag + ": ru(" + rs.getCursorName() + ") contents");
+ String cursorName = rs.getCursorName();
+ // DERBY-1183 client cursor name is not correct.
+ // need to truncate the cursor number of the generated name as it might
+ // not be consistent.
+ if (hasGetCursorNameBug && cursorName.startsWith("SQL_CUR"))
+ {
+ cursorName = cursorName.substring(0,13);
+ }
+ System.out.print(tag + ": ru(" + cursorName + ") contents");
while (rs.next()) {
System.out.print(" {" + rs.getInt(1) + "}");
}
@@ -794,33 +911,9 @@
//calling checkConnection - for use in a procedure to get a nested connection.
public static void checkNesConn (String dsName) throws SQLException {
- checkConnectionS(dsName, DriverManager.getConnection("jdbc:default:connection"));
-
- }
-
- public static void checkConnectionS(String dsName, Connection conn) throws SQLException {
-
- System.out.println("Running connection checks on " + dsName);
-
- //System.out.println(" url " + conn.getMetaData().getURL());
- System.out.println(" isolation level " + conn.getTransactionIsolation());
- System.out.println(" auto commit " + conn.getAutoCommit());
- System.out.println(" read only " + conn.isReadOnly());
-
- // when 4729 is fixed, remove the startsWith() clause
- if (dsName.endsWith("DataSource") && !dsName.startsWith("Global"))
- System.out.println(" has warnings " + (conn.getWarnings() != null));
-
- checkStatementS(conn, conn.createStatement());
- checkStatementS(conn, conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY));
-
- Connection c1 = conn.getMetaData().getConnection();
- if (c1 != conn)
- System.out.println("FAIL incorrect connection object returned for DatabaseMetaData.getConnection()");
-
- checkConnectionPreCloseS(dsName, conn);
- conn.close();
- }
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ new checkDataSource().checkConnection(dsName, conn);
+ }
public void checkConnection(String dsName, Connection conn) throws SQLException {
@@ -836,8 +929,8 @@
System.out.println(" has warnings " + (conn.getWarnings() != null));
Statement s1 = conn.createStatement();
- checkStatement(conn, s1);
- checkStatement(conn, conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY));
+ checkStatement(dsName, conn, s1);
+ checkStatement(dsName, conn, conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY));
Connection c1 = conn.getMetaData().getConnection();
if (c1 != conn)
@@ -895,7 +988,7 @@
/**
* Make sure this connection's string is unique (DERBY-243)
*/
- protected void checkToString(Connection conn) throws Exception
+ protected static void checkToString(Connection conn) throws Exception
{
String str = conn.toString();
@@ -911,7 +1004,7 @@
* Clear out and close connections in the connections
* hashtable.
*/
- protected void clearConnections() throws SQLException
+ protected static void clearConnections() throws SQLException
{
java.util.Iterator it = conns.values().iterator();
while ( it.hasNext() )
@@ -926,7 +1019,7 @@
* Get connections using ij.startJBMS() and make sure
* they're unique
*/
- protected void checkJBMSToString() throws Exception
+ protected static void checkJBMSToString() throws Exception
{
clearConnections();
// Open ten connections rather than just two to
@@ -947,7 +1040,7 @@
* Check uniqueness of connection strings coming from a
* DataSouce
*/
- protected void checkToString(DataSource ds) throws Exception
+ protected static void checkToString(DataSource ds) throws Exception
{
clearConnections();
@@ -966,7 +1059,7 @@
* We want to check the PooledConnection as well as the
* underlying physical connection.
*/
- protected void checkToString(ConnectionPoolDataSource pds)
+ protected static void checkToString(ConnectionPoolDataSource pds)
throws Exception
{
int numConnections = 10;
@@ -1006,26 +1099,12 @@
pc.close();
}
pooledConns.clear();
-
- // Now check that two connections from the same
- // PooledConnection have the same string value
- PooledConnection pc = pds.getPooledConnection();
- Connection conn = pc.getConnection();
- String str = conn.toString();
- conn = pc.getConnection();
- if ( ! conn.toString().equals(str) )
- {
- throw new Exception("Two connections from the " +
- "same pooled connection have different string " +
- "values: " + str + ", " + conn.toString());
- }
- pc.close();
}
/**
* Check uniqueness of strings for an XA data source
*/
- protected void checkToString(XADataSource xds) throws Exception
+ protected static void checkToString(XADataSource xds) throws Exception
{
int numConnections = 10;
@@ -1064,35 +1143,7 @@
xc.close();
}
xaConns.clear();
-
- // Now check that two connections from the same
- // XAConnection have the same string value
- XAConnection xc = xds.getXAConnection();
- Connection conn = xc.getConnection();
- String str = conn.toString();
- conn = xc.getConnection();
- if ( ! conn.toString().equals(str) )
- {
- throw new Exception("Two connections from the " +
- "same pooled connection have different string " +
- "values: " + str + ", " + conn.toString());
- }
- xc.close();
}
-
- protected static void checkConnectionPreCloseS(String dsName, Connection conn) throws SQLException {
- if (dsName.endsWith("DataSource")) {
-
- // see if setting the state is carried over to any future connection from the
- // data source object.
- try {
- conn.setReadOnly(true);
- } catch (SQLException sqle) {
- // cannot set read-only in an active transaction, & sometimes
- // connections are active at this point.
- }
- }
- }
protected void checkConnectionPreClose(String dsName, Connection conn) throws SQLException {
if (dsName.endsWith("DataSource")) {
@@ -1108,23 +1159,7 @@
}
}
- protected static void checkStatementS(Connection conn, Statement s) throws SQLException {
-
- Connection c1 = s.getConnection();
- if (c1 != conn)
- System.out.println("FAIL incorrect connection object returned for Statement.getConnection()");
-
- s.addBatch("insert into y values 1");
- s.addBatch("insert into y values 2,3");
- int[] states = s.executeBatch();
- if (states[0] != 1)
- System.out.println("FAIL invalid update count for first batch statement");
- if (states[1] != 2)
- System.out.println("FAIL invalid update count for second batch statement");
-
- s.close();
- }
- protected void checkStatement(Connection conn, Statement s) throws SQLException {
+ protected void checkStatement(String dsName, Connection conn, Statement s) throws SQLException {
Connection c1 = s.getConnection();
if (c1 != conn)
@@ -1138,6 +1173,10 @@
if (states[1] != 2)
System.out.println("FAIL invalid update count for second batch statement");
+ ResultSet rs = s.executeQuery("VALUES 1");
+ if (rs.getStatement() != s)
+ System.out.println(dsName + " FAIL incorrect Statement object returned for ResultSet.getStatement");
+ rs.close();
s.close();
}
Modified: db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java?rev=410665&r1=410664&r2=410665&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java (original)
+++ db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java Wed May 31 13:53:51 2006
@@ -20,38 +20,34 @@
package org.apache.derbyTesting.functionTests.tests.jdbcapi;
-import org.apache.derby.jdbc.EmbeddedDataSource;
-import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
-import org.apache.derby.jdbc.EmbeddedXADataSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.PreparedStatement;
import java.sql.CallableStatement;
-import java.sql.Statement;
-import java.sql.SQLException;
+import java.sql.Connection;
import java.sql.DriverManager;
-import java.sql.Savepoint;
import java.sql.ParameterMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Properties;
-import javax.sql.DataSource;
-import javax.sql.XADataSource;
-import javax.sql.XAConnection;
import javax.sql.ConnectionPoolDataSource;
-import javax.transaction.xa.XAResource;
+import javax.sql.PooledConnection;
+import javax.sql.XAConnection;
+import javax.sql.XADataSource;
import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
-import javax.sql.ConnectionEventListener;
-import javax.sql.ConnectionEvent;
-import org.apache.derby.tools.JDBCDisplayUtil;
-import org.apache.derby.tools.ij;
-import java.io.*;
-import java.util.Hashtable;
+import org.apache.derby.tools.JDBCDisplayUtil;
+import org.apache.derbyTesting.functionTests.util.TestUtil;
-import javax.naming.*;
-import javax.naming.directory.*;
+/**
+ * Extends checkDataSource to provide testing of JDBC 3.0 specific
+ * methods for the embedded DataSource implementations.
+ * @author djd
+ *
+ */
public class checkDataSource30 extends checkDataSource
{
@@ -62,12 +58,15 @@
tester.runTest(args);
tester.checkXAHoldability();
+
+ testDerby1144();
+
System.out.println("Completed checkDataSource30");
}
- public checkDataSource30() throws Exception {
+ public checkDataSource30() {
}
public void checkConnection(String dsName, Connection conn) throws SQLException {
@@ -155,9 +154,11 @@
private void checkXAHoldability() {
System.out.println("START XA HOLDABILITY TEST");
try {
- EmbeddedXADataSource dscsx = new EmbeddedXADataSource();
- dscsx.setDatabaseName("wombat");
-
+ Properties attrs = new Properties();
+ attrs.setProperty("databaseName", "wombat");
+ attrs.setProperty("connectionAttributes", "create=true");
+ XADataSource dscsx = TestUtil.getXADataSource(attrs);
+
XAConnection xac = dscsx.getXAConnection("fred", "wilma");
XAResource xr = xac.getXAResource();
Xid xid = getXid(25, (byte) 21, (byte) 01);
@@ -298,8 +299,7 @@
} catch (SQLException sqle) {
System.out.println("Expected SQLException(setHoldability) " + sqle.getMessage());
}
-
- // try to create a statement with held attributes
+
// JDBC 4.0 (proposed final draft) section 16.1.3.1 allows Statements to
// be created with a different holdability if the driver cannot support it.
// In this case the driver does not support holdability in a global transaction
@@ -369,4 +369,302 @@
}
System.out.flush();
}
+
+ /**
+ * Perform connection checks on the default connection
+ * using checkDataSourc30.
+ */
+ public static void checkNesConn30(String dsName) throws SQLException {
+ Connection conn = DriverManager.getConnection("jdbc:default:connection");
+ new checkDataSource30().checkConnection(dsName, conn);
+ }
+
+
+ /**
+ * USe checkNesConn30 for the procedure, will
+ * cause the 30 checks to be invoked as well.
+ */
+ protected String getNestedMethodName()
+ {
+ return "checkDataSource30.checkNesConn30";
+ }
+
+
+ /**
+ * Tests for DERBY-1144
+ *
+ * This test tests that holdability, autocomit, and transactionIsolation are
+ * reset on getConnection for PooledConnections obtaind from connectionPoolDataSources
+ *
+ * DERBY-1134 has been filed for more comprehensive testing of client connection state.
+ *
+ * @throws SQLException
+ */
+ public static void testDerby1144() throws SQLException
+ {
+ Connection conn = null;
+ PooledConnection pc1 = null;
+ Properties p = new Properties();
+
+ p.put("databaseName","sample");
+ p.put("connectionAttributes","create=true");
+ p.put("user","APP");
+ p.put("password","pw");
+
+ // Test holdability
+ ConnectionPoolDataSource ds = TestUtil.getConnectionPoolDataSource(p);
+ pc1 = ds.getPooledConnection();
+ testPooledConnHoldability("PooledConnection", pc1);
+ pc1.close();
+
+ // Test autocommit
+ pc1 = ds.getPooledConnection();
+ testPooledConnAutoCommit("PooledConnection", pc1);
+ pc1.close();
+
+ // Test pooled connection isolation
+ ds = TestUtil.getConnectionPoolDataSource(p);
+ pc1 = ds.getPooledConnection();
+ testPooledConnIso("PooledConnection" , pc1);
+ pc1.close();
+
+ // Test xa connection isolation
+ XADataSource xds = TestUtil.getXADataSource(p);
+ XAConnection xpc1 = xds.getXAConnection();
+ testPooledConnIso("XAConnection", xpc1);
+ xpc1.close();
+ }
+
+
+ /**
+ * Make sure autocommit gets reset on PooledConnection.getConnection()
+ * @param desc description of connection
+ * @param pc1 pooled connection to test
+ * @throws SQLException
+ */
+ private static void testPooledConnAutoCommit(String desc, PooledConnection pc1) throws SQLException {
+ System.out.println("\n** Test autoCommit state for: " + desc + "**");
+ Connection conn = pc1.getConnection();
+ conn.setAutoCommit(true);
+ // reset the connection and see if the autocommit
+ conn = pc1.getConnection();
+ boolean autocommit = conn.getAutoCommit();
+ if (autocommit != true)
+ {
+ new Exception("FAIL: autoCommit not reset on getConnection").printStackTrace(System.out);
+ }
+ else
+ {
+ System.out.println("PASS: autoCommit reset on getConnection");
+ }
+ conn.close();
+ }
+
+
+ /**
+ * Test Holdability gets reset on PooledConnection.getConnection()
+ * @param desc
+ * @param pc1
+ * @throws SQLException
+ */
+ private static void testPooledConnHoldability(String desc, PooledConnection pc1)
+ throws SQLException {
+ System.out.println("\n**Test holdability state for: " + desc + " **");
+ Connection conn = pc1.getConnection();
+ conn.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ // reset the connection and see if the holdability gets reset
+ // to HOLD_CURSORS_OVER_COMMIT
+ conn = pc1.getConnection();
+ checkConnHoldability(conn, ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ conn.close();
+ }
+
+
+
+ /**
+ * Verify connection holdablity is expected holdability
+ * @param conn
+ * @param expectedHoldability
+ * * @throws SQLException
+ */
+ private static void checkConnHoldability(Connection conn,
+ int expectedHoldability) throws SQLException {
+ int holdability = conn.getHoldability();
+ if (holdability != expectedHoldability)
+ {
+ new Exception("FAIL: Holdability:" + translateHoldability(holdability) +
+ " does not match expected holdability:" +
+ translateHoldability(expectedHoldability)).printStackTrace(System.out);
+ }
+ else
+ {
+ System.out.println("PASS: Holdability matches expected holdability:" +
+ translateHoldability(expectedHoldability));
+ }
+ }
+
+
+ /**
+ * Test that isolation is reset on PooledConnection.getConnection()
+ * @param pooledConnType Descripiton of the type of pooled connection
+ * @param pc
+ * @throws SQLException
+ */
+ private static void testPooledConnIso(String pooledConnType, PooledConnection pc)
+ throws SQLException {
+ Connection conn = pc.getConnection();
+
+ setupDerby1144Table(conn);
+ System.out.println("*** Test isolation level reset on " + pooledConnType+ ".getConnection()***");;
+ System.out.println("\nsetTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED");
+ conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
+ checkIsoLocks(conn,Connection.TRANSACTION_READ_UNCOMMITTED);
+
+ conn.close();
+ System.out.println("\nGet a new connection with " + pooledConnType+ ".getConnection()");
+ System.out.println("Isolation level should be reset to READ_COMMITTED");
+ Connection newconn = pc.getConnection();
+ checkIsoLocks(newconn,Connection.TRANSACTION_READ_COMMITTED);
+
+
+ }
+
+
+ /**
+ * Make a simple table for DERBY-1144 tests
+ * @param conn
+ * @throws SQLException
+ */
+ private static void setupDerby1144Table(Connection conn) throws SQLException
+ {
+ Statement stmt = conn.createStatement();
+ try {
+ stmt.executeUpdate("DROP TABLE TAB1");
+ }
+ catch (SQLException e)
+ {
+ // ignore drop error
+ }
+ stmt.executeUpdate("CREATE TABLE TAB1(COL1 INT NOT NULL)");
+ stmt.executeUpdate("INSERT INTO TAB1 VALUES(1)");
+ stmt.executeUpdate("INSERT INTO TAB1 VALUES(2)");
+
+ System.out.println("done creating table");
+ conn.commit ();
+ }
+
+
+
+
+ /*
+ * Checks locks for designated isolation level on the connection.
+ * Currently only supports TRANSACTION_READ_COMMITTED and
+ * TRANSACTION_READ_UNCOMMITTED
+ * @param conn Connection to test
+ * @param isoLevel expected isolation level
+ *
+ */
+ private static void checkIsoLocks(Connection conn, int expectedIsoLevel)
+ {
+ try {
+ int conniso = conn.getTransactionIsolation();
+ if (conniso != expectedIsoLevel)
+ {
+ new Exception("FAIL: Connection isolation level " +
+ translateIso(conniso) +
+ " does not match expected level " +
+ translateIso(expectedIsoLevel));
+ }
+
+ boolean selectTimedOut = selectTimesoutDuringUpdate(conn);
+ switch (conniso) {
+ case Connection.TRANSACTION_READ_UNCOMMITTED:
+ if (selectTimedOut)
+ new Exception("FAIL: Unexpected lock timeout for READ_UNCOMMITTED").printStackTrace(System.out);
+ else
+ System.out.println("PASS: No lock timeout occurs for READ_UNCOMMITTED");
+ case Connection.TRANSACTION_READ_COMMITTED:
+ if (selectTimedOut)
+ System.out.println("PASS: Expected lock timeout for READ_COMMITTED");
+ else
+ new Exception("FAIL: Did not get lock timeout for READ_COMMITTED");
+ default:
+ new Exception("No test support for isolation level" +
+ translateIso(conniso));
+ }
+ } catch (SQLException se) {
+ se.printStackTrace();
+ }
+ }
+
+ /**
+ * Determine if a select on this connection during update will timeout.
+ * Used to establish isolation level. If the connection isolation level
+ * is <code> Connection.TRANSACTION_READ_UNCOMMITTED </code> it will not
+ * timeout. Otherwise it should.
+ *
+ * @param conn Connection to test.
+ * @return true if the select got a lock timeout, false otherwise.
+ */
+ private static boolean selectTimesoutDuringUpdate(Connection conn) {
+ Connection updateConn = null;
+
+ try {
+
+ conn.setAutoCommit(false);
+ // create another connection and do an update but don't commit
+ updateConn = TestUtil.getConnection("sample","create=true");
+ updateConn.setAutoCommit(false);
+
+
+ // First update the rows on the update connection
+ Statement upStmt = updateConn.createStatement();
+ upStmt.executeUpdate("update tab1 set col1 = 3");
+
+ // now see if we can select them
+
+ Statement stmt = conn.createStatement();
+ ResultSet rs = stmt.executeQuery("Select * from tab1");
+ while (rs.next()){};
+ rs.close();
+
+ }
+ catch (SQLException e)
+ {
+ if (e.getSQLState().equals("40XL1"))
+ {
+ // If we got a lock timeout this is not read uncommitted
+ return true;
+ }
+
+ }
+ finally {
+
+ try {
+ conn.rollback();
+ updateConn.rollback();
+ }catch (SQLException se) {
+ se.printStackTrace();
+ }
+ }
+ return false;
+
+ }
+
+ /**
+ * Translate holdability int readable format.
+ *
+ * @param holdability holdability to translate.
+ * @return "HOLD_CURSORS_OVER_COMMIT" or "CLOSE_CURSORS_AT_COMMIT"
+ */
+ public static String translateHoldability(int holdability)
+ {
+ switch (holdability)
+ {
+ case ResultSet.HOLD_CURSORS_OVER_COMMIT : return "HOLD_CURSORS_OVER_COMMIT";
+ case ResultSet.CLOSE_CURSORS_AT_COMMIT : return "CLOSE_CURSORS_AT_COMMIT";
+ }
+ return "UNKNOWN_HOLDABILTY";
+ }
+
}
Modified: db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/util/derby_tests.policy
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/util/derby_tests.policy?rev=410665&r1=410664&r2=410665&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/util/derby_tests.policy (original)
+++ db/derby/code/branches/10.1/java/testing/org/apache/derbyTesting/functionTests/util/derby_tests.policy Wed May 31 13:53:51 2006
@@ -65,12 +65,23 @@
};
//
+// Permissions for the tests (derbyTesting.jar)
+// We are liberal here, it's not a goal to make the test harness
+// or tests secure.
+//
+grant codeBase "${csinfo.codejar}derbyTesting.jar" {
+ // Access all properties using System.getProperties
+ permission java.util.PropertyPermission "*", "read, write";
+};
+
+//
// super-set of the jar permissions for running out of the classes directory
//
grant codeBase "${csinfo.codeclasses}" {
permission java.util.PropertyPermission "derby.*", "read";
permission java.lang.RuntimePermission "createClassLoader";
+ permission java.util.PropertyPermission "*", "read, write";
permission java.io.FilePermission "${derby.system.home}${/}derby.properties", "read";
permission java.io.FilePermission "${derby.system.home}${/}derby.log", "read, write, delete";