8019538: TEST_BUG: java/rmi/activation/rmidViaInheritedChannel tests may fail
authormli
Wed, 30 Nov 2016 17:43:18 -0800
changeset 42336 1d4d0dfa8263
parent 42335 60a4da1ba918
child 42337 9597f6a5755d
8019538: TEST_BUG: java/rmi/activation/rmidViaInheritedChannel tests may fail Reviewed-by: rriggs, chegar
jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java
jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java
jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy
--- 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";
 };