I suppose what I should do is create a new DataStore in my test and see that THAT one has startup-sql on it. That makes it fail inside my test code and not in the setup. Excuse all the email...
From: Walter Stovall Sent: Thursday, October 08, 2015 4:07 PM To: [email protected] Subject: Re: [Geotools-devel] My test case cannot reveal the bug I'm fixing without altering the setup - is this a reasonable way? I think I see this is not the way to do it. Suggestions are welcome. From: Walter Stovall Sent: Thursday, October 08, 2015 3:18 PM To: [email protected]<mailto:[email protected]> Subject: [Geotools-devel] My test case cannot reveal the bug I'm fixing without altering the setup - is this a reasonable way? I'm building a test case that will reveal the bug (https://osgeo-org.atlassian.net/browse/GEOT-5239) I've developed a fix for. The bug can be distilled to the simple fact that you can't create a JDBCDataStore for which you have startup-sql configured when using an Oracle database. If you do, the Connection will get doubly wrapped while the DataStore is being created and then the OracleDialect.unwrap() fail with an exception. I'm in the process of adding code to JDBCConnectionLifecycleOnlineTest to expose this bug without my fix for it present. But that's difficult to do by just adding a new public member to do my test. The bug does not occur unless the connection gets doubly wrapped by adding a LifeCycleConnection as the DataStore is being setup in this JDBCDataStore code: if(connectionLifecycleListeners.size() > 0) { List<ConnectionLifecycleListener> locals = new ArrayList<ConnectionLifecycleListener>(connectionLifecycleListeners); cx = new LifecycleConnection(this, cx, locals); } Since the above executes when a test case is being setup, I'm sort of past the point of being able to reveal the bug when my test case actually starts executing - the connection is not doubly wrapped, so the OracleDialect.unwrap() will not fail. So what I've done is to add this code to JDBCConnectionLifecycleOnlineTest: protected void setUpInternal() throws Exception { if (getName().equals("testLifeCycleDoubleUnwrap")) { fixture.setProperty(JDBCDataStoreFactory.SQL_ON_BORROW.key, "select sysdate from dual"); } } public void testLifeCycleDoubleUnwrap() { } This overrides setupInternal to test for a setup of my new test case. If my new case is what's executing this adds startup-sql that will carry forward into the Map that sets up the data store. That alone will cause OracleDialect to fail while the DataStore is still being created. So for the case where my fix has not been applied, the setup (not the actual test itself) is what fails with this exception: WARNING: Oracle NG should be used, but could not connect java.io.IOException: Unable to obtain Oracle Connection require for SDO Geometry access).Check connection pool implementation to unsure unwrap is available at org.geotools.data.oracle.OracleNGDataStoreFactory.createDataStoreInternal(OracleNGDataStoreFactory.java:149) at org.geotools.jdbc.JDBCDataStoreFactory.createDataStore(JDBCDataStoreFactory.java:269) at org.geotools.jdbc.JDBCDataStoreFactory.createDataStore(JDBCDataStoreFactory.java:1) at org.geotools.data.DataAccessFinder.getDataStore(DataAccessFinder.java:130) at org.geotools.data.DataStoreFinder.getDataStore(DataStoreFinder.java:89) at org.geotools.jdbc.JDBCTestSupport.connect(JDBCTestSupport.java:139) at org.geotools.jdbc.JDBCConnectionLifecycleOnlineTest.connect(JDBCConnectionLifecycleOnlineTest.java:44) at org.geotools.test.OnlineTestCase.setUp(OnlineTestCase.java:243) at junit.framework.TestCase.runBare(TestCase.java:139) at junit.framework.TestResult$1.protect(TestResult.java:122) at junit.framework.TestResult.runProtected(TestResult.java:142) at junit.framework.TestResult.run(TestResult.java:125) at junit.framework.TestCase.run(TestCase.java:129) at org.geotools.test.OnlineTestCase.run(OnlineTestCase.java:123) at junit.framework.TestSuite.runTest(TestSuite.java:255) at junit.framework.TestSuite.run(TestSuite.java:250) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: java.sql.SQLException: Could not obtain native oracle connection for class org.geotools.jdbc.LifecycleConnection at org.geotools.data.oracle.OracleDialect.unwrapConnection(OracleDialect.java:655) at org.geotools.data.oracle.OracleNGDataStoreFactory.createDataStoreInternal(OracleNGDataStoreFactory.java:147) ... 22 more OK way to arrange the test? The exception won't happen with my fix to OracleDialect applied. Thanks - Walter
------------------------------------------------------------------------------
_______________________________________________ GeoTools-Devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-devel
------------------------------------------------------------------------------
_______________________________________________ GeoTools-Devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geotools-devel
