Return-Path: Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: (qmail 24329 invoked from network); 17 Feb 2006 14:42:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 17 Feb 2006 14:42:25 -0000 Received: (qmail 18823 invoked by uid 500); 17 Feb 2006 14:42:25 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 18786 invoked by uid 500); 17 Feb 2006 14:42:24 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 18775 invoked by uid 99); 17 Feb 2006 14:42:24 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 17 Feb 2006 06:42:24 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Fri, 17 Feb 2006 06:42:23 -0800 Received: (qmail 24126 invoked by uid 65534); 17 Feb 2006 14:42:03 -0000 Message-ID: <20060217144203.24119.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r378532 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests: master/DerbyNetClient/checkDataSource30.out suites/DerbyNetClient.exclude tests/jdbcapi/checkDataSource.java tests/jdbcapi/checkDataSource30.java Date: Fri, 17 Feb 2006 14:42:01 -0000 To: derby-commits@db.apache.org From: kmarsden@apache.org X-Mailer: svnmailer-1.0.6 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: kmarsden Date: Fri Feb 17 06:41:59 2006 New Revision: 378532 URL: http://svn.apache.org/viewcvs?rev=378532&view=rev Log: DERBY-435 jdbapi/checkDataSource30.java test should be changed or extended to test client DataSources patch 2 - checkDataSource30 holdability testing for client - Enables the checkDataSource30 test for holdability tests that are currently passing. There appear to be several holdability bugs associated with network XA in additon to DERBY-966. - Makes some progress toward getting checkDataSource.java to run with client, but it is not enabled yet. - Changed to only run connection toString tests for embedded. - Changed to only test SimpleDataSource for embedded - Changed to perform an explicit rollback of active transactions for client before performing a PooledConnection.getConnection() I think this is an issue with embedded that it allows a PooledConnection.getConnection() with an active transaction, instead of throwing an error if the transaction is active. Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/checkDataSource30.out (with props) Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/checkDataSource30.out URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/checkDataSource30.out?rev=378532&view=auto ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/checkDataSource30.out (added) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/checkDataSource30.out Fri Feb 17 06:41:59 2006 @@ -0,0 +1,41 @@ +START XA HOLDABILITY TEST +By default, autocommit is true for a connection +Default holdability for a connection is HOLD_CURSORS_OVER_COMMIT +CONNECTION(not in xa transaction yet) HOLDABILITY true +Notice that autocommit now is false for connection because it is part of the global transaction +Autocommit on Connection inside global transaction has been set correctly to false +CONNECTION(non-xa) HOLDABILITY false +STATEMENT HOLDABILITY false +STATEMENT HOLDABILITY false +STATEMENT HOLDABILITY true +PREPARED STATEMENT HOLDABILITY true +CALLABLE STATEMENT HOLDABILITY true +H@1 id 1 +H@2 id 2 +H@3 id 3 +CONNECTION(xa) HOLDABILITY false +STATEMENT(this one was created with holdability false, outside the global transaction. Check it's holdability inside global transaction) HOLDABILITY false +STATEMENT(this one was created with holdability true, outside the global transaction. Check it's holdability inside global transaction) HOLDABILITY true +STATEMENT(this one was created with default holdability inside this global transaction. Check it's holdability) HOLDABILITY false +PREPAREDSTATEMENT(this one was created with default holdability inside this global transaction. Check it's holdability) HOLDABILITY false +CALLABLESTATEMENT(this one was created with default holdability inside this global transaction. Check it's holdability) HOLDABILITY false +X@1 id 1 +X@2 id 2 +Expected SQLException No current connection. : +Expected SQLException Invalid operation: result set closed +resume XA transaction and keep using rs +Check holdability of various jdbc objects after resuming XA transaction +CONNECTION(xa) HOLDABILITY false +STATEMENT(this one was created with holdability false, outside the global transaction. Check it's holdability inside global transaction) HOLDABILITY false +STATEMENT(this one was created with holdability true, outside the global transaction. Check it's holdability inside global transaction) HOLDABILITY true +STATEMENT(this one was created with default holdability inside the global transaction when it was first started. Check it's holdability) HOLDABILITY false +PREPAREDSTATEMENT(this one was created with default holdability inside the global transaction when it was first started. Check it's holdability) HOLDABILITY false +CALLABLESTATEMENT(this one was created with default holdability inside the global transaction when it was first started. Check it's holdability) HOLDABILITY false +STATEMENT(this one was created with default holdability after the global transaction was resumed. Check it's holdability) HOLDABILITY false +PREPAREDSTATEMENT(this one was created with default holdability after the global transaction was resumed. Check it's holdability) HOLDABILITY false +CALLABLESTATEMENT(this one was created with default holdability after the global transaction was resumed. Check it's holdability) HOLDABILITY false +Expected SQLException Invalid operation: result set closed +Expected SQLException Invalid operation: result set closed +Set connection to hold +CONNECTION(held) HOLDABILITY true +Completed checkDataSource30 Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/checkDataSource30.out ------------------------------------------------------------------------------ svn:eol-style = native Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude?rev=378532&r1=378531&r2=378532&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/DerbyNetClient.exclude Fri Feb 17 06:41:59 2006 @@ -4,7 +4,6 @@ # excluding statementJdbc20.java because this tests fetch_reverse throughout the test # excluding jdbcapi/testRelative.java because it is a new test that requires debugging with the IBM Driver # excluding jdbcapi/resultsetJdbc30.java because the features tested are not implemented by Derby Client -# excluding jdbcapi/checkDataSource30.java - Client behaves differently. Need to look into this # excluding jdbcapi/statementJdbc30.java - Client behaves differently. Need to look into this # excluding jdbcapi/dataSourceReference.java - client side only tests, tests all data sources # regardless of framework @@ -16,7 +15,6 @@ jdbcapi/statementJdbc20.java jdbcapi/testRelative.java jdbcapi/resultsetJdbc30.java -jdbcapi/checkDataSource30.java jdbcapi/statementJdbc30.java jdbcapi/dataSourceReference.java largedata/LobLimits.java Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java?rev=378532&r1=378531&r2=378532&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource.java Fri Feb 17 06:41:59 2006 @@ -64,6 +64,24 @@ */ public class checkDataSource { + // 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 static boolean testConnectionToString = TestUtil.isEmbeddedFramework(); + + // Only embedded supports SimpleDataSource (JSR169). + // These tests are exempted from other frameworks + private static 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 + // I think client is right here (kmarsden), the user should have to rollback + private static boolean needRollbackBeforePCGetConnection = + 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 @@ -132,25 +150,35 @@ checkConnection("DriverManager ", dmc); - checkJBMSToString(); + if (testConnectionToString) + checkJBMSToString(); Properties attrs = new Properties(); attrs.setProperty("databaseName", "wombat"); DataSource dscs = TestUtil.getDataSource(attrs); - checkToString(dscs); + if (testConnectionToString) + checkToString(dscs); DataSource ds = dscs; checkConnection("DataSource", ds.getConnection()); - - DataSource dssimple = TestUtil.getSimpleDataSource(attrs); - ds = dssimple; - checkConnection("SimpleDataSource", ds.getConnection()); + + DataSource dssimple = null; + if (testSimpleDataSource) + { + dssimple = TestUtil.getSimpleDataSource(attrs); + ds = dssimple; + checkConnection("SimpleDataSource", ds.getConnection()); + } ConnectionPoolDataSource dsp = TestUtil.getConnectionPoolDataSource(attrs); - checkToString(dsp); + + + if (testConnectionToString) + checkToString(dsp); + PooledConnection pc = dsp.getPooledConnection(); SecurityCheck.inspect(pc, "javax.sql.PooledConnection"); @@ -172,7 +200,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"); @@ -205,7 +235,8 @@ testPoolReset("ConnectionPoolDataSource", dsp.getPooledConnection()); XADataSource dsx = TestUtil.getXADataSource(attrs); - checkToString(dsx); + if (testConnectionToString) + checkToString(dsx); XAConnection xac = dsx.getXAConnection(); SecurityCheck.inspect(xac, "javax.sql.XAConnection"); @@ -224,7 +255,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"); @@ -264,8 +297,12 @@ 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)); Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java?rev=378532&r1=378531&r2=378532&view=diff ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java (original) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/checkDataSource30.java Fri Feb 17 06:41:59 2006 @@ -52,9 +52,11 @@ public static void main(String[] args) throws Exception { checkDataSource30 tester = new checkDataSource30(); - - - tester.runTest(args); + // portions of this test do not run yet with client and so + // are enabled only for embedded with + // if (TestUtil.isEmbeddedFramework())blocks + if (TestUtil.isEmbeddedFramework()) + tester.runTest(args); tester.checkXAHoldability(); // Print a report on System.out of the issues @@ -156,6 +158,7 @@ try { Properties attrs = new Properties(); attrs.setProperty("databaseName", "wombat"); + attrs.setProperty("connectionAttributes", "create=true"); XADataSource dscsx = TestUtil.getXADataSource(attrs); XAConnection xac = dscsx.getXAConnection("fred", "wilma"); @@ -168,8 +171,13 @@ //start a global transaction and default holdability and autocommit will be switched to match Derby XA restrictions xr.start(xid, XAResource.TMNOFLAGS); System.out.println("Notice that autocommit now is " + conn1.getAutoCommit() + " for connection because it is part of the global transaction"); - System.out.println("Notice that connection's holdability at this point is CLOSE_CURSORS_AT_COMMIT because it is part of the global transaction"); - System.out.println("CONNECTION(in xa transaction) HOLDABILITY " + (conn1.getHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); + if (TestUtil.isEmbeddedFramework()) + { + // run only for embedded + // Network XA BUG: getHoldability does not return CLOSE_CURSORS_AT_COMMIT for global transaction + System.out.println("Notice that connection's holdability at this point is CLOSE_CURSORS_AT_COMMIT because it is part of the global transaction"); + System.out.println("CONNECTION(in xa transaction) HOLDABILITY " + (conn1.getHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); + } xr.end(xid, XAResource.TMSUCCESS); conn1.commit(); conn1.close(); @@ -177,7 +185,11 @@ xid = getXid(27, (byte) 21, (byte) 01); xr.start(xid, XAResource.TMNOFLAGS); conn1 = xac.getConnection(); - System.out.println("CONNECTION(in xa transaction) HOLDABILITY " + (conn1.getHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); + if (TestUtil.isEmbeddedFramework()) + { + // Network XA BUG: getHoldability in a xa transaction returns true + System.out.println("CONNECTION(in xa transaction) HOLDABILITY " + (conn1.getHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); + } System.out.println("Autocommit on Connection inside global transaction has been set correctly to " + conn1.getAutoCommit()); xr.end(xid, XAResource.TMSUCCESS); conn1.rollback(); @@ -230,6 +242,7 @@ System.out.println("CALLABLESTATEMENT(this one was created with default holdability inside this global transaction. Check it's holdability) HOLDABILITY " + (callablestmtInsideGlobalTransaction.getResultSetHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); ResultSet rsx = s.executeQuery("select id from hold_30 for update"); + rsx.next(); System.out.println("X@1 id " + rsx.getInt(1)); rsx.next(); System.out.println("X@2 id " + rsx.getInt(1)); xr.end(xid, XAResource.TMSUCCESS); @@ -265,7 +278,11 @@ System.out.println("STATEMENT(this one was created with default holdability after the global transaction was resumed. Check it's holdability) HOLDABILITY " + (stmtAfterGlobalTransactionResume.getResultSetHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); System.out.println("PREPAREDSTATEMENT(this one was created with default holdability after the global transaction was resumed. Check it's holdability) HOLDABILITY " + (prepstmtAfterGlobalTransactionResume.getResultSetHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); System.out.println("CALLABLESTATEMENT(this one was created with default holdability after the global transaction was resumed. Check it's holdability) HOLDABILITY " + (callablestmtAfterGlobalTransactionResume.getResultSetHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); - rsx.next(); System.out.println("X@3 id " + rsx.getInt(1)); + if (TestUtil.isEmbeddedFramework()) + { + // Network XA BUG gives result set closed + rsx.next(); System.out.println("X@3 id " + rsx.getInt(1)); + } xr.end(xid, XAResource.TMSUCCESS); @@ -278,7 +295,6 @@ } catch (SQLException sqle) { System.out.println("Expected SQLException " + sqle.getMessage()); } - try { rsh.next(); System.out.println("FAIL - rsh's should be closed (B) " + rsx.getInt(1)); } catch (SQLException sqle) { @@ -289,6 +305,17 @@ conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT); System.out.println("CONNECTION(held) HOLDABILITY " + (conn.getHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); + + if (!TestUtil.isEmbeddedFramework()) + { + // Don't run the rest of the test for client + // Network XA BUG: Client allows set HOLD_CURSORS_OVER_COMMIT + // to be set in a a global transaction on the connection and + // statements + conn.close(); + return; + } + xid = getXid(24, (byte) 21, (byte) 01); xr.start(xid, XAResource.TMNOFLAGS); System.out.println("CONNECTION(xa) HOLDABILITY " + (conn.getHoldability() == ResultSet.HOLD_CURSORS_OVER_COMMIT)); @@ -298,8 +325,7 @@ } catch (SQLException sqle) { System.out.println("Expected SQLException(setHoldability) " + sqle.getMessage()); } - - // try to create a statement with held attributes + try { Statement shxa = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT); System.out.println("FAIL opened statement with hold cursor attribute in global transaction");