db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mamta A. Satoor (Updated) (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-5663) Getting NPE when trying to set derby.language.logStatementText property to true inside a junit suite.
Date Wed, 28 Mar 2012 20:27:29 GMT

     [ https://issues.apache.org/jira/browse/DERBY-5663?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Mamta A. Satoor updated DERBY-5663:
-----------------------------------

    Attachment: DERBY5663_patch2.txt

Attaching patch DERBY5663_patch2.txt for this issue. The patch touches following 2 files.
$ svn stat -q
M       java\testing\org\apache\derbyTesting\functionTests\tests\largedata\LobLimitsTest.java
M       java\testing\org\apache\derbyTesting\junit\SystemPropertyTestSetup.java

Changes in LobLimitsTest.java now adds properties related to lock timeouts. In case the test
ran into lock timeouts as noted by DERBY-5368, we should have relevant information in derby.log
to debug the problem.

Changes in SystemPropertyTestSetup.java. 
Two of the variables defined in this class are
	protected Properties newValues;
	private Properties oldValues;
newValues are the new properties requested by the junit suite through the SystemPropertyTestSetup
decorator. These values become effective in SystemPropertyTestSetup.setUp() method.
oldValues are the original properties which we want to revert back to at the time of teardown
of this decorator. 

In trunk, both oldValues and newValues get set to null at the end of the tearDown which causes
two problems
1)npe in following piece of code in SystemPropertyTestSetup.tearDown()
       		if (oldValues.getProperty(key) == null)
Solution to npe is that rather than nulling oldValues, we should initialize it to empty properties
object(similar to what happens in the decorator constructor). To fix npe, in SystemPropertyTestSetup.tearDown(),
I have replaced
        oldValues = null;
with
        oldValues = new Properties();
2)new properties not getting reused when the same decorator instance is used for another suite.
It is possible to use the same instance of SystemPropertyTestSetup for multiple runs of a
suite. 
LobLimitsTest in the patch uses SystemPropertyTestSetup decorator to set locking related properties
as shown below(attached patch shows these changes to LobLimitsTest)
    static Test baseSuite(final int biggestSize, final int bigSize) {
    	//Run the suite with following properties in case we run into lock
    	// time out issues. It will help debug the problem if timeouts occur.
        Properties sysprops = new Properties();
        sysprops.setProperty("derby.locks.deadlockTrace", "true");
        sysprops.setProperty("derby.locks.monitor", "true");
        // Some of the test cases depend on certain other test cases to run
        // first, so force the test cases to run in lexicographical order.
        Test suite = new CleanDatabaseTestSetup(
                TestConfiguration.orderedSuite(LobLimitsTest.class)) {
            protected void decorateSQL(Statement s)
                           throws SQLException {
                setupTables(s, biggestSize, bigSize);
            }
        };
        suite = new SystemPropertyTestSetup(suite,sysprops);//,true);

        return new SupportFilesSetup(suite);
    }

Next, LobLimitsTest gets called by tests.largedata._Suite 4 times, one time each for different
large object sizes and for embedded and network server runs. Nulling of newValues in SystemPropertyTestSetup.tearDown
causes the subsequent use of SystemPropertyTestSetup instance to loose the properties requested
by LobLimitsTest. In order to fix this, we should not null the newValues properties in SystemPropertyTestSetup.tearDown()

I will run the entire junit suite one time to make sure nothing has broken as a result of
these changes. Thanks

                
> Getting NPE when trying to set derby.language.logStatementText property to true inside
a junit suite.
> -----------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-5663
>                 URL: https://issues.apache.org/jira/browse/DERBY-5663
>             Project: Derby
>          Issue Type: Bug
>          Components: Test
>    Affects Versions: 10.9.0.0
>            Reporter: Mamta A. Satoor
>              Labels: derby_triage10_9
>         Attachments: DERBY5663_patch1.txt, DERBY5663_patch2.txt
>
>
> Derby has a large data suite which runs LobLimitsTest with small data size, large data
size and with embedded and network server configurations. The large data suite is run as follows
> time java  -Dderby.tests.trace=true -Dderby.infolog.append=true junit.textui.TestRunner
org.apache.derbyTesting.functionTests.tests.largedata._Suite > runall.out 2>&1
> I made a simple change to the suite to log statement text as shown in the attached patch(DERBY5663_patch1.txt).
This causes the large data suite to run into NPE (NPE can be seen in runall.out) as shown
below. Not sure what I am doing wrong while trying to set the property, which results in NPE.
> .
> (emb)largedata.Derby5624Test.testDERBY_5624 used 411473 ms .
> (emb)largedata.LobLimitsTest.test_01_Blob used 1555 ms .
> (emb)largedata.LobLimitsTest.test_02_BlobNegative used 42 ms .
> (emb)largedata.LobLimitsTest.test_03_Clob1 used 1436 ms .
> (emb)largedata.LobLimitsTest.test_04_Clob2 used 1707 ms .
> (emb)largedata.LobLimitsTest.test_05_ClobNegative used 967 ms E.
> (emb)largedata.LobLimitsTest.test_01_Blob used 2929139 ms .
> (emb)largedata.LobLimitsTest.test_02_BlobNegative used 154 ms .
> (emb)largedata.LobLimitsTest.test_03_Clob1 used 2854121 ms .
> (emb)largedata.LobLimitsTest.test_04_Clob2 used 656137 ms .
> (emb)largedata.LobLimitsTest.test_05_ClobNegative used 331288 ms EF
> Time: 7,589.168
> There were 2 errors:
> 1) LobLimitsTestjava.lang.NullPointerException
> 	at org.apache.derbyTesting.junit.SystemPropertyTestSetup.setProperties(SystemPropertyTestSetup.java:116)
> 	at org.apache.derbyTesting.junit.SystemPropertyTestSetup.setUp(SystemPropertyTestSetup.java:87)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:18)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 2) LobLimitsTestjava.sql.SQLNonTransientConnectionException: DERBY SQL error: SQLCODE:
-1, SQLSTATE: 08006, SQLERRMC: org.apache.derby.jdbc.EmbeddedDriver is not registered with
the JDBC driver manager
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:71)
> 	at org.apache.derby.client.am.SqlException.getSQLException(SqlException.java:364)
> 	at org.apache.derby.jdbc.ClientDriver.connect(ClientDriver.java:166)
> 	at java.sql.DriverManager.getConnection(DriverManager.java:322)
> 	at java.sql.DriverManager.getConnection(DriverManager.java:297)
> 	at org.apache.derbyTesting.junit.DriverManagerConnector.openConnection(DriverManagerConnector.java:100)
> 	at org.apache.derbyTesting.junit.DriverManagerConnector.openConnection(DriverManagerConnector.java:67)
> 	at org.apache.derbyTesting.junit.DriverManagerConnector.openConnection(DriverManagerConnector.java:43)
> 	at org.apache.derbyTesting.junit.TestConfiguration.openDefaultConnection(TestConfiguration.java:1633)
> 	at org.apache.derbyTesting.junit.BaseJDBCTestSetup.getConnection(BaseJDBCTestSetup.java:72)
> 	at org.apache.derbyTesting.junit.CleanDatabaseTestSetup.setUp(CleanDatabaseTestSetup.java:104)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:18)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> Caused by: org.apache.derby.client.am.SqlException: DERBY SQL error: SQLCODE: -1, SQLSTATE:
08006, SQLERRMC: org.apache.derby.jdbc.EmbeddedDriver is not registered with the JDBC driver
manager
> 	at org.apache.derby.client.am.Connection.completeSqlca(Connection.java:2125)
> 	at org.apache.derby.client.net.NetConnectionReply.parseRdbAccessFailed(NetConnectionReply.java:538)
> 	at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(NetConnectionReply.java:431)
> 	at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(NetConnectionReply.java:294)
> 	at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(NetConnectionReply.java:121)
> 	at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessRdb(NetConnection.java:826)
> 	at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessRdb(NetConnection.java:762)
> 	at org.apache.derby.client.net.NetConnection.flowUSRIDPWDconnect(NetConnection.java:591)
> 	at org.apache.derby.client.net.NetConnection.flowConnect(NetConnection.java:406)
> 	at org.apache.derby.client.net.NetConnection.<init>(NetConnection.java:220)
> 	at org.apache.derby.client.net.NetConnection40.<init>(NetConnection40.java:74)
> 	at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConnection(ClientJDBCObjectFactoryImpl40.java:269)
> 	at org.apache.derby.jdbc.ClientDriver.connect(ClientDriver.java:157)
> 	... 43 more
> There was 1 failure:
> 1) LobLimitsTestjunit.framework.ComparisonFailure: Engine shutdown expected:<XJ015>
but was:<08001>
> 	at org.apache.derbyTesting.junit.BaseJDBCTestCase.assertSQLState(BaseJDBCTestCase.java:790)
> 	at org.apache.derbyTesting.junit.TestConfiguration.shutdownEngine(TestConfiguration.java:1751)
> 	at org.apache.derbyTesting.junit.SystemPropertyTestSetup.tearDown(SystemPropertyTestSetup.java:108)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:20)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> 	at org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> 	at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> 	at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> 	at junit.extensions.TestSetup.run(TestSetup.java:23)
> Caused by: java.sql.SQLException: No suitable driver
> 	at java.sql.DriverManager.getConnection(DriverManager.java:330)
> 	at java.sql.DriverManager.getConnection(DriverManager.java:297)
> 	at org.apache.derbyTesting.junit.DriverManagerConnector.getConnectionByAttributes(DriverManagerConnector.java:163)
> 	at org.apache.derbyTesting.junit.DriverManagerConnector.shutEngine(DriverManagerConnector.java:140)
> 	at org.apache.derbyTesting.junit.TestConfiguration.shutdownEngine(TestConfiguration.java:1748)
> 	... 31 more
> FAILURES!!!
> Tests run: 11,  Failures: 1,  Errors: 2

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message