Unit tests for OpenJDK?

Alan Bateman Alan.Bateman at oracle.com
Sun Apr 27 10:15:42 UTC 2014

On 27/04/2014 09:55, Harry Simons wrote:
> Hi,
> I downloaded OpenJDK 7u40 source bundle, and was expecting to find in it
> tons and tons of unit tests for, well, at least all public methods of all
> of its public classes.
> However, under the openjdk/jdk/test/ directory of the downloaded bundle,
> are sitting merely *regression* tests -- or, tests created for *specific*
> bugs.
> I'd like to know if OpenJDK comes with its unit tests or not? And, if yes,
> where can I find them? If not, why are they not being shared openly.
> Context: I'm writing a custom file system using the Java NIO2 API. To test
> it fully, I'd like to ensure that it at least passes the unit tests of the
> JDK itself. Right now, I don't know what all tests to create, even the
> so-called corner cases appear to be huge in number!
The test tree can be difficult to grok when you initially approach it 
but at a high level it has a mix of unit, regression, stress and other 
tests. For historical reasons that pre-date OpenJDK, the percentage, 
quality and coverage of each type depends wildly on the area. For older 
areas of the platform then you might not find much that resembles a 
traditional unit test. The reason for this is that development in those 
areas at the time mostly relied on other test suites (JCK for 
conformance tests, unit and functional test suites that resided 
elsewhere, these are test suites are not in OpenJDK). In more recent 
time it has become practice to push the tests for new features and new 
APIs with the feature/API itself. So you should see that newer areas do 
have a lot more unit tests. They might not be unit tests in the style of 
JUnit or TestNG tests that you might expect and it does takes a bit of 
getting used to the jtreg test runner. As to the number of regression 
tests for bugs then this is just the long standing rule that all bug 
fixes should come with test coverage unless there is a good reason not 
to. In some areas then bug fixes drive improvements and better test 
coverage to existing tests, in order areas then tests are just added to 
exercise the specific issue. So definitely a lot of inconsistency to 
baffle new people. Stuart Marks and I recorded a couple of sessions on 
the OpenJDK tests some time ago that I think on are YouTube if you can 
find them.

As regards the tests for the NIO file system area then then you are in 
jdk/test/java/nio/file. They are 12k+ lines of test code that provide 
reasonable coverage on all platforms. They pre-date the use of TestNG in 
OpenJDK so might not be initially obvious how you run, that just takes 
getting used to. That said, those tests are focused on the 
default/platform file system, they are not tests that will help much 
with a custom file system provider. You'll see the zip provider that we 
have in the JDK has its own tests. The reason for this is that you 
quickly get into specifies when testing a custom provider (the syntax of 
file paths is specific to the file system provider for example). This is 
a topic to bring up on nio-dev where there are others working on other 
file system providers. There might be opportunities to collaborate or 
contribute tests for example.


More information about the discuss mailing list