8019538: TEST_BUG: java/rmi/activation/rmidViaInheritedChannel tests may fail
Reviewed-by: rriggs, chegar
--- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Wed Nov 30 17:15:58 2016 -0800
+++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java Wed Nov 30 17:43:18 2016 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -93,9 +93,8 @@
obj = new CallbackImpl();
Callback proxy =
(Callback) UnicastRemoteObject.exportObject(obj, 0);
- Registry registry =
- LocateRegistry.createRegistry(
- TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT);
+ Registry registry = TestLibrary.createRegistryOnEphemeralPort();
+ int registryPort = TestLibrary.getRegistryPort(registry);
registry.bind("Callback", proxy);
/*
@@ -107,7 +106,8 @@
TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_ACTIVATION_PORT);
rmid.addOptions(
"--add-exports=java.base/sun.nio.ch=ALL-UNNAMED",
- "-Djava.nio.channels.spi.SelectorProvider=InheritedChannelNotServerSocket$SP");
+ "-Djava.nio.channels.spi.SelectorProvider=InheritedChannelNotServerSocket$SP",
+ "-Dtest.java.rmi.rmidViaInheritedChannel.registry.port=" + registryPort);
rmid.start();
/*
@@ -181,8 +181,9 @@
*/
try {
System.err.println("notify test...");
- Registry registry =
- LocateRegistry.getRegistry(TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT);
+ int registryPort = Integer.getInteger(
+ "test.java.rmi.rmidViaInheritedChannel.registry.port", 0);
+ Registry registry = LocateRegistry.getRegistry(registryPort);
Callback obj = (Callback) registry.lookup("Callback");
obj.notifyTest();
} catch (NotBoundException nbe) {
--- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java Wed Nov 30 17:15:58 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2003, 2015, 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.
- */
-
-/* @test
- * @bug 4295885 6824141
- * @summary rmid should be startable from inetd
- * @author Ann Wollrath
- *
- * @library ../../testlibrary
- * @modules java.base/sun.nio.ch
- * java.rmi/sun.rmi.registry
- * java.rmi/sun.rmi.server
- * java.rmi/sun.rmi.transport
- * java.rmi/sun.rmi.transport.tcp
- * @build TestLibrary RMID ActivationLibrary
- * @run main/othervm/timeout=240 RmidViaInheritedChannel
- * @key intermittent
- */
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.ProtocolFamily;
-import java.nio.channels.*;
-import java.nio.channels.spi.*;
-import java.rmi.Remote;
-import java.rmi.NotBoundException;
-import java.rmi.activation.ActivationGroup;
-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();
- private static boolean notified = false;
-
- private RmidViaInheritedChannel() {}
-
- public void notifyTest() {
- synchronized (lock) {
- notified = true;
- System.err.println("notification received.");
- lock.notifyAll();
- }
- }
-
- public static void main(String[] args) throws Exception {
- System.setProperty("java.rmi.activation.port",
- Integer.toString(TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT));
- RMID rmid = null;
- Callback obj = null;
-
- try {
- /*
- * Export callback object and bind in registry.
- */
- System.err.println("export callback object and bind in registry");
- obj = new RmidViaInheritedChannel();
- Callback proxy = (Callback)
- UnicastRemoteObject.exportObject(obj, 0);
- Registry registry =
- LocateRegistry.createRegistry(
- TestLibrary.RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT);
- registry.bind("Callback", proxy);
-
- /*
- * Start rmid.
- */
- System.err.println("start rmid with inherited channel");
- RMID.removeLog();
- rmid = RMID.createRMID(System.out, System.err, true, false,
- TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT);
- rmid.addOptions(
- "--add-exports=java.base/sun.nio.ch=ALL-UNNAMED",
- "-Djava.nio.channels.spi.SelectorProvider=RmidViaInheritedChannel$RmidSelectorProvider");
- if (System.getProperty("os.name").startsWith("Windows") &&
- System.getProperty("os.version").startsWith("5."))
- {
- /* Windows XP/2003 or older
- * Need to expand ephemeral range to include RMI test ports
- */
- rmid.addOptions(new String[]{
- "-Djdk.net.ephemeralPortRange.low=1024",
- "-Djdk.net.ephemeralPortRange.high=64000"
- });
- }
- rmid.start();
-
- /*
- * Get activation system and wait to be notified via callback
- * from rmid's selector provider.
- */
- System.err.println("get activation system");
- ActivationSystem system = ActivationGroup.getSystem();
- System.err.println("ActivationSystem = " + system);
- synchronized (lock) {
- while (!notified) {
- lock.wait();
- }
- }
- System.err.println("TEST PASSED");
-
- } finally {
- if (obj != null) {
- UnicastRemoteObject.unexportObject(obj, true);
- }
- if (rmid != null) {
- rmid.cleanup();
- }
- }
- }
-
- public static class RmidSelectorProvider extends SelectorProvider {
-
- private final SelectorProvider provider;
- private ServerSocketChannel channel = null;
-
- 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.err.println("RmidSelectorProvider.inheritedChannel");
- if (channel == null) {
- /*
- * Create server socket channel and bind server socket.
- */
- 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));
- System.err.println("serverSocket = " + serverSocket);
-
- /*
- * Notify test that inherited channel was created.
- */
- try {
- System.err.println("notify test...");
- Registry registry =
- LocateRegistry.getRegistry(TestLibrary.RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT);
- Callback obj = (Callback) registry.lookup("Callback");
- obj.notifyTest();
- } catch (NotBoundException nbe) {
- throw (IOException)
- new IOException("callback object not bound").
- initCause(nbe);
- }
- }
- return channel;
- }
- }
-}
-
-interface Callback extends Remote {
- void notifyTest() throws IOException;
-}
--- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy Wed Nov 30 17:15:58 2016 -0800
+++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy Wed Nov 30 17:43:18 2016 -0800
@@ -3,4 +3,5 @@
permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch";
permission java.net.SocketPermission "*", "connect,accept";
permission java.util.PropertyPermission "java.rmi.activation.port", "write";
+ permission java.util.PropertyPermission "test.java.rmi.rmidViaInheritedChannel.registry.port", "read";
};