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.

Reply via email to