RFR (S): 8006413: Add utility classes for writing better multiprocess tests in jtreg
Christian Törnqvist
christian.tornqvist at oracle.com
Thu Jan 17 06:01:37 PST 2013
> Is it possible to have a library like this one included into jtreg and available for everybody ?
The problem with this is that suddenly the tests have a dependency on jtreg. One (of many) nice things with the jtreg tests is that they can be run as a normal java program without the need to involve jtreg, making debugging and troubleshooting them a lot easier.
Best regards,
Christian
-----Original Message-----
From: Dmitry Samersoff
Sent: den 17 januari 2013 14:20
To: Stuart Marks
Cc: Christian Törnqvist; hotspot-dev at openjdk.java.net; Jonathan Gibbons
Subject: Re: RFR (S): 8006413: Add utility classes for writing better multiprocess tests in jtreg
Stuart,
> I work on the JDK core libraries. It turns out that there is a similar
> library used for testing RMI.
I guess if we take close look to exising tests we would find couple more copies of the same ideas.
Is it possible to have a library like this one included into jtreg and available for everybody ?
-Dmitry
On 2013-01-17 01:54, Stuart Marks wrote:
> Hi everybody,
>
> I work on the JDK core libraries. It turns out that there is a similar
> library used for testing RMI. Take a look at
> jdk/test/java/rmi/testlibrary. It's been around for quite some time
> already, but I've been doing some maintenance on it recently. (Also,
> it still needs more work.)
>
> Since the RMI library is in the jdk repo and these test utilities are
> in hotspot, it seems like sharing of code might be difficult. But we
> might want to compare notes. Here are some observations and comments
> (though not an actual code review).
>
> * The use of a pair of threads (StreamPumper) to collect output from
> the subprocess is very similar to what RMI does. See the StreamPipe
> class in RMI's test library, which are used by the JavaVM utility
> class. One thing I did do recently was to make sure that the
> subprocess is waited for and the threads are joined. This hadn't been
> done before, leading to race conditions where some subprocess output was dropped.
>
> * Since these threads are specifically joined, I'm not sure of the
> utility of making them daemon threads.
>
> * My style in writing test code and test library code is to be quite
> verbose about everything and to check every possible error condition.
> Nothing is worse than seeing a test fail and not having enough
> information in the log to find out why. Actually, I can think of
> something worse: having a test pass erroneously because some error
> condition wasn't checked. (Yes, this has happened.)
>
> * Another style point is that I think it's OK for test library code
> just to throw exceptions out to the caller. My test code usually has
> 'throws IOException' or even 'throws Exception' on most of the
> methods, including main, so having test library code throw checked
> exceptions is reasonable. Jtreg will catch exceptions thrown from main and log them.
> Usually you want tests to fail quickly at the point of error. So, I
> concur with Vitaly's concern about ProcessTools handling of
> IOException and about letting interrupts propagate.
>
> * Actually I have a suggestion from Mandy Chung for RMI's StreamPipe
> threads to catch exceptions and report them back to their "parent"
> JavaVM. This is probably a rare occurrence but it does ensure that any
> errors that occur here won't go unnoticed. See JDK-8005827 (
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8005827 )
>
> * Regarding jtreg and test library code, it's pretty simple to use. In
> each test that uses the library code, one adds the @library tag to
> declare the library. It's probably a good idea to add an @build tag to
> build each library class that's used in the test. Things usually work
> in the absence of @build tags, because of implicit compilation, but
> it's kind of fragile.
>
> Anyway, I just wanted to share some notes and ideas.
>
> s'marks
>
>
> On 1/16/13 4:34 AM, Christian Törnqvist wrote:
>> Hi everyone,
>>
>> ?
>>
>> This RFE adds a few utility classes to make it a bit easier to write
>> multi-process tests in jtreg, webrev can be found at
>> http://cr.openjdk.java.net/~brutisso/8006413/webrev.00/
>>
>> ?
>>
>> Thanks,
>>
>> Christian
>>
--
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* Give Rabbit time, and he'll always get the answer
More information about the hotspot-dev
mailing list