Volker,
From the history books, initially there was only "samevm" and "othervm"
mode and "othervm" mode was the default.
"samevm" mode was problematic in the face of bad tests (especially bad
tests on Windows) and only the langtools test suite evolved to the point
where we recommended the use of "samevm" mode.
As a result, "agentvm" mode was added, which is <marketing-slogan>like
samevm, but better</marketing-slogan>. It has worked well for most
tests, but as you have noticed, does not work well if a test tries to
exit the JVM. Those tests need some amount of TLC if they are to
leverage "agentvm" mode.
You can use othervm.dirs in TEST.ROOT, but that was added as a
pragmatic, stop gap measure, to faciitate running most of the tests in
the faster "agentvm" mode, while allowing some older parts of the test
suite to continue running in the slower "othervm" world.
The core-libs team have led an effort to clean up the core-libs tests
and to provide the test/Makefile as a standard way of running the
tests. It seems like it is time to embark on a similar effort for the
client tests.
-- Jon
On 12/10/2013 07:37 AM, Volker Simonis wrote:
Hi,
when running the
com/sun/java/swing/plaf/windows/8016551/bug8016551.java regression
test with the newest version of jtreg (build from source) in agentvm
mode I get the following error:
----------System.err:(33/2049)----------
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1300)
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1275)
at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1350)
at bug8016551.main(bug8016551.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at
com.sun.javatest.regtest.MainAction$SameVMRunnable.run(MainAction.java:754)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.SecurityException: System.exit() forbidden by JT Harness
at
com.sun.javatest.JavaTestSecurityManager.checkExit(JavaTestSecurityManager.java:117)
at javax.swing.JFrame.setDefaultCloseOperation(JFrame.java:395)
at bug8016551$1.run(bug8016551.java:57)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at
java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
If the test is run in othervm mode it succeeds.
I looked at this problem a litter loser and found out the following:
- there are 99 test which use JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE)
- they are in java/awt (15), javax/swing (79), sun/java2d (3),
javax/imageio/plugins/gif/GifTransparencyTest.java
(setDefaultCloseOperation present but never called) and
com/sun/java/swing/plaf/windows/8016551/bug8016551.java
- all test in java/awt and sun/java2d are always executed in othervm
mode anyway (because of 'othervm.dirs=java/awt ..' in TEST.ROOT)
Now I'm not sure if this security-exception is right at this place -
i.e. if jtreg/jtharness work as expected here.
If yes and if there's no option/workaround to switch this behaviour
off, we should either add 'javax/swing' as well to the 'othervm.dirs'
list in TEST.ROOT and explicitly flag the remain test to require
othervm mode by adding the corresponding '@run main/othervm' tag to
the java source file.
If adding 'javax/swing' to 'othervm.dirs' is considered to general, we
would have to explicitly flag each single test with '@run
main/othervm'.
What do you think?
Volker
PS: there are 208 test which call System.exit() directly. I haven't
analysed them until now, but the same reasoning applies for them as
well.