I just committed HarnessJavaTest which is an experiment in running an old harness style '.java' test using the JUnit infrastructure. The old harness test (e.g. jdbcapi/connectionJdbc20.java) is unchanged and pass is indicated by comparing with its master file. This is very similar to the running of .sql scripts through JUnit using ScriptTestCase / LangScripts / NistScripts. As in those tests only a single master file is supported and no 'seding' takes place.

I also added a concrete implementation in JDBCHarnessJavaTest which runs '.java' tests from the jdbcapi package. It ran 17 jdbcapi '.java' without changes in embedded. (And a subset of those with client/server though that is not enabled in the committed version, I just need more investigation). It is not added in as part of suites.All and the tests listed in it continue to be run with the old harness as part of derbyall.

I'm looking at this approach as a quicker way to moving to a single (JUnit based) test infrastructure. While many tests have been converted, conversion of an individual test is slow, and thus the overall conversion rate is slow. The current number of tests to covert is still high, see:
http://wiki.apache.org/db-derby/KillDerbyTestHarness#head-a6e2c89e4bc09edf99f4a7bb6e12af333b6d01f2

While canon based tests are not ideal, I think they are acceptable as an interim step, especially if we manage to switch to a single infrastructure. A good goal would be to have the 10.3 release (mid year?) with a single infrastructure so that bug fixing and text cases are easy to merge between trunk and 10.3. Also running the tests in this way does not stop anyone from converting an individual test, it makes it no harder. In fact it *might* make it easier, as a it might be possible to incrementally convert tests and have them continue to run with a master file.

One benefit I see from this approach is that it may allow the community to focus on converting tests that cannot be run using this or other adapters, for example ones with multiple canon files, per jvm version for example. Those tend to be the tests that occupy the most time as the need to update multiple canons is costly. It will also centralized which environments a test runs in, one of the issues I'm seeing with the jdbcapi tests and client server is trying to figure out if a test is meant to run in c/s or not. Not clear from the old harness setup.

I'm going to see if I can get a similar high pass rate with .java tests in another folder, probably store. If so I will plan on changing the tests that can be run with an adapter to run as part of suites.All and not derbyall. I would also create a wiki page that listed all the old tests and if they are to be run with the harness or JUnit, as it could get hard figuring out what state an old harness test is in.

Feedback, thoughts?
Dan.

PS. HarnessJavaTest was surprisingly easy, the only setup required by ij to run one of the old tests was to set the ij.database system property. For J2ME different properties will need to be set, but that's only a few lines of code.



Reply via email to