# HG changeset patch # User mli # Date 1482374074 28800 # Node ID 6e6506080c2a5ee7f876f26a089a1a2a1813a892 # Parent 1d31e540bfcb6061a60646ce36c0c6e78e2c9d09 8073080: TEST_BUG: sun/rmi/transport/tcp/DeadCachedConnection.java fails due to "ConnectException: Connection refused to host" Reviewed-by: rriggs diff -r 1d31e540bfcb -r 6e6506080c2a jdk/test/java/rmi/testlibrary/RegistryRunner.java --- a/jdk/test/java/rmi/testlibrary/RegistryRunner.java Wed Dec 21 14:26:52 2016 -0800 +++ b/jdk/test/java/rmi/testlibrary/RegistryRunner.java Wed Dec 21 18:34:34 2016 -0800 @@ -36,7 +36,7 @@ implements RemoteExiter { private static final String PORT_LABEL_START = "RegistryRunner.port.start:"; - private static final String PORT_LABEL_END = "RegistryRunner.port.end"; + private static final String PORT_LABEL_END = ":RegistryRunner.port.end"; private static Registry registry = null; private static RemoteExiter exiter = null; diff -r 1d31e540bfcb -r 6e6506080c2a jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java --- a/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java Wed Dec 21 14:26:52 2016 -0800 +++ b/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java Wed Dec 21 18:34:34 2016 -0800 @@ -29,7 +29,7 @@ * java.rmi/sun.rmi.server * java.rmi/sun.rmi.transport * java.rmi/sun.rmi.transport.tcp - * @build TestLibrary JavaVM + * @build TestLibrary REGISTRY RegistryRunner * @run main/othervm DeadCachedConnection */ @@ -60,73 +60,65 @@ import java.rmi.server.*; public class DeadCachedConnection { - static public final int regport = TestLibrary.getUnusedRandomPort(); static public void main(String[] argv) throws Exception { - // establish the registry (we hope) - System.err.println ("Starting registry on port " + regport); - DeadCachedConnection.makeRegistry(regport); + try { + Registry reg = null; + int port = makeRegistry(0); - // Get a handle to the registry - Registry reg = null; - System.err.println ("Locating just-started registry..."); - try { - reg = LocateRegistry.getRegistry(regport); - } catch (RemoteException e) { - throw new InternalError ("Can't find registry after starting it."); - } + // Get a handle to the registry + System.err.println ("Locating just-started registry..."); + try { + reg = LocateRegistry.getRegistry(port); + } catch (RemoteException e) { + throw new InternalError ("Can't find registry after starting it."); + } + + // Contact the registry by invoking something on it. + System.err.println ("Connecting to registry..."); + String[] junk = reg.list(); - // Contact the registry by invoking something on it. - System.err.println ("Connecting to registry..."); - String[] junk = reg.list(); - - // Kill and restart the registry - System.err.println("Killing registry..."); - DeadCachedConnection.killRegistry(); - System.err.println("Restarting registry..."); - DeadCachedConnection.makeRegistry(regport); + // Kill and restart the registry + System.err.println("Killing registry..."); + killRegistry(); + System.err.println("Restarting registry..."); + makeRegistry(port); - // Try again (this is the test) - System.err.println("Trying to use registry in spite of stale cache..."); - junk = reg.list(); + // Try again (this is the test) + System.err.println("Trying to use registry in spite of stale cache..."); + junk = reg.list(); - // we're happy - System.err.println("Test succeeded."); - try { - DeadCachedConnection.killRegistry(); - } catch (Exception foo) { + System.err.println("Test succeeded."); + } catch (Exception e) { + TestLibrary.bomb(e); + } finally { + // dont leave the registry around to affect other tests. + killRegistry(); } } - public static void makeRegistry(int p) { - // sadly, we can't kill a registry if we have too-close control - // over it. We must make it in a subprocess, and then kill the - // subprocess when it has served our needs. - + public static int makeRegistry(int port) { try { - JavaVM jvm = - new JavaVM("sun.rmi.registry.RegistryImpl", "", Integer.toString(p)); - jvm.start(); - DeadCachedConnection.subreg = jvm; - + subreg = REGISTRY.createREGISTRY(System.out, System.err, "", port); + subreg.start(); + int regPort = subreg.getPort(); + System.out.println("Starting registry on port " + regPort); + return regPort; } catch (IOException e) { // one of these is summarily dropped, can't remember which one System.out.println ("Test setup failed - cannot run rmiregistry"); TestLibrary.bomb("Test setup failed - cannot run test", e); } - // Slop - wait for registry to come up. This is stupid. - try { - Thread.sleep (5000); - } catch (Exception whatever) { + return -1; + } + + private static REGISTRY subreg = null; + + public static void killRegistry() throws InterruptedException { + if (subreg != null) { + subreg.shutdown(); + subreg = null; } } - private static JavaVM subreg = null; - - public static void killRegistry() throws InterruptedException { - if (DeadCachedConnection.subreg != null) { - DeadCachedConnection.subreg.terminate(); - } - DeadCachedConnection.subreg = null; - } }