On 3/28/2011 6:27 AM, siddharth srivastava wrote:
Hi

Following is my proposal for GSoC 2011 for the project Derby Test and Fix: I request the community to pease provide your feedback and suggestions for it.

Siddharth. I think your detailed proposal looks excellent. I would propose the following additions:

Add an abstract section at the beginning that just identifies this as a proposal for the Derby Test and Fix project with a goal of fixing bugs and converting tests to JUnit.

Call out how much time you can commit per week this summer to GSoC and if you have any other commitments or vacations planned this summer.

Add a section on your prior experience, what you have done already on Derby, when you first joined the community, that you have your build and test environment set up and what issues you have been working on already. Mention the wiki updates you plan for making entering the community easier for new developers. Also include languages and relevant course work.

*Proposal:*


The proposal has been categorized in six phases as follows:
/1)Derby-5014: Tests should restore the timeout values to default after they are done running./

The tests to be fixed in this issue:
1) ErrorMessageTest.java 2) StressMultiTest.java 3) Sttest.java 4) SysinfoTest.java 5)DatabaseMetaDataTest.java 6) ResultSetsFromPreparedStatementTest.java

In these tests, the timout values (deadlock timeout, wait timout) are being changed when they start running , but they are not restored to appropriate values once the test finishes running.

The issue primarily requires changing the callable statements to set the properties with the help of DatabasePropertyTestSetup decorator. The lock timeouts in the above tests can be adjusted with the help of the function “setLockTimeouts (Test test, int deadlockTime, int waitTime)” in the class DatabasePropertyTestSetup. The class DatabasePropertyTestSetup, ensures that the old values of the properties, if changed before execution, are restored after the execution is over.

/2)Derby-4795: Starting network server with -ssl turns SSL off/

If no mode is specified while starting the network server with –ssl option
for example with “java -jar derbynet.jar start –ssl”, the SSL is turned off. Turning off ssl with an empty sslmode argument is unintuitive and is susceptible to errors.

A better approach, in the absence of sslmode argument would be to output an error and display the usage guidelines for sslmode such as:

    Error<error-code> : Missing <sslmode> argument

    Usage: -ssl <sslmode>

    SSLMODE can be any of the following:
    SSL_OFF: Turns off SSL. No SSL encryption would be used
    SSL_BASIC: Use basic SSL Encryption
    SSL_PEER_AUTHENTICATION: Use SSL Encryption with Peer Authentication

/3) Derby-4779: NPE while inserting into a table which has a generated column and an insert trigger/

The problem in this issue seems to be due to an invalid result set. The error originates from EmbedStatement.java where statement is executed. The inability to process the resultset becomes more clear with the error at GenericPreparedStatement.java:436 i.e. resultSet.open(). This propagates to the function getNextRowCore() in InsertResultSet.java which expects the source resultset to return the next row of the result set, which is required by the trigger to insert the rows in the table “dummy” as per the repro attached with this issue. As the row has not been obtained from the result set, it causes a NullPointerException to occur and in consequence closes the connection.

/4)Derby-4249: Create a simple store recovery test in JUnit/

Derby tests are categorized into two categories: harness test and JUnit test. The JUnit tests have the advantage that they can be run using JUnit’s TestRunner without explicitly needing any command line setup, the Test Suite class makes it easier to write and standardize the writing of JUnit test cases, hence is the need of converting the harness test cases to JUnit test cases.

The aim is to provide a basic framework which can be established as a model for conversion of harness store recovery tests to JUnit.
The test would do the following:
(a) Connect, create a table, commit and shutdown the database.
(b) fork a jvm, add one row, commit, add another row, exit the jvm.
(c) Reconnect with the first jvm and verify that the first row is there and the second is not.

This cycle would ensure that the database can recover from uncommitted changes as well as that the committed changes become persistent.

5)DERBY-3676 : Make the toString() method of Derby PreparedStatements print out SQL text with ? parameters replaced by the values that have been set so far

This issue already has a lot of discussion and patches behind it. The approach behind this phase would be to: a)Study the existing patches and discuss with the community the possible reasons due to which the patches were not committed. b)Identify a way to execute a query against the virtual table with new string representation. Also look into the possibility of modifications to the statement cache virtual table implementation so as to maintain the backward compatibility.

/6)Converting Recovery tests to JUnit (this doesn’t have a Jira issue as of now)/

This issue would act as a follow up of Derby-4249 to convert existing harness recovery tests to JUnit test using the model proposed in phase-4.
I plan to convert the following recovery tests to JUnit:
a)oc_rec1
b)oc_rec2
c)oc_rec3
d)oc_rec4

These recovery tests run in coordination. The test oc_rec1 creates a table, inserts and then deletes rows from it and commit it which is followed by a series of insertion of rows in the existing table in oc_rec2, oc_rec3 and oc_rec4. The tests oc_rec2 and oc_3 also create table and insert, delete, compress rows in it and leave the table thus produced in committed or uncommitted state which is tested by the next corresponding test (oc_rec3 for oc_rec2, oc_rec4 for oc_rec3) for recovery. The aim of this issue is to transform this behavior in JUnit using the recovery model proposed in phase 4 of this proposal.

TENTATIVE TIMELINE:

Note: The proposal with detailed timeline is posted at my blog[1]

1) Derby 5014: Tests should restore the timeout values to default after they are done running.
         Timeline: May 22- 5th June 2011 (15 days)

2) Derby-4795: Starting network server with -ssl turns SSL off
        Timeline: 6th June - 13th June 2011 ( 8 days)

3) Derby- 4779: NPE while inserting into a table which has a generated column and an insert trigger
       Timeline: : 14th June-26th June 2011 (15 days)

INTEGRATION TESTING PERIOD: June 27th - June 29th

4) Derby-4249:Create a simple store recovery test in JUnit
       Timeline: 30th June- 19th July (20 days)

5) DERBY-3676 : Make the toString() method of Derby PreparedStatements print out SQL text with ? parameters replaced by the values that have been set so far
      Timeline: 20th July- 2nd August (14 days)

6) Store Recovery test conversion
     Timeline: 3rd August -  15th August (  14 days)


[1] I have also made it available on this blog so that updating it becomes easy: http://siddharthsrivastava.blog.co.in/2011/03/28/gsoc-2011-derby-test-and-fix/

Thanks

Regards
Siddharth Srivastava

Reply via email to