mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-05 05:30:45 +00:00
8027058: sun/management/jmxremote/bootstrap/RmiBootstrapTest.sh Failed to initialize connector
Dynamically discover the first available port instead of hard-coding one Reviewed-by: sla, chegar, dfuchs
This commit is contained in:
parent
f5a1c27354
commit
f05950c786
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2013, 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
|
||||
@ -24,14 +24,15 @@ import sun.management.jmxremote.ConnectorBootstrap;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.net.BindException;
|
||||
import java.net.ServerSocket;
|
||||
import java.rmi.server.ExportException;
|
||||
|
||||
import java.util.Properties;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -54,7 +55,7 @@ import util.TestLogger;
|
||||
* bootstrap & connection test will fail.</p>
|
||||
*
|
||||
* <p>The rmi port number can be specified with the "rmi.port" system property.
|
||||
* If not, this test will use 12424</p>
|
||||
* If not, this test will use the first available port</p>
|
||||
*
|
||||
* <p>When called with some argument, the main() will interprete its args to
|
||||
* be Java M&M configuration file names. The filenames are expected to end
|
||||
@ -69,7 +70,8 @@ import util.TestLogger;
|
||||
* <p>Debug traces are logged in "sun.management.test"</p>
|
||||
**/
|
||||
public class RmiBootstrapTest {
|
||||
|
||||
// the number of consecutive ports to test for availability
|
||||
private static final int PORT_TEST_LEN = 800;
|
||||
static TestLogger log =
|
||||
new TestLogger("RmiBootstrapTest");
|
||||
|
||||
@ -78,6 +80,7 @@ public class RmiBootstrapTest {
|
||||
* to avoid falling into "port number already in use" problems.
|
||||
**/
|
||||
static int testPort = 0;
|
||||
static int basePort = 0;
|
||||
|
||||
/**
|
||||
* Default values for RMI configuration properties.
|
||||
@ -624,7 +627,7 @@ public class RmiBootstrapTest {
|
||||
* eventually cleans up by calling ConnectorBootstrap.terminate().
|
||||
* @return null if the test succeeds, an error message otherwise.
|
||||
**/
|
||||
private String testConfiguration(File file,int port) {
|
||||
private String testConfiguration(File file,int port) throws BindException {
|
||||
|
||||
final String path;
|
||||
try {
|
||||
@ -644,7 +647,7 @@ public class RmiBootstrapTest {
|
||||
System.out.println("***");
|
||||
|
||||
System.setProperty("com.sun.management.jmxremote.port",
|
||||
Integer.toString(port));
|
||||
Integer.toString(port));
|
||||
if (path != null)
|
||||
System.setProperty("com.sun.management.config.file", path);
|
||||
else
|
||||
@ -661,6 +664,11 @@ public class RmiBootstrapTest {
|
||||
try {
|
||||
cs = ConnectorBootstrap.initialize();
|
||||
} catch (AgentConfigurationError x) {
|
||||
if (x.getCause() instanceof ExportException) {
|
||||
if (x.getCause().getCause() instanceof BindException) {
|
||||
throw (BindException)x.getCause().getCause();
|
||||
}
|
||||
}
|
||||
final String err = "Failed to initialize connector:" +
|
||||
"\n\tcom.sun.management.jmxremote.port=" + port +
|
||||
((path!=null)?"\n\tcom.sun.management.config.file="+path:
|
||||
@ -713,7 +721,15 @@ public class RmiBootstrapTest {
|
||||
* @return null if the test succeeds, an error message otherwise.
|
||||
**/
|
||||
private String testConfigurationKo(File conf,int port) {
|
||||
final String errStr = testConfiguration(conf,port+testPort++);
|
||||
String errStr = null;
|
||||
for (int i = 0; i < PORT_TEST_LEN; i++) {
|
||||
try {
|
||||
errStr = testConfiguration(conf,port+testPort++);
|
||||
break;
|
||||
} catch (BindException e) {
|
||||
// port conflict; try another port
|
||||
}
|
||||
}
|
||||
if (errStr == null) {
|
||||
return "Configuration " +
|
||||
conf + " should have failed!";
|
||||
@ -733,11 +749,21 @@ public class RmiBootstrapTest {
|
||||
**/
|
||||
private String testConfigurationFile(String fileName) {
|
||||
File file = new File(fileName);
|
||||
final String portStr = System.getProperty("rmi.port","12424");
|
||||
final int port = Integer.parseInt(portStr);
|
||||
final String portStr = System.getProperty("rmi.port",null);
|
||||
final int port = portStr != null ?
|
||||
Integer.parseInt(portStr) : basePort;
|
||||
|
||||
if (fileName.endsWith("ok.properties")) {
|
||||
return testConfiguration(file,port+testPort++);
|
||||
String errStr = null;
|
||||
for (int i = 0; i < PORT_TEST_LEN; i++) {
|
||||
try {
|
||||
errStr = testConfiguration(file,port+testPort++);
|
||||
return errStr;
|
||||
} catch (BindException e) {
|
||||
// port conflict; try another port
|
||||
}
|
||||
}
|
||||
return "Can not locate available port";
|
||||
}
|
||||
if (fileName.endsWith("ko.properties")) {
|
||||
return testConfigurationKo(file,port+testPort++);
|
||||
@ -752,8 +778,9 @@ public class RmiBootstrapTest {
|
||||
* @throws RuntimeException if the test fails.
|
||||
**/
|
||||
public void runko() {
|
||||
final String portStr = System.getProperty("rmi.port","12424");
|
||||
final int port = Integer.parseInt(portStr);
|
||||
final String portStr = System.getProperty("rmi.port",null);
|
||||
final int port = portStr != null ?
|
||||
Integer.parseInt(portStr) : basePort;
|
||||
final File[] conf = findConfigurationFilesKo();
|
||||
if ((conf == null)||(conf.length == 0))
|
||||
throw new RuntimeException("No configuration found");
|
||||
@ -774,15 +801,23 @@ public class RmiBootstrapTest {
|
||||
* @throws RuntimeException if the test fails.
|
||||
**/
|
||||
public void runok() {
|
||||
final String portStr = System.getProperty("rmi.port","12424");
|
||||
final int port = Integer.parseInt(portStr);
|
||||
final String portStr = System.getProperty("rmi.port",null);
|
||||
final int port = portStr != null ?
|
||||
Integer.parseInt(portStr) : basePort;
|
||||
final File[] conf = findConfigurationFilesOk();
|
||||
if ((conf == null)||(conf.length == 0))
|
||||
throw new RuntimeException("No configuration found");
|
||||
|
||||
String errStr;
|
||||
String errStr = null;
|
||||
for (int i=0;i<conf.length;i++) {
|
||||
errStr = testConfiguration(conf[i],port+testPort++);
|
||||
for (int j = 0; j < PORT_TEST_LEN; i++) {
|
||||
try {
|
||||
errStr = testConfiguration(conf[i],port+testPort++);
|
||||
break;
|
||||
} catch (BindException e) {
|
||||
// port conflict; try another port
|
||||
}
|
||||
}
|
||||
if (errStr != null) {
|
||||
throw new RuntimeException(errStr);
|
||||
}
|
||||
@ -835,7 +870,8 @@ public class RmiBootstrapTest {
|
||||
* Calls run(args[]).
|
||||
* exit(1) if the test fails.
|
||||
**/
|
||||
public static void main(String args[]) {
|
||||
public static void main(String args[]) throws Exception {
|
||||
setupBasePort();
|
||||
RmiBootstrapTest manager = new RmiBootstrapTest();
|
||||
try {
|
||||
manager.run(args);
|
||||
@ -850,4 +886,9 @@ public class RmiBootstrapTest {
|
||||
System.out.println("**** Test RmiBootstrap Passed ****");
|
||||
}
|
||||
|
||||
private static void setupBasePort() throws IOException {
|
||||
try (ServerSocket s = new ServerSocket(0)) {
|
||||
basePort = s.getLocalPort() + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user