From 905cdfdf665cbc2a029f2f33289fcc1c33013341 Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Tue, 25 Oct 2016 10:31:49 +0100 Subject: [PATCH] 8085192: java/rmi/activation/Activatable tests fail intermittently due to "Port already in use" Reviewed-by: rriggs, mli --- .../classes/sun/rmi/server/Activation.java | 5 + .../checkActivateRef/CheckActivateRef.java | 5 +- .../checkActivateRef/rmid.security.policy | 2 + .../checkActivateRef/security.policy | 2 + .../checkAnnotations/CheckAnnotations.java | 6 +- .../checkAnnotations/rmid.security.policy | 2 + .../checkAnnotations/security.policy | 3 + .../CheckImplClassLoader.java | 5 +- .../checkImplClassLoader/rmid.security.policy | 2 + .../checkImplClassLoader/security.policy | 3 + .../CheckRegisterInLog.java | 5 +- .../checkRegisterInLog/rmid.security.policy | 2 + .../checkRegisterInLog/security.policy | 3 + .../CreatePrivateActivatable.java | 5 +- .../rmid.security.policy | 2 + .../createPrivateActivable/security.policy | 3 + .../DownloadParameterClass.java | 5 +- .../manual.security.policy | 3 + .../rmid.security.policy | 2 + .../downloadParameterClass/security.policy | 3 + .../ElucidateNoSuchMethod.java | 5 +- .../rmid.security.policy | 3 + .../elucidateNoSuchMethod/security.policy | 3 + .../extLoadedImpl/ExtLoadedImplTest.java | 2 +- .../Activatable/extLoadedImpl/ext.sh | 2 +- .../forceLogSnapshot/ForceLogSnapshot.java | 5 +- .../forceLogSnapshot/rmid.security.policy | 2 + .../forceLogSnapshot/security.policy | 3 + .../inactiveGroup/InactiveGroup.java | 5 +- .../inactiveGroup/rmid.security.policy | 2 + .../Activatable/inactiveGroup/security.policy | 3 + .../LookupActivationSystem.java | 5 +- .../rmid.security.policy | 4 + .../nestedActivate/NestedActivate.java | 5 +- .../nestedActivate/rmid.security.policy | 2 + .../nestedActivate/security.policy | 3 + .../NonExistentActivatable.java | 5 +- .../rmid.security.policy | 2 + .../nonExistentActivatable/security.policy | 2 + .../RestartCrashedService.java | 5 +- .../rmid.security.policy | 2 + .../restartCrashedService/security.policy | 3 + .../restartLatecomer/RestartLatecomer.java | 5 +- .../restartLatecomer/rmid.security.policy | 2 + .../restartLatecomer/security.policy | 3 + .../restartService/RestartService.java | 5 +- .../restartService/rmid.security.policy | 2 + .../restartService/security.policy | 3 + .../ShutdownGracefully.java | 5 +- .../shutdownGracefully/rmid.security.policy | 2 + .../shutdownGracefully/security.policy | 3 + .../UnregisterInactive.java | 5 +- .../unregisterInactive/rmid.security.policy | 2 + .../unregisterInactive/security.policy | 3 + .../activateFails/ActivateFails.java | 5 +- .../activateFails/rmid.security.policy | 2 + .../activateFails/security.policy | 3 + .../RmidViaInheritedChannel.java | 11 ++ jdk/test/java/rmi/testlibrary/JavaVM.java | 49 +++++++- jdk/test/java/rmi/testlibrary/RMID.java | 54 ++++++++- .../rmi/testlibrary/RMIDSelectorProvider.java | 107 ++++++++++++++++++ jdk/test/java/rmi/testlibrary/TestParams.java | 2 + 62 files changed, 366 insertions(+), 48 deletions(-) create mode 100644 jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/rmid.security.policy create mode 100644 jdk/test/java/rmi/testlibrary/RMIDSelectorProvider.java diff --git a/jdk/src/java.rmi/share/classes/sun/rmi/server/Activation.java b/jdk/src/java.rmi/share/classes/sun/rmi/server/Activation.java index d1f73305a2d..a6ebbca80c0 100644 --- a/jdk/src/java.rmi/share/classes/sun/rmi/server/Activation.java +++ b/jdk/src/java.rmi/share/classes/sun/rmi/server/Activation.java @@ -1970,6 +1970,11 @@ public class Activation implements Serializable { AccessController.doPrivileged( new PrivilegedExceptionAction() { public Void run() throws IOException { + boolean disable = Boolean.getBoolean( + "sun.rmi.server.activation.disableErrRedirect"); + if (disable) + return null; + File file = Files.createTempFile("rmid-err", null).toFile(); PrintStream errStream = diff --git a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java index 32e07a4b796..85e22e4bea0 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java +++ b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java @@ -40,7 +40,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivateMe CheckActivateRef_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivateMe CheckActivateRef_Stub * @run main/othervm/policy=security.policy/timeout=240 -Djava.rmi.server.ignoreStubClasses=true CheckActivateRef * @run main/othervm/policy=security.policy/timeout=240 -Djava.rmi.server.ignoreStubClasses=false CheckActivateRef * @key intermittent @@ -118,7 +119,7 @@ public class CheckActivateRef // start an rmid. RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/rmid.security.policy index d6b78e552ef..cdf9ca15fae 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/rmid.security.policy @@ -2,4 +2,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.rmi.server.useDynamicProxies=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy index d847e377e90..e36b0a0a19e 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy @@ -38,4 +38,6 @@ grant { permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; permission java.lang.RuntimePermission "getClassLoader"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java index e99f62faba9..a5a69a5c88c 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java +++ b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java @@ -32,7 +32,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID MyRMI CheckAnnotations_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider MyRMI CheckAnnotations_Stub * @run main/othervm/policy=security.policy/timeout=480 CheckAnnotations */ @@ -77,7 +78,7 @@ public class CheckAnnotations // start an rmid. RMID.removeLog(); - rmid = RMID.createRMID(rmidOut, rmidErr, false); + rmid = RMID.createRMIDOnEphemeralPort(rmidOut, rmidErr, false); rmid.start(); /* Cause activation groups to have a security policy that will @@ -228,6 +229,7 @@ public class CheckAnnotations return false; } + // just make sure that last two strings are what we expect. if (execOut.equals("ExecGroup-" + iteration) && (new String(destOut.substring(0,4)).equals("out" + diff --git a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy index 572e29ce309..ef36478e900 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy @@ -28,4 +28,7 @@ grant { // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java index 46cadd1fd45..f01bcad60b1 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java +++ b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java @@ -31,7 +31,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider * MyRMI ActivatableImpl ActivatableImpl ActivatableImpl_Stub * @run main/othervm/policy=security.policy/timeout=150 CheckImplClassLoader */ @@ -80,7 +81,7 @@ public class CheckImplClassLoader { TestParams.defaultSecurityManager); RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); System.err.println("Create activation group in this VM"); diff --git a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy index 300b2fc4f71..82bea323573 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy @@ -39,4 +39,7 @@ grant { // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java index 8939f6764e8..6053eddec6f 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java +++ b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/CheckRegisterInLog.java @@ -31,7 +31,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary * ActivateMe CheckRegisterInLog_Stub * @run main/othervm/policy=security.policy/timeout=240 CheckRegisterInLog */ @@ -99,7 +100,7 @@ public class CheckRegisterInLog * Start up activation system daemon "rmid". */ RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy index 0c257a26879..c8a24a64de1 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy @@ -31,4 +31,7 @@ grant { // allow exporting object with non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java index 8ac5c1ecaa6..29a662176d4 100644 --- a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java +++ b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java @@ -31,7 +31,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivateMe + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivateMe * @run main/othervm/policy=security.policy/timeout=240 CreatePrivateActivatable */ @@ -103,7 +104,7 @@ public class CreatePrivateActivatable // start an rmid. RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy index 0c257a26879..c8a24a64de1 100644 --- a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy @@ -31,4 +31,7 @@ grant { // allow exporting object with non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java index 7e63afba1ae..b3bafdb1c32 100644 --- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java +++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/DownloadParameterClass.java @@ -35,7 +35,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary * Foo FooReceiverImpl FooReceiverImpl_Stub Bar * @run main/othervm/policy=security.policy/timeout=240 DownloadParameterClass */ @@ -90,7 +91,7 @@ public class DownloadParameterClass { try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/manual.security.policy b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/manual.security.policy index d30ea1f3ea2..79d8bb32ce1 100644 --- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/manual.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/manual.security.policy @@ -34,4 +34,7 @@ grant { // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy index de2a5cf74e8..f37bf9525a5 100644 --- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy @@ -35,4 +35,7 @@ grant { // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java index ff741b0bd0e..89f3c90b24c 100644 --- a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java +++ b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/ElucidateNoSuchMethod.java @@ -31,7 +31,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivateMe ElucidateNoSuchMethod_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivateMe ElucidateNoSuchMethod_Stub * @run main/othervm/policy=security.policy/timeout=240 ElucidateNoSuchMethod */ @@ -91,7 +92,7 @@ public class ElucidateNoSuchMethod try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/rmid.security.policy index 0e43c5d37ab..53ed1f0bd93 100644 --- a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/rmid.security.policy @@ -1,4 +1,7 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy index 2348c442bb5..fd3dd828d23 100644 --- a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy @@ -37,4 +37,7 @@ grant { // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ExtLoadedImplTest.java b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ExtLoadedImplTest.java index c46baeaf5e7..96b2f7d9421 100644 --- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ExtLoadedImplTest.java +++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ExtLoadedImplTest.java @@ -37,7 +37,7 @@ public class ExtLoadedImplTest { try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); Properties p = new Properties(); p.put("java.security.policy", diff --git a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh index 546d693b962..224133930f1 100644 --- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh +++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/ext.sh @@ -27,7 +27,7 @@ # loader, the context class loader should remain unchanged (i.e., not be # set to the impl's class loader) when the impl is activated. # @library ../../../testlibrary -# @build TestLibrary RMID ActivationLibrary +# @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary # @build ExtLoadedImplTest ExtLoadedImpl ExtLoadedImpl_Stub CheckLoader # @run shell ext.sh diff --git a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java index 53710ceb971..2b97650a599 100644 --- a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java +++ b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/ForceLogSnapshot.java @@ -31,7 +31,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary * ActivateMe ForceLogSnapshot_Stub * @run main/othervm/policy=security.policy/timeout=640 ForceLogSnapshot */ @@ -129,7 +130,7 @@ public class ForceLogSnapshot SNAPSHOT_INTERVAL; RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.addOptions(new String[] {option, "-Djava.compiler="}); rmid.start(); diff --git a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy index 0c257a26879..c8a24a64de1 100644 --- a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy @@ -31,4 +31,7 @@ grant { // allow exporting object with non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java index fdce05cbc39..bf5d45d69e9 100644 --- a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java +++ b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/InactiveGroup.java @@ -33,7 +33,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary ActivateMe InactiveGroup_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary ActivateMe InactiveGroup_Stub * @run main/othervm/policy=security.policy/timeout=240 InactiveGroup */ @@ -101,7 +102,7 @@ public class InactiveGroup try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy index 0c257a26879..c8a24a64de1 100644 --- a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy @@ -31,4 +31,7 @@ grant { // allow exporting object with non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java index 4770f298919..8ed9c763b32 100644 --- a/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java +++ b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java @@ -33,7 +33,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary * @run main/othervm/timeout=240 LookupActivationSystem */ @@ -55,7 +56,7 @@ public class LookupActivationSystem implements Remote, Serializable { try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); System.err.println("look up activation system"); diff --git a/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/rmid.security.policy new file mode 100644 index 00000000000..c488914b790 --- /dev/null +++ b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/rmid.security.policy @@ -0,0 +1,4 @@ +grant { + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; +}; diff --git a/jdk/test/java/rmi/activation/Activatable/nestedActivate/NestedActivate.java b/jdk/test/java/rmi/activation/Activatable/nestedActivate/NestedActivate.java index a1ddf4d9ed4..b1c841dc256 100644 --- a/jdk/test/java/rmi/activation/Activatable/nestedActivate/NestedActivate.java +++ b/jdk/test/java/rmi/activation/Activatable/nestedActivate/NestedActivate.java @@ -31,7 +31,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary ActivateMe NestedActivate_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary ActivateMe NestedActivate_Stub * @run main/othervm/policy=security.policy/timeout=240 NestedActivate */ @@ -101,7 +102,7 @@ public class NestedActivate try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/nestedActivate/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/nestedActivate/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/nestedActivate/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/nestedActivate/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy b/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy index 7349f99226e..ac03704a625 100644 --- a/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy @@ -31,4 +31,7 @@ grant { // allow exporting of non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java index 1e422e3697a..5074ac52bc5 100644 --- a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java +++ b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/NonExistentActivatable.java @@ -32,7 +32,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary * ActivateMe NonExistentActivatable_Stub * @run main/othervm/policy=security.policy/timeout=240 NonExistentActivatable */ @@ -91,7 +92,7 @@ public class NonExistentActivatable try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy index 74a40dd36af..c8a24a64de1 100644 --- a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy @@ -32,4 +32,6 @@ grant { // allow exporting object with non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java index 0e8e7003cff..526d142af71 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java +++ b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/RestartCrashedService.java @@ -32,7 +32,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivateMe RestartCrashedService_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivateMe RestartCrashedService_Stub * @run main/othervm/policy=security.policy/timeout=240 RestartCrashedService */ @@ -119,7 +120,7 @@ public class RestartCrashedService try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy index 73fdf10507c..0882def59ad 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy @@ -28,4 +28,7 @@ grant { // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java index 1ce28b26d6c..499ef6ce5d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java +++ b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/RestartLatecomer.java @@ -31,7 +31,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary * RestartLatecomer RestartLatecomer_Stub * @run main/othervm/policy=security.policy/timeout=240 RestartLatecomer */ @@ -166,7 +167,7 @@ public class RestartLatecomer try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy index c30b6e6c9a8..b0aa6518e0f 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy @@ -33,4 +33,7 @@ grant { // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/restartService/RestartService.java b/jdk/test/java/rmi/activation/Activatable/restartService/RestartService.java index 2d1aa50e56e..792c02f208c 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartService/RestartService.java +++ b/jdk/test/java/rmi/activation/Activatable/restartService/RestartService.java @@ -32,7 +32,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary ActivateMe RestartService_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary ActivateMe RestartService_Stub * @run main/othervm/policy=security.policy/timeout=240 RestartService */ @@ -129,7 +130,7 @@ public class RestartService try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/Activatable/restartService/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/restartService/rmid.security.policy index fd1a2096bfd..0471fc80946 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartService/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartService/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/restartService/security.policy b/jdk/test/java/rmi/activation/Activatable/restartService/security.policy index c30b6e6c9a8..b0aa6518e0f 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartService/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartService/security.policy @@ -33,4 +33,7 @@ grant { // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java index d2c6a454995..743e2338ba5 100644 --- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java +++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java @@ -32,7 +32,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider * TestSecurityManager RegisteringActivatable ShutdownGracefully_Stub * @run main/othervm/policy=security.policy/timeout=700 ShutdownGracefully */ @@ -76,7 +77,7 @@ public class ShutdownGracefully // start an rmid. RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); // rmid needs to run with a security manager that // simulates a log problem; rmid should also snapshot diff --git a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/rmid.security.policy index c7915ad42ea..b1f98628cf8 100644 --- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/rmid.security.policy @@ -2,4 +2,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=java.lang.SecurityManager"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; permission com.sun.rmi.rmid.ExecOptionPermission "-Ddummyname=dummyvalue"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy index 257bb5369a3..b4418a72c3e 100644 --- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy @@ -25,4 +25,7 @@ grant { // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java index 08f717f78d1..2ff66718bf4 100644 --- a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java +++ b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/UnregisterInactive.java @@ -32,7 +32,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary ActivateMe UnregisterInactive_Stub + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary ActivateMe UnregisterInactive_Stub * @run main/othervm/policy=security.policy/timeout=240 UnregisterInactive */ @@ -89,7 +90,7 @@ public class UnregisterInactive try { RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); System.err.println("Creating descriptor"); diff --git a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/rmid.security.policy b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/rmid.security.policy +++ b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy index 6fd298d6a2b..63fecad764c 100644 --- a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy @@ -28,4 +28,7 @@ grant { // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java index efd6c3095ab..604ee9e5a0a 100644 --- a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java +++ b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/ActivateFails.java @@ -35,7 +35,8 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary RMID ActivationLibrary + * java.base/sun.nio.ch + * @build TestLibrary RMID RMIDSelectorProvider ActivationLibrary * ActivateMe ActivateFails_Stub ShutdownThread * @run main/othervm/java.security.policy=security.policy/timeout=240 ActivateFails */ @@ -93,7 +94,7 @@ public class ActivateFails * First run "rmid" and wait for it to start up. */ RMID.removeLog(); - rmid = RMID.createRMID(); + rmid = RMID.createRMIDOnEphemeralPort(); rmid.start(); /* Cause activation groups to have a security policy that will diff --git a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/rmid.security.policy b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/rmid.security.policy index 0e43c5d37ab..ca4b8e244d9 100644 --- a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/rmid.security.policy +++ b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/rmid.security.policy @@ -1,4 +1,6 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy index 572e29ce309..ef36478e900 100644 --- a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy +++ b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy @@ -28,4 +28,7 @@ grant { // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + permission java.lang.RuntimePermission "selectorProvider"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; }; diff --git a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java index 272f9f42321..4d27bc8fb0c 100644 --- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java +++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java @@ -51,6 +51,8 @@ import java.rmi.activation.ActivationSystem; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; +import static java.net.StandardSocketOptions.SO_REUSEADDR; +import static java.net.StandardSocketOptions.SO_REUSEPORT; public class RmidViaInheritedChannel implements Callback { private static final Object lock = new Object(); @@ -185,6 +187,15 @@ public class RmidViaInheritedChannel implements Callback { */ channel = ServerSocketChannel.open(); ServerSocket serverSocket = channel.socket(); + + // Enable SO_REUSEADDR before binding + serverSocket.setOption(SO_REUSEADDR, true); + + // Enable SO_REUSEPORT, if supported, before binding + if (serverSocket.supportedOptions().contains(SO_REUSEPORT)) { + serverSocket.setOption(SO_REUSEPORT, true); + } + serverSocket.bind( new InetSocketAddress(InetAddress.getLocalHost(), TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT)); diff --git a/jdk/test/java/rmi/testlibrary/JavaVM.java b/jdk/test/java/rmi/testlibrary/JavaVM.java index c8099346972..04f1589262d 100644 --- a/jdk/test/java/rmi/testlibrary/JavaVM.java +++ b/jdk/test/java/rmi/testlibrary/JavaVM.java @@ -21,8 +21,11 @@ * questions. */ +import java.io.BufferedReader; +import java.io.DataInputStream; import java.io.File; import java.io.IOException; +import java.io.InputStreamReader; import java.io.OutputStream; import java.util.Arrays; import java.util.StringTokenizer; @@ -39,8 +42,8 @@ public class JavaVM { protected Process vm = null; private String classname = ""; - private String args = ""; - private String options = ""; + protected String args = ""; + protected String options = ""; private OutputStream outputStream = System.out; private OutputStream errorStream = System.err; private String policyFileName = null; @@ -113,7 +116,7 @@ public class JavaVM { /** * Exec the VM as specified in this object's constructor. */ - public void start() throws IOException { + private void start0() throws IOException { if (vm != null) throw new IllegalStateException("JavaVM already started"); @@ -152,12 +155,50 @@ public class JavaVM { mesg("command = " + Arrays.asList(javaCommand).toString()); vm = Runtime.getRuntime().exec(javaCommand); + } - /* output from the execed process may optionally be captured. */ + public void start() throws IOException { + start0(); + + /* output from the exec'ed process may optionally be captured. */ outPipe = StreamPipe.plugTogether(vm.getInputStream(), this.outputStream); errPipe = StreamPipe.plugTogether(vm.getErrorStream(), this.errorStream); } + public int startAndGetPort() throws IOException { + start0(); + + int port = -1; + if (options.contains("java.nio.channels.spi.SelectorProvider=RMIDSelectorProvider")) { + // Obtain the server socket channel's ephemeral port number of the + // child rmid process. + BufferedReader reader = new BufferedReader( + new InputStreamReader(vm.getInputStream())); + String s; + while ((s = reader.readLine()) != null) { + System.out.println(s); + int i = s.indexOf(RMID.EPHEMERAL_MSG); + if (i != -1) { + String v = s.substring(RMID.EPHEMERAL_MSG.length()); + port = Integer.valueOf(v); + break; + } + } + if (port == -1) { + // something failed + reader = new BufferedReader(new InputStreamReader(vm.getErrorStream())); + while ((s = reader.readLine()) != null) + System.err.println(s); + } + } + + /* output from the exec'ed process may optionally be captured. */ + outPipe = StreamPipe.plugTogether(vm.getInputStream(), this.outputStream); + errPipe = StreamPipe.plugTogether(vm.getErrorStream(), this.errorStream); + + return port; + } + public void destroy() { if (vm != null) { vm.destroy(); diff --git a/jdk/test/java/rmi/testlibrary/RMID.java b/jdk/test/java/rmi/testlibrary/RMID.java index 1ae6cf64bab..f83225f4d43 100644 --- a/jdk/test/java/rmi/testlibrary/RMID.java +++ b/jdk/test/java/rmi/testlibrary/RMID.java @@ -49,20 +49,31 @@ public class RMID extends JavaVM { public static String MANAGER_OPTION="-Djava.security.manager="; - /** Test port for rmid */ - private final int port; + /** + * Test port for rmid. + * + * May initially be 0, which means that the child rmid process will choose + * an ephemeral port and report it back to the parent process. This field + * will then be set to the child rmid's ephemeral port value. + */ + private volatile int port; + //private final boolean ephemeralPort /** Initial log name */ protected static String log = "log"; /** rmid's logfile directory; currently must be "." */ protected static String LOGDIR = "."; + /** The output message from the child rmid process that directly precedes + * the ephemeral port number.*/ + public static final String EPHEMERAL_MSG = "RmidSelectorProvider-listening-On:"; + private static void mesg(Object mesg) { System.err.println("RMID: " + mesg.toString()); } /** make test options and arguments */ - private static String makeOptions(boolean debugExec) { + private static String makeOptions(int port, boolean debugExec) { String options = " -Dsun.rmi.server.activation.debugExec=" + debugExec; @@ -87,6 +98,17 @@ public class RMID extends JavaVM { // to avoid spurious timeouts on slow machines. options += " -Dsun.rmi.activation.execTimeout=60000"; + if (port == 0) { + // Ephemeral port, so have the rmid child process create the + // server socket channel and report its port number, over stdin. + options += " -classpath " + TestParams.testClassPath; + options += " --add-exports=java.base/sun.nio.ch=ALL-UNNAMED"; + options += " -Djava.nio.channels.spi.SelectorProvider=RMIDSelectorProvider"; + + // Disable redirection of System.err to /tmp + options += " -Dsun.rmi.server.activation.disableErrRedirect=true"; + } + return options; } @@ -107,7 +129,8 @@ public class RMID extends JavaVM { String args = " -log " + (new File(LOGDIR, log)).getAbsolutePath(); - if (includePortArg) { + // 0 = ephemeral port, do not include an explicit port number + if (includePortArg && port != 0) { args += " -port " + port; } @@ -160,7 +183,7 @@ public class RMID extends JavaVM { boolean debugExec, boolean includePortArg, int port) { - String options = makeOptions(debugExec); + String options = makeOptions(port, debugExec); String args = makeArgs(includePortArg, port); RMID rmid = new RMID("sun.rmi.server.Activation", options, args, out, err, port); @@ -169,6 +192,17 @@ public class RMID extends JavaVM { return rmid; } + public static RMID createRMIDOnEphemeralPort() { + return createRMID(System.out, System.err, true, true, 0); + } + + public static RMID createRMIDOnEphemeralPort(OutputStream out, + OutputStream err, + boolean debugExec) + { + return createRMID(out, err, debugExec, true, 0); + } + /** * Private constructor. RMID instances should be created @@ -247,7 +281,10 @@ public class RMID extends JavaVM { // a well recognized exception (port already in use...). mesg("Starting rmid on port " + port + "."); - super.start(); + int p = super.startAndGetPort(); + if (p != -1) + port = p; + mesg("Started rmid on port " + port + "."); // int slopFactor = 1; // try { @@ -271,8 +308,11 @@ public class RMID extends JavaVM { try { int status = vm.exitValue(); + waitFor(TIMEOUT_SHUTDOWN_MS); TestLibrary.bomb("Rmid process exited with status " + status + " after " + (System.currentTimeMillis() - startTime) + "ms."); + } catch (InterruptedException | TimeoutException e) { + mesg(e); } catch (IllegalThreadStateException ignore) { } // The rmid process is alive; check to see whether @@ -307,6 +347,8 @@ public class RMID extends JavaVM { */ public void restart() throws IOException { destroy(); + options = makeOptions(port, true); + args = makeArgs(true, port); start(); } diff --git a/jdk/test/java/rmi/testlibrary/RMIDSelectorProvider.java b/jdk/test/java/rmi/testlibrary/RMIDSelectorProvider.java new file mode 100644 index 00000000000..4b9f09264d7 --- /dev/null +++ b/jdk/test/java/rmi/testlibrary/RMIDSelectorProvider.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.*; +import java.net.InetSocketAddress; +import java.net.ProtocolFamily; +import java.nio.channels.Channel; +import java.nio.channels.DatagramChannel; +import java.nio.channels.Pipe; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.channels.spi.AbstractSelector; +import java.nio.channels.spi.SelectorProvider; +import static java.net.StandardSocketOptions.SO_REUSEADDR; +import static java.net.StandardSocketOptions.SO_REUSEPORT; + +/** + * A SelectorProvider, that can be loaded by the child rmid process, whose + * inheritedChannel method will create a new server socket channel and report + * it back to the parent process, over stdout. + */ +public class RMIDSelectorProvider extends SelectorProvider { + + private final SelectorProvider provider; + private ServerSocketChannel channel; + + public RMIDSelectorProvider() { + provider = sun.nio.ch.DefaultSelectorProvider.create(); + } + + public DatagramChannel openDatagramChannel() + throws IOException + { + return provider.openDatagramChannel(); + } + + public DatagramChannel openDatagramChannel(ProtocolFamily family) + throws IOException + { + return provider.openDatagramChannel(family); + } + + public Pipe openPipe() + throws IOException + { + return provider.openPipe(); + } + + public AbstractSelector openSelector() + throws IOException + { + return provider.openSelector(); + } + + public ServerSocketChannel openServerSocketChannel() + throws IOException + { + return provider.openServerSocketChannel(); + } + + public SocketChannel openSocketChannel() + throws IOException + { + return provider.openSocketChannel(); + } + + public synchronized Channel inheritedChannel() throws IOException { + System.out.println("RMIDSelectorProvider.inheritedChannel"); + if (channel == null) { + // Create and bind a new server socket channel + channel = ServerSocketChannel.open(); + + // Enable SO_REUSEADDR before binding + channel.setOption(SO_REUSEADDR, true); + + // Enable SO_REUSEPORT, if supported, before binding + if (channel.supportedOptions().contains(SO_REUSEPORT)) { + channel.setOption(SO_REUSEPORT, true); + } + + channel.bind(new InetSocketAddress(0)); + + System.out.println(RMID.EPHEMERAL_MSG + channel.socket().getLocalPort()); + } + return channel; + } +} diff --git a/jdk/test/java/rmi/testlibrary/TestParams.java b/jdk/test/java/rmi/testlibrary/TestParams.java index 1d98e174084..5f60efbd639 100644 --- a/jdk/test/java/rmi/testlibrary/TestParams.java +++ b/jdk/test/java/rmi/testlibrary/TestParams.java @@ -34,6 +34,7 @@ public class TestParams { /** variables that hold value property values */ public static final String testSrc; public static final String testClasses; + public static final String testClassPath; /** name of default security policy for test JVM */ public static final String defaultPolicy; @@ -57,6 +58,7 @@ public class TestParams { static { testSrc = TestLibrary.getProperty("test.src", "."); testClasses = TestLibrary.getProperty("test.classes", "."); + testClassPath = TestLibrary.getProperty("test.class.path", "."); String dp = TestLibrary.getProperty("java.security.policy", null); if (dp == null) {