diff --git a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java index 6270297727d..8ac49287722 100644 --- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java +++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 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 @@ -23,7 +23,9 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.BindException; import java.net.ConnectException; import java.net.ServerSocket; import java.rmi.NoSuchObjectException; @@ -34,11 +36,13 @@ import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.Random; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; +import java.util.stream.Collectors; import javax.management.*; import javax.management.remote.*; @@ -46,6 +50,9 @@ import jdk.testlibrary.ProcessTools; import jdk.testlibrary.JDKToolLauncher; +import sun.management.Agent; +import sun.management.AgentConfigurationError; + /** * @test @@ -53,66 +60,56 @@ * @library /lib/testlibrary * @build jdk.testlibrary.* JMXStartStopTest JMXStartStopDoSomething * @run main/othervm JMXStartStopTest - * @summary Makes sure that enabling/disabling the management agent through - * JCMD achieves the desired results + * @summary Makes sure that enabling/disabling the management agent through JCMD + * achieves the desired results * @key randomness */ public class JMXStartStopTest { + private static final String TEST_SRC = System.getProperty("test.src"); private static final boolean verbose = false; /** - * Dynamically allocates two distinct ports using {@linkplain java.net.ServerSocket} - * It keeps each of those ports blocked until it is first accessed by its getter + * Dynamically allocates distinct ports from the ephemeral range 49152-65535 */ private static class PortAllocator { - private final int port1, port2; - private final ServerSocket ss1, ss2; - PortAllocator() { - try { - ss1 = new ServerSocket(0); - ss2 = new ServerSocket(0); - port1 = ss1.getLocalPort(); - port2 = ss2.getLocalPort(); - } catch (IOException e) { - throw new Error("Error while obtaining free ports", e); - } - } - - public int getPort1() { - if (!ss1.isClosed()) { - try { - ss1.close(); - } catch (IOException e) { - // just ignore - } - } - return port1; - } - public int getPort2() { - if (!ss2.isClosed()) { - try { - ss2.close(); - } catch (IOException e) { - // just ignore + private final static int LOWER_BOUND = 49152; + private final static int UPPER_BOUND = 65535; + + private final static Random RND = new Random(System.currentTimeMillis()); + + private static int[] allocatePorts(final int numPorts) { + int[] ports = new int[numPorts]; + for (int i = 0; i < numPorts; i++) { + int port = -1; + while (port == -1) { + port = RND.nextInt(UPPER_BOUND - LOWER_BOUND + 1) + LOWER_BOUND; + for (int j = 0; j < i; j++) { + if (ports[j] == port) { + port = -1; + break; + } + } } + System.err.println("*** port = " + port); + ports[i] = port; } - return port2; + return ports; } } - private static void dbg_print(String msg){ + private static void dbg_print(String msg) { if (verbose) { - System.out.println("DBG: " +msg); + System.out.println("DBG: " + msg); } } private static int listMBeans(MBeanServerConnection server, - ObjectName pattern, - QueryExp query) - throws Exception { + ObjectName pattern, + QueryExp query) + throws Exception { Set names = server.queryNames(pattern,query); for (Iterator i = names.iterator(); i.hasNext(); ) { @@ -132,9 +129,8 @@ private static int listMBeans(MBeanServerConnection server, return names.size(); } - private static void testConnectLocal(int pid) - throws Exception { + throws Exception { String jmxUrlStr = null; @@ -209,12 +205,12 @@ private static void testConnect(int port, int rmiPort) throws Exception { String jmxUrlStr = (rmiPort != 0) ? String.format( - "service:jmx:rmi://localhost:%d/jndi/rmi://localhost:%d/jmxrmi", - rmiPort, - port) : + "service:jmx:rmi://localhost:%d/jndi/rmi://localhost:%d/jmxrmi", + rmiPort, + port) : String.format( - "service:jmx:rmi:///jndi/rmi://localhost:%d/jmxrmi", - port); + "service:jmx:rmi:///jndi/rmi://localhost:%d/jmxrmi", + port); JMXServiceURL url = new JMXServiceURL(jmxUrlStr); @@ -292,7 +288,21 @@ public static void main(String args[]) throws Exception { for (Method m : JMXStartStopTest.class.getDeclaredMethods()) { if (m.getName().startsWith("test_")) { try { - m.invoke(null); + boolean retry = false; + do { + try { + m.invoke(null); + retry = false; + } catch (InvocationTargetException e) { + if (e.getCause() instanceof BindException || + e.getCause() instanceof java.rmi.ConnectException) { + System.out.println("Failed to allocate ports. Retrying ..."); + retry = true; + } else { + throw e; + } + } + } while (retry); System.out.println("=== PASSED\n"); } catch (Throwable e) { failures.add(new Failure(e, m.getName() + " failed")); @@ -324,18 +334,26 @@ public Something(ProcessBuilder pb, String name) { public synchronized void start() throws InterruptedException, IOException, TimeoutException { if (started.compareAndSet(false, true)) { try { + AtomicBoolean error = new AtomicBoolean(false); p = ProcessTools.startProcess( - "JMXStartStopDoSomething", - pb, - (line) -> { - if (line.toLowerCase().startsWith("pid:")) { - pid = Integer.parseInt(line.split("\\:")[1]); - } - return line.equals("main enter"); - }, - 5, - TimeUnit.SECONDS + "JMXStartStopDoSomething{" + name + "}", + pb, + (line) -> { + if (line.toLowerCase().startsWith("pid:")) { + pid = Integer.parseInt(line.split("\\:")[1]); + } + boolean ok = line.equals("main enter"); + error.set(line.contains("BindException")); + + return ok || error.get(); + }, + 5, + TimeUnit.SECONDS ); + if (error.get()) { + throw new BindException("Starting process failed due to " + + "the requested port not being available"); + } } catch (TimeoutException e) { p.destroy(); p.waitFor(); @@ -349,7 +367,7 @@ public int getPid() { } public synchronized void stop() - throws IOException, InterruptedException { + throws IOException, InterruptedException { if (started.compareAndSet(true, false)) { p.getOutputStream().write(0); p.getOutputStream().flush(); @@ -376,16 +394,16 @@ public synchronized void stop() * @throws TimeoutException */ private static Something doSomething(String name, String ... args) - throws Exception { + throws Exception { List pbArgs = new ArrayList<>(Arrays.asList( - "-cp", - System.getProperty("test.class.path") + "-cp", + System.getProperty("test.class.path") )); pbArgs.addAll(Arrays.asList(args)); pbArgs.add("JMXStartStopDoSomething"); ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( - pbArgs.toArray(new String[pbArgs.size()]) + pbArgs.toArray(new String[pbArgs.size()]) ); Something s = new Something(pb, name); s.start(); @@ -401,7 +419,7 @@ private static Something doSomething(String name, String ... args) */ private static void jcmd(String ... command) throws IOException, InterruptedException { if (command.length == 0) { - jcmd(null, (Consumer)null); + jcmd(null, c->{}); } else { jcmd(null, command); } @@ -410,7 +428,7 @@ private static void jcmd(String ... command) throws IOException, InterruptedExce /** * Run the "jcmd" command * - * @param c {@linkplain Consumer} instance; may be null + * @param c {@linkplain Consumer} instance * @param command Command with parameters; space separated string * @throws IOException * @throws InterruptedException @@ -422,7 +440,7 @@ private static void jcmd(Consumer c, String ... command) throws IOExcept /** * Run the "jcmd" command * @param target The target application name (or PID) - * @param c {@linkplain Consumer} instance; may be null + * @param c {@linkplain Consumer} instance * @param command Command with parameters; space separated string * @throws IOException * @throws InterruptedException @@ -432,17 +450,32 @@ private static void jcmd(String target, final Consumer c, String ... com JDKToolLauncher l = JDKToolLauncher.createUsingTestJDK("jcmd"); l.addToolArg(target); - for(String cmd : command) { + for (String cmd : command) { l.addToolArg(cmd); } + AtomicBoolean portUnavailable = new AtomicBoolean(false); Process p = ProcessTools.startProcess( "jcmd", new ProcessBuilder(l.getCommand()), - c + line -> { + if (line.contains("BindException") || + line.contains(Agent.getText(AgentConfigurationError.CONNECTOR_SERVER_IO_ERROR))) { + portUnavailable.set(true); + } else { + c.accept(line); + } + } ); p.waitFor(); dbg_print("[jcmd] --------"); + if (portUnavailable.get()) { + String cmd = Arrays.asList(l.getCommand()).stream() + .collect( + Collectors.joining(" ", "", ": Unable to bind address") + ); + throw new BindException(cmd); + } } private static final String CMD_STOP = "ManagementAgent.stop"; @@ -454,22 +487,23 @@ static void test_01() throws Exception { // restart on other port System.out.println("**** Test one ****"); - PortAllocator pa = new PortAllocator(); + int ports[] = PortAllocator.allocatePorts(2); Something s = doSomething( - "test_01", - "-Dcom.sun.management.jmxremote.port=" + pa.getPort1(), - "-Dcom.sun.management.jmxremote.authenticate=false", - "-Dcom.sun.management.jmxremote.ssl=false"); + "test_01", + "-Dcom.sun.management.jmxremote.port=" + ports[0], + "-Dcom.sun.management.jmxremote.authenticate=false", + "-Dcom.sun.management.jmxremote.ssl=false"); + try { - testConnect(pa.getPort1()); + testConnect(ports[0]); jcmd(CMD_STOP); - testNoConnect(pa.getPort1()); + testConnect(ports[0]); - jcmd(CMD_START, "jmxremote.port=" + pa.getPort2()); - testConnect(pa.getPort2()); + jcmd(CMD_START, "jmxremote.port=" + ports[1]); + testConnect(ports[1]); } finally { s.stop(); } @@ -481,15 +515,15 @@ static void test_02() throws Exception { System.out.println("**** Test two ****"); + int[] ports = PortAllocator.allocatePorts(1); Something s = doSomething("test_02"); - PortAllocator pa = new PortAllocator(); try { jcmd(CMD_START, - "jmxremote.port=" + pa.getPort1(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false"); + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); - testConnect(pa.getPort1()); + testConnect(ports[0]); } finally { // debugPortUsage(pa); s.stop(); @@ -502,25 +536,25 @@ static void test_03() throws Exception { System.out.println("**** Test three ****"); + int[] ports = PortAllocator.allocatePorts(2); Something s = doSomething("test_03"); - PortAllocator pa = new PortAllocator(); try { jcmd(CMD_START, - "jmxremote.port=" + pa.getPort1(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false"); + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); // Second agent shouldn't start jcmd(CMD_START, - "jmxremote.port=" + pa.getPort2(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false"); + "jmxremote.port=" + ports[1], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); // First agent should connect - testConnect(pa.getPort1()); + testConnect(ports[0]); // Second agent should not connect - testNoConnect(pa.getPort2()); + testNoConnect(ports[1]); } finally { s.stop(); } @@ -532,16 +566,16 @@ static void test_04() throws Exception { System.out.println("**** Test four ****"); + int[] ports = PortAllocator.allocatePorts(2); Something s = doSomething("test_04"); - PortAllocator pa = new PortAllocator(); try { jcmd(CMD_START, - "jmxremote.port=" + pa.getPort1(), - "jmxremote.rmi.port=" + pa.getPort2(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false"); + "jmxremote.port=" + ports[0], + "jmxremote.rmi.port=" + ports[1], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); - testConnect(pa.getPort1(), pa.getPort2()); + testConnect(ports[0], ports[1]); } finally { s.stop(); } @@ -552,13 +586,12 @@ static void test_05() throws Exception { // but should leave remote server disabled System.out.println("**** Test five ****"); - + int[] ports = PortAllocator.allocatePorts(1); Something s = doSomething("test_05"); - PortAllocator pa = new PortAllocator(); try { jcmd(CMD_START_LOCAL); - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); testConnectLocal(s.getPid()); } finally { s.stop(); @@ -568,143 +601,224 @@ static void test_05() throws Exception { static void test_06() throws Exception { // Run an app without JMX enabled // start JMX by jcmd on one port, specify rmi port explicitly - // attempt to start it again - // 1) with the same port - // 2) with other port - // 3) attempt to stop it twice + // attempt to start it again with the same port // Check for valid messages in the output System.out.println("**** Test six ****"); + int[] ports = PortAllocator.allocatePorts(2); Something s = doSomething("test_06"); - PortAllocator pa = new PortAllocator(); try { jcmd(CMD_START, - "jmxremote.port=" + pa.getPort1(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false"); + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); - testConnect(pa.getPort1(), pa.getPort2()); + testConnect(ports[0], ports[1]); - final boolean[] checks = new boolean[3]; + final AtomicBoolean checks = new AtomicBoolean(false); jcmd( - line -> { - if (line.contains("java.lang.RuntimeException: Invalid agent state")) { - checks[0] = true; - } - }, - CMD_START, - "jmxremote.port=" + pa.getPort1(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false"); + + line -> { + if (line.contains("java.lang.RuntimeException: Invalid agent state")) { + checks.set(true); + } + }, + CMD_START, + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); + + if (!checks.get()) { + throw new Exception("Starting agent on port " + ports[0] + " should " + + "report an invalid agent state"); + } + } finally { + s.stop(); + } + } + + static void test_07() throws Exception { + // Run an app without JMX enabled + // start JMX by jcmd on one port, specify rmi port explicitly + // attempt to start it again with other port + // Check for valid messages in the output + + System.out.println("**** Test seven ****"); + + int[] ports = PortAllocator.allocatePorts(2); + Something s = doSomething("test_07"); + try { + jcmd(CMD_START, + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); + + testConnect(ports[0], ports[1]); + + final AtomicBoolean checks = new AtomicBoolean(false); jcmd( - line -> { - if (line.contains("java.lang.RuntimeException: Invalid agent state")) { - checks[1] = true; - } - }, - CMD_START, - "jmxremote.port=" + pa.getPort2(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false"); + line -> { + if (line.contains("java.lang.RuntimeException: Invalid agent state")) { + checks.set(true); + } + }, + CMD_START, + "jmxremote.port=" + ports[1], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); + + if (!checks.get()) { + throw new Exception("Starting agent on poprt " + ports[1] + " should " + + "report an invalid agent state"); + } + } finally { + s.stop(); + } + } + + static void test_08() throws Exception { + // Run an app without JMX enabled + // start JMX by jcmd on one port, specify rmi port explicitly + // attempt to stop it twice + // Check for valid messages in the output + + System.out.println("**** Test eight ****"); + + int[] ports = PortAllocator.allocatePorts(2); + Something s = doSomething("test_08"); + try { + jcmd(CMD_START, + "jmxremote.port=" + ports[0], + "jmxremote.authenticate=false", + "jmxremote.ssl=false"); + + testConnect(ports[0], ports[1]); jcmd(CMD_STOP); jcmd(CMD_STOP); + } finally { + s.stop(); + } + } - ServerSocket ss = new ServerSocket(0); + static void test_09() throws Exception { + // Run an app without JMX enabled + // attempt to start JMX using a non-available port + // Check for valid messages in the output - jcmd( - line -> { - if (line.contains("Port already in use: " + ss.getLocalPort())) { - checks[2] = true; - } - }, + System.out.println("**** Test nine ****"); + + Something s = doSomething("test_09"); + + try (ServerSocket ss = new ServerSocket(0)) { + int localPort = ss.getLocalPort(); + int[] ports; + do { + ports = PortAllocator.allocatePorts(1); + } while (localPort == ports[0]); + + final AtomicBoolean checks = new AtomicBoolean(false); + + int retryCntr = 1; + do { + final AtomicBoolean retry = new AtomicBoolean(false); + + try { + jcmd( + line -> { + if (line.contains(Agent.getText(AgentConfigurationError.AGENT_EXCEPTION))) { + retry.set(true); + } + }, CMD_START, - "jmxremote.port=" + ss.getLocalPort(), - "jmxremote.rmi.port=" + pa.getPort2(), + "jmxremote.port=" + ports[0], + "jmxremote.rmi.port=" + localPort, "jmxremote.authenticate=false", "jmxremote.ssl=false"); - if (!checks[0]) { - throw new Exception("Starting agent on port " + pa.getPort1() + " should " + - "report an invalid agent state"); + } catch (BindException e) { + checks.set(true); } - if (!checks[1]) { - throw new Exception("Starting agent on poprt " + pa.getPort2() + " should " + - "report an invalid agent state"); + if (!retry.get()) { + break; } - if (!checks[2]) { - throw new Exception("Starting agent on port " + ss.getLocalPort() + " should " + - "report port in use"); + System.out.println("Attempt " + retryCntr + " >>>"); + System.out.println("Unexpected reply from the agent. Retrying in 500ms ..."); + Thread.sleep(500); + } while (retryCntr++ < 10); + + if (!checks.get()) { + throw new Exception("Starting agent on port " + ports[0] + " should " + + "report port in use"); } } finally { s.stop(); } } - private static void test_07() throws Exception { + static void test_10() throws Exception { // Run an app without JMX enabled, but with some properties set // in command line. // make sure these properties overridden corectly - System.out.println("**** Test seven ****"); + System.out.println("**** Test ten ****"); + int[] ports = PortAllocator.allocatePorts(2); Something s = doSomething( - "test_07", - "-Dcom.sun.management.jmxremote.authenticate=false", - "-Dcom.sun.management.jmxremote.ssl=true"); - PortAllocator pa = new PortAllocator(); + "test_10", + "-Dcom.sun.management.jmxremote.authenticate=false", + "-Dcom.sun.management.jmxremote.ssl=true"); try { - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); jcmd( CMD_START, - "jmxremote.port=" + pa.getPort2(), + "jmxremote.port=" + ports[1], "jmxremote.authenticate=false", "jmxremote.ssl=false" ); - testConnect(pa.getPort2()); + testConnect(ports[1]); } finally { s.stop(); } } - static void test_08() throws Exception { + static void test_11() throws Exception { // Run an app with JMX enabled and with some properties set // in command line. // stop JMX agent and then start it again with different property values // make sure these properties overridden corectly - System.out.println("**** Test eight ****"); - PortAllocator pa = new PortAllocator(); - + System.out.println("**** Test eleven ****"); + int[] ports = PortAllocator.allocatePorts(2); Something s = doSomething( - "test_08", - "-Dcom.sun.management.jmxremote.port=" + pa.getPort1(), - "-Dcom.sun.management.jmxremote.authenticate=false", - "-Dcom.sun.management.jmxremote.ssl=true"); + "test_11", + "-Dcom.sun.management.jmxremote.port=" + ports[0], + "-Dcom.sun.management.jmxremote.authenticate=false", + "-Dcom.sun.management.jmxremote.ssl=true"); try { - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); jcmd(CMD_STOP); - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); jcmd( - CMD_START, - "jmxremote.port=" + pa.getPort2(), - "jmxremote.authenticate=false", - "jmxremote.ssl=false" + CMD_START, + "jmxremote.port=" + ports[1], + "jmxremote.authenticate=false", + "jmxremote.ssl=false" ); - testConnect(pa.getPort2()); + testConnect(ports[1]); } finally { s.stop(); } } - static void test_09() throws Exception { + static void test_12() throws Exception { // Run an app with JMX enabled and with some properties set // in command line. // stop JMX agent and then start it again with different property values @@ -712,87 +826,85 @@ static void test_09() throws Exception { // in command line // make sure these properties overridden corectly - System.out.println("**** Test nine ****"); + System.out.println("**** Test twelve ****"); - Something s = doSomething("test_09", - "-Dcom.sun.management.config.file=" + - TEST_SRC + File.separator + "management_cl.properties", - "-Dcom.sun.management.jmxremote.authenticate=false" + int[] ports = PortAllocator.allocatePorts(2); + Something s = doSomething("test_12", + "-Dcom.sun.management.config.file=" + + TEST_SRC + File.separator + "management_cl.properties", + "-Dcom.sun.management.jmxremote.authenticate=false" ); - PortAllocator pa = new PortAllocator(); try { - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); jcmd(CMD_STOP); - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); jcmd(CMD_START, - "config.file=" + TEST_SRC + File.separator + - "management_jcmd.properties", - "jmxremote.authenticate=false", - "jmxremote.port=" + pa.getPort2() + "config.file=" + TEST_SRC + File.separator + + "management_jcmd.properties", + "jmxremote.authenticate=false", + "jmxremote.port=" + ports[1] ); - testConnect(pa.getPort2()); + testConnect(ports[1]); } finally { s.stop(); } } - static void test_10() throws Exception { + static void test_13() throws Exception { // Run an app with JMX enabled and with some properties set // in command line. // stop JMX agent and then start it again with different property values // stop JMX agent again and then start it without property value // make sure these properties overridden corectly - System.out.println("**** Test ten ****"); - PortAllocator pa = new PortAllocator(); - + System.out.println("**** Test thirteen ****"); + int[] ports = PortAllocator.allocatePorts(1); Something s = doSomething( - "test_10", - "-Dcom.sun.management.jmxremote.port=" + pa.getPort1(), - "-Dcom.sun.management.jmxremote.authenticate=false", - "-Dcom.sun.management.jmxremote.ssl=true"); + "test_13", + "-Dcom.sun.management.jmxremote.port=" + ports[0], + "-Dcom.sun.management.jmxremote.authenticate=false", + "-Dcom.sun.management.jmxremote.ssl=true"); try { - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); jcmd(CMD_STOP); jcmd(CMD_START, - "jmxremote.ssl=false", - "jmxremote.port=" + pa.getPort1() + "jmxremote.ssl=false", + "jmxremote.port=" + ports[0] ); - testConnect(port1); + testConnect(ports[0]); jcmd(CMD_STOP); jcmd(CMD_START, - "jmxremote.port=" + pa.getPort1() + "jmxremote.port=" + ports[0] ); - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); } finally { s.stop(); } } - static void test_11() throws Exception { + static void test_14() throws Exception { // Run an app with JMX enabled // stop remote agent // make sure local agent is not affected - System.out.println("**** Test eleven ****"); - PortAllocator pa = new PortAllocator(); - + System.out.println("**** Test fourteen ****"); + int[] ports = PortAllocator.allocatePorts(1); Something s = doSomething( - "test_11", - "-Dcom.sun.management.jmxremote.port=" + pa.getPort1(), - "-Dcom.sun.management.jmxremote.authenticate=false", - "-Dcom.sun.management.jmxremote.ssl=false"); + "test_14", + "-Dcom.sun.management.jmxremote.port=" + ports[0], + "-Dcom.sun.management.jmxremote.authenticate=false", + "-Dcom.sun.management.jmxremote.ssl=false"); try { - testConnect(pa.getPort1()); + testConnect(ports[0]); jcmd(CMD_STOP); testConnectLocal(s.getPid()); } finally { @@ -800,17 +912,17 @@ static void test_11() throws Exception { } } - static void test_12() throws Exception { + static void test_15() throws Exception { // Run an app with JMX disabled // start local agent only System.out.println("**** Test twelve ****"); - Something s = doSomething("test_12"); - PortAllocator pa = new PortAllocator(); + int[] ports = PortAllocator.allocatePorts(1); + Something s = doSomething("test_15"); try { - testNoConnect(pa.getPort1()); + testNoConnect(ports[0]); jcmd(CMD_START + "_local"); testConnectLocal(s.getPid());