7195249: Some jtreg tests use hard coded ports

Use Utils.getFreePort() and launch the tests by java code

Reviewed-by: jbachorik, sla
This commit is contained in:
Staffan Larsen 2014-02-28 12:57:35 +04:00
parent 76e336a948
commit ee21184b17
19 changed files with 816 additions and 553 deletions

View File

@ -127,9 +127,6 @@ java/lang/reflect/Method/invoke/TestPrivateInterfaceMethodReflect.java generic-a
# jdk_management
# 8028150
sun/management/jmxremote/bootstrap/RmiSslBootstrapTest.sh windows-all
############################################################################
# jdk_jmx

View File

@ -25,9 +25,9 @@
# No need to compile (now done by JTReg tags in calling file)
#
echo ${TESTJAVA}/bin/java ${TESTVMOPTS} -Dtest.src=${TESTCLASSES} \
-classpath ${TESTCLASSES} $* || exit 20
-classpath ${TESTCLASSPATH} $* || exit 20
${TESTJAVA}/bin/java ${TESTVMOPTS} -Dtest.src=${TESTCLASSES} \
-classpath ${TESTCLASSES} $* || exit 20
-classpath ${TESTCLASSPATH} $* || exit 20
exit 0

View File

@ -0,0 +1,202 @@
/*
* Copyright (c) 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
* 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.
*/
import jdk.testlibrary.OutputAnalyzer;
import jdk.testlibrary.Platform;
import jdk.testlibrary.ProcessTools;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.PosixFilePermission;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Change file permission for out-of-the-box management an do test used by
* PasswordFilePermissionTest and SSLConfigFilePermissionTest tests
*
* @author Taras Ledkov
*/
public abstract class AbstractFilePermissionTest {
private final String TEST_CLASS_PATH = System.getProperty("test.class.path");
protected final String TEST_CLASSES = System.getProperty("test.classes");
protected final FileSystem FS = FileSystems.getDefault();
private int MAX_GET_FREE_PORT_TRIES = 10;
protected final Path libDir = FS.getPath(TEST_CLASSES, "lib");
protected final Path mgmt = libDir.resolve("management.properties");
private final String mp = "-Dcom.sun.management.config.file=" + mgmt.toFile().getAbsolutePath();
private final String className = "Dummy";
private int failures = 0;
protected final Path file2PermissionTest;
protected AbstractFilePermissionTest(String fileName2PermissionTest) {
this.file2PermissionTest = libDir.resolve(fileName2PermissionTest);
try {
MAX_GET_FREE_PORT_TRIES = Integer.parseInt(System.getProperty("test.getfreeport.max.tries", "10"));
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
public static void createFile(Path path, String... content) throws IOException {
if (Files.exists(path) && Files.isRegularFile(path)) {
try {
Files.delete(path);
} catch (Exception ex) {
System.out.println("WARNING: " + path.toFile().getAbsolutePath() + " already exists - unable to remove old copy");
ex.printStackTrace();
}
}
try (BufferedWriter bw = Files.newBufferedWriter(path, Charset.defaultCharset())) {
for (String str : content) {
bw.write(str, 0, str.length());
bw.newLine();
}
}
}
public boolean skipTest() {
if ((TEST_CLASSES == null) || ("".equals(TEST_CLASSES))) {
System.out.println("Test is designed to be run from jtreg only");
return true;
}
if (!Platform.isLinux() && !Platform.isSolaris()) {
System.out.println("Test not designed to run on this operating system, skipping...");
return true;
}
return false;
}
protected abstract void testSetup() throws IOException;
public void runTest(String[] args) throws Exception {
if (skipTest()) {
return;
}
Files.deleteIfExists(mgmt);
Files.deleteIfExists(file2PermissionTest);
libDir.toFile().mkdir();
testSetup();
try {
test1();
test2();
if (failures == 0) {
System.out.println("All test(s) passed");
} else {
throw new Error(String.format("%d test(s) failed", failures));
}
} finally {
resetPasswordFilePermission();
}
}
/**
* Test 1 - SSL config file is secure - VM should start
*/
private void test1() throws Exception {
final Set<PosixFilePermission> perms_0700 = new HashSet<>();
perms_0700.add(PosixFilePermission.OWNER_WRITE);
perms_0700.add(PosixFilePermission.OWNER_READ);
perms_0700.add(PosixFilePermission.OWNER_EXECUTE);
Files.setPosixFilePermissions(file2PermissionTest, perms_0700);
if (doTest() != 0) {
++failures;
}
}
/**
* Test 1 - SSL config file is secure - VM should start
*/
private void test2() throws Exception {
final Set<PosixFilePermission> perms = Files.getPosixFilePermissions(file2PermissionTest);
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
Files.setPosixFilePermissions(file2PermissionTest, perms);
if (doTest() == 0) {
++failures;
}
}
private int doTest() throws Exception {
for (int i = 0; i < MAX_GET_FREE_PORT_TRIES; ++i) {
final String pp = "-Dcom.sun.management.jmxremote.port=" + jdk.testlibrary.Utils.getFreePort();
List<String> command = new ArrayList<>();
command.addAll(jdk.testlibrary.Utils.getVmOptions());
command.add(mp);
command.add(pp);
command.add("-cp");
command.add(TEST_CLASSES);
command.add(className);
ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder(
command.toArray(new String[command.size()]));
System.out.println("test cmdline: " + Arrays.toString(processBuilder.command().toArray()).replace(",", ""));
Process p = processBuilder.start();
OutputAnalyzer output = new OutputAnalyzer(p);
System.out.println("test output:");
System.out.println(output.getOutput());
if ((p.exitValue() == 0) ||
!output.getOutput().contains("Exception thrown by the agent : " +
"java.rmi.server.ExportException: Port already in use")) {
return p.exitValue();
}
}
return -1;
}
private void resetPasswordFilePermission() throws Exception {
final Set<PosixFilePermission> perms_0777 = new HashSet<>();
Arrays.asList(PosixFilePermission.values()).stream().forEach(p -> {
perms_0777.add(p);
});
Files.setPosixFilePermissions(file2PermissionTest, perms_0777);
}
}

View File

@ -0,0 +1,38 @@
/*
* Copyright (c) 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
* 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.
*/
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;
/**
* A dummy test "application" used by unit tests -
* SSLConfigFilePermissionTest.java
*
* @author Taras Ledkov
*/
class Dummy {
public static void main(String[] args) {
System.out.println("Inside main method...");
}
}

View File

@ -22,6 +22,7 @@
*/
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.nio.file.FileSystem;
@ -32,7 +33,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import jdk.testlibrary.ProcessTools;
/**
* @test
@ -43,15 +43,25 @@ import jdk.testlibrary.ProcessTools;
* TestManager will attempt a connection to the address obtained from
* both agent properties and jvmstat buffer.
* @build jdk.testlibrary.ProcessTools
* @build jdk.testlibrary.Utils
* @build TestManager TestApplication
* @run main/othervm/timeout=300 -XX:+UsePerfData LocalManagementTest
*/
import jdk.testlibrary.ProcessTools;
import jdk.testlibrary.Utils;
public class LocalManagementTest {
private static final String TEST_CLASSPATH = System.getProperty("test.class.path");
private static final String TEST_JDK = System.getProperty("test.jdk");
private static final String TEST_CLASSPATH = System.getProperty("test.class.path");
private static final String TEST_JDK = System.getProperty("test.jdk");
private static int MAX_GET_FREE_PORT_TRIES = 10;
public static void main(String[] args) throws Exception {
try {
MAX_GET_FREE_PORT_TRIES = Integer.parseInt(System.getProperty("test.getfreeport.max.tries", "10"));
} catch (NumberFormatException ex) {
}
int failures = 0;
for(Method m : LocalManagementTest.class.getDeclaredMethods()) {
if (Modifier.isStatic(m.getModifiers()) &&
@ -103,29 +113,49 @@ public class LocalManagementTest {
private static boolean test4() throws Exception {
Path agentPath = findAgent();
if (agentPath != null) {
ProcessBuilder builder = ProcessTools.createJavaProcessBuilder(
"-javaagent:" + agentPath.toString() +
"=com.sun.management.jmxremote.port=7775," +
"com.sun.management.jmxremote.authenticate=false," +
"com.sun.management.jmxremote.ssl=false",
"-cp",
TEST_CLASSPATH,
"TestApplication",
"-exit"
);
Process prc = null;
try {
prc = ProcessTools.startProcess(
"TestApplication",
builder
for (int i = 0; i < MAX_GET_FREE_PORT_TRIES; ++i) {
ProcessBuilder builder = ProcessTools.createJavaProcessBuilder(
"-javaagent:" + agentPath.toString() +
"=com.sun.management.jmxremote.port=" + Utils.getFreePort() + "," +
"com.sun.management.jmxremote.authenticate=false," +
"com.sun.management.jmxremote.ssl=false",
"-cp",
TEST_CLASSPATH,
"TestApplication",
"-exit"
);
int exitCode = prc.waitFor();
return exitCode == 0;
} finally {
if (prc != null) {
prc.destroy();
Process prc = null;
final AtomicReference<Boolean> isBindExceptionThrown = new AtomicReference<>();
isBindExceptionThrown.set(new Boolean(false));
try {
prc = ProcessTools.startProcess(
"TestApplication",
builder,
(String line) -> {
if (line.contains("Exception thrown by the agent : " +
"java.rmi.server.ExportException: Port already in use")) {
isBindExceptionThrown.set(new Boolean(true));
}
});
prc.waitFor();
if (prc.exitValue() == 0) {
return true;
}
if (isBindExceptionThrown.get().booleanValue()) {
System.out.println("'Port already in use' error detected. Try again");
} else {
return false;
}
} finally {
if (prc != null) {
prc.destroy();
prc.waitFor();
}
}
}
}
@ -239,4 +269,4 @@ public class LocalManagementTest {
}
}
}
}
}

View File

@ -0,0 +1,64 @@
/*
* Copyright (c) 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
* 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.
*/
import java.io.IOException;
/**
* @test
* @library /lib/testlibrary
* @bug 6557093
* @summary Check SSL config file permission for out-of-the-box management
* @build jdk.testlibrary.Utils
* @build jdk.testlibrary.ProcessTools
* @build jdk.testlibrary.OutputAnalyzer
* @build AbstractFilePermissionTest
* @build Dummy
* @run main/timeout=300 PasswordFilePermissionTest
*
* @author Taras Ledkov
*/
public class PasswordFilePermissionTest extends AbstractFilePermissionTest {
private PasswordFilePermissionTest() {
super("jmxremote.passwordconfig");
}
public void testSetup() throws IOException {
createFile(mgmt,
"# management.properties",
"com.sun.management.jmxremote.ssl=false",
"com.sun.management.jmxremote.password.file=" + file2PermissionTest.toFile().getAbsolutePath());
createFile(file2PermissionTest,
"# jmxremote.password\n");
}
public static void main(String[] args) throws Exception {
PasswordFilePermissionTest test = new PasswordFilePermissionTest();
test.runTest(args);
}
}

View File

@ -1,134 +0,0 @@
#!/bin/sh
#
# Copyright (c) 2004, 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 5008047
# @summary Check password file permission for out-of-the-box management
#
# @run shell PasswordFilePermissionTest.sh
createJavaFile()
{
cat << EOF > $1/$2.java
class $2 {
public static void main(String[] args) {
System.out.println("Inside main method...");
}
}
EOF
}
createConfigFile() {
cat << EOF > $1
# management.properties
com.sun.management.jmxremote.ssl=false
com.sun.management.jmxremote.password.file=$2
EOF
}
createPasswordFile() {
if [ -f "$1" ] ; then
rm -f $1 || echo WARNING: $1 already exists - unable to remove old copy
fi
cat << EOF > $1
# jmxremote.password
EOF
}
# Check we are run from jtreg
if [ -z "${TESTCLASSES}" ]; then
echo "Test is designed to be run from jtreg only"
exit 0
fi
# Test not suitable for Windows as chmod may not be able to
# security the password file.
os=`uname -s`
if [ "$os" != "Linux" -a "$os" != "SunOS" ]; then
echo "Test not designed to run on this operating system, skipping..."
exit 0
fi
# Create configuration file and dummy password file
LIBDIR=${TESTCLASSES}/lib
CONFIG=${LIBDIR}/management.properties
PASSWD=${LIBDIR}/jmxremote.password
rm -f ${CONFIG}
rm -f ${PASSWD}
mkdir ${LIBDIR} 2>&1
createJavaFile ${TESTCLASSES} Null
createConfigFile ${CONFIG} ${PASSWD}
createPasswordFile ${PASSWD}
# Compile test
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES} ${TESTCLASSES}/Null.java
JAVA=${TESTJAVA}/bin/java
CLASSPATH=${TESTCLASSES}
export CLASSPATH
failures=0
mp=-Dcom.sun.management.config.file=${CONFIG}
pp=-Dcom.sun.management.jmxremote.port=4888
go() {
echo ''
sh -xc "$JAVA ${TESTVMOPTS} $1 $2 $3 $4 $5 $6 $7 $8" 2>&1
if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
}
# Test 1 - password file is secure - VM should start
chmod 700 ${PASSWD}
sh -xc "$JAVA ${TESTVMOPTS} $mp $pp Null" 2>&1
if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
# Test 2 - password file is not secure - VM should fail to start
chmod o+rx ${PASSWD}
sh -xc "$JAVA ${TESTVMOPTS} $mp $pp Null" 2>&1
if [ $? = 0 ]; then failures=`expr $failures + 1`; fi
# Reset the file permissions on the generated password file
chmod 777 ${PASSWD}
#
# Results
#
echo ''
if [ $failures -gt 0 ];
then echo "$failures test(s) failed";
else echo "All test(s) passed"; fi
exit $failures

View File

@ -27,7 +27,6 @@ import java.io.FileInputStream;
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;
@ -43,8 +42,6 @@ import javax.management.*;
import sun.management.AgentConfigurationError;
import util.TestLogger;
/**
* <p>This class implements unit test for RMI Bootstrap.
* When called with no arguments main() looks in the directory indicated
@ -71,17 +68,10 @@ import util.TestLogger;
**/
public class RmiBootstrapTest {
// the number of consecutive ports to test for availability
private static final int PORT_TEST_LEN = 800;
private static int MAX_GET_FREE_PORT_TRIES = 10;
static TestLogger log =
new TestLogger("RmiBootstrapTest");
/**
* When launching several registries, we increment the port number
* to avoid falling into "port number already in use" problems.
**/
static int testPort = 0;
static int basePort = 0;
/**
* Default values for RMI configuration properties.
**/
@ -627,92 +617,100 @@ 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) throws BindException {
private String testConfiguration(File file) throws IOException, InterruptedException {
final String path;
try {
path=(file==null)?null:file.getCanonicalPath();
} catch(IOException x) {
final String err = "Failed to test configuration " + file +
": " + x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
}
final String config = (path==null)?"Default config file":path;
System.out.println("***");
System.out.println("*** Testing configuration (port=" + port + "): "
+ path);
System.out.println("***");
System.setProperty("com.sun.management.jmxremote.port",
Integer.toString(port));
if (path != null)
System.setProperty("com.sun.management.config.file", path);
else
System.getProperties().remove("com.sun.management.config.file");
log.trace("testConfiguration","com.sun.management.jmxremote.port="+port);
if (path != null && log.isDebugOn())
log.trace("testConfiguration",
"com.sun.management.config.file="+path);
checkSslConfiguration();
final JMXConnectorServer cs;
try {
cs = ConnectorBootstrap.initialize();
} catch (AgentConfigurationError x) {
if (x.getCause() instanceof ExportException) {
if (x.getCause().getCause() instanceof BindException) {
throw (BindException)x.getCause().getCause();
for (int i = 0; i < MAX_GET_FREE_PORT_TRIES; i++) {
try {
int port = jdk.testlibrary.Utils.getFreePort();
final String path;
try {
path=(file==null)?null:file.getCanonicalPath();
} catch(IOException x) {
final String err = "Failed to test configuration " + file +
": " + x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
}
}
final String err = "Failed to initialize connector:" +
"\n\tcom.sun.management.jmxremote.port=" + port +
((path!=null)?"\n\tcom.sun.management.config.file="+path:
"\n\t"+config) +
"\n\tError is: " + x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
} catch (Exception x) {
log.debug("testConfiguration",x);
return x.toString();
}
final String config = (path==null)?"Default config file":path;
try {
JMXServiceURL url =
new JMXServiceURL("rmi",null,0,"/jndi/rmi://localhost:"+
port+"/jmxrmi");
System.out.println("***");
System.out.println("*** Testing configuration (port=" + port + "): "
+ path);
System.out.println("***");
try {
testCommunication(url);
} catch (Exception x) {
final String err = "Failed to connect to agent {url="+url+
"}: " + x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
}
} catch (Exception x) {
final String err = "Failed to test configuration "+config+
": "+x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
} finally {
try {
cs.stop();
} catch (Exception x) {
final String err = "Failed to terminate: "+x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
System.setProperty("com.sun.management.jmxremote.port",
Integer.toString(port));
if (path != null)
System.setProperty("com.sun.management.config.file", path);
else
System.getProperties().remove("com.sun.management.config.file");
log.trace("testConfiguration","com.sun.management.jmxremote.port="+port);
if (path != null && log.isDebugOn())
log.trace("testConfiguration",
"com.sun.management.config.file="+path);
checkSslConfiguration();
final JMXConnectorServer cs;
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:
"\n\t"+config) +
"\n\tError is: " + x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
} catch (Exception x) {
log.debug("testConfiguration",x);
return x.toString();
}
try {
JMXServiceURL url =
new JMXServiceURL("rmi",null,0,"/jndi/rmi://localhost:"+
port+"/jmxrmi");
try {
testCommunication(url);
} catch (Exception x) {
final String err = "Failed to connect to agent {url="+url+
"}: " + x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
}
} catch (Exception x) {
final String err = "Failed to test configuration "+config+
": "+x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
return err;
} finally {
try {
cs.stop();
} catch (Exception x) {
final String err = "Failed to terminate: "+x;
log.trace("testConfiguration",err);
log.debug("testConfiguration",x);
}
}
System.out.println("Configuration " + config + " successfully tested");
return null;
} catch(BindException ex) {
}
}
System.out.println("Configuration " + config + " successfully tested");
return null;
System.err.println("Cannot find a free port after " + MAX_GET_FREE_PORT_TRIES + " tries");
return "Failed: cannot find a free port after " + MAX_GET_FREE_PORT_TRIES + " tries";
}
/**
@ -720,23 +718,16 @@ public class RmiBootstrapTest {
* The test is assumed to have succeeded if the bootstrap fails.
* @return null if the test succeeds, an error message otherwise.
**/
private String testConfigurationKo(File conf,int port) {
private String testConfigurationKo(File conf) throws InterruptedException, IOException {
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
}
}
errStr = testConfiguration(conf);
if (errStr == null) {
return "Configuration " +
conf + " should have failed!";
}
System.out.println("Configuration " +
conf + " failed as expected");
log.debug("runko","Error was: " + errStr);
log.debug("runko", "Error was: " + errStr);
return null;
}
@ -747,26 +738,16 @@ public class RmiBootstrapTest {
* *ko.properties: bootstrap or connection should fail.
* @return null if the test succeeds, an error message otherwise.
**/
private String testConfigurationFile(String fileName) {
private String testConfigurationFile(String fileName) throws InterruptedException, IOException {
File file = new File(fileName);
final String portStr = System.getProperty("rmi.port",null);
final int port = portStr != null ?
Integer.parseInt(portStr) : basePort;
if (fileName.endsWith("ok.properties")) {
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";
errStr = testConfiguration(file);
return errStr;
}
if (fileName.endsWith("ko.properties")) {
return testConfigurationKo(file,port+testPort++);
return testConfigurationKo(file);
}
return fileName +
": test file suffix must be one of [ko|ok].properties";
@ -777,17 +758,14 @@ public class RmiBootstrapTest {
* (see findConfigurationFilesKo() and testConfigurationKo())
* @throws RuntimeException if the test fails.
**/
public void runko() {
final String portStr = System.getProperty("rmi.port",null);
final int port = portStr != null ?
Integer.parseInt(portStr) : basePort;
public void runko() throws InterruptedException, IOException {
final File[] conf = findConfigurationFilesKo();
if ((conf == null)||(conf.length == 0))
throw new RuntimeException("No configuration found");
String errStr;
for (int i=0;i<conf.length;i++) {
errStr = testConfigurationKo(conf[i],port+testPort++);
errStr = testConfigurationKo(conf[i]);
if (errStr != null) {
throw new RuntimeException(errStr);
}
@ -800,24 +778,14 @@ public class RmiBootstrapTest {
* (see findConfigurationFilesOk() and testConfiguration())
* @throws RuntimeException if the test fails.
**/
public void runok() {
final String portStr = System.getProperty("rmi.port",null);
final int port = portStr != null ?
Integer.parseInt(portStr) : basePort;
public void runok() throws InterruptedException, IOException {
final File[] conf = findConfigurationFilesOk();
if ((conf == null)||(conf.length == 0))
throw new RuntimeException("No configuration found");
String errStr = null;
for (int i=0;i<conf.length;i++) {
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
}
}
errStr = testConfiguration(conf[i]);
if (errStr != null) {
throw new RuntimeException(errStr);
}
@ -840,7 +808,7 @@ public class RmiBootstrapTest {
* (see runko() and runok()).
* @throws RuntimeException if the test fails.
**/
public void run() {
public void run() throws InterruptedException, IOException {
runok();
runko();
}
@ -854,7 +822,7 @@ public class RmiBootstrapTest {
* indicated by the System property "test.src".
* @throws RuntimeException if the test fails.
**/
public void run(String args[]) {
public void run(String args[]) throws InterruptedException, IOException {
if (args.length == 0) {
run() ; return;
}
@ -871,7 +839,11 @@ public class RmiBootstrapTest {
* exit(1) if the test fails.
**/
public static void main(String args[]) throws Exception {
setupBasePort();
try {
MAX_GET_FREE_PORT_TRIES = Integer.parseInt(System.getProperty("test.getfreeport.max.tries", "10"));
} catch (NumberFormatException ex) {
}
RmiBootstrapTest manager = new RmiBootstrapTest();
try {
manager.run(args);
@ -886,9 +858,4 @@ 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;
}
}
}

View File

@ -26,7 +26,12 @@
# @bug 6528083
# @summary Test RMI Bootstrap
#
# @build TestLogger RmiBootstrapTest Utils
# @library /lib/testlibrary
# @library /lib/testlibrary
# @build jdk.testlibrary.Utils
# @build TestLogger
# @build Utils
# @build RmiBootstrapTest
# @run shell/timeout=300 RmiBootstrapTest.sh
# Define the Java class test name

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 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
@ -21,69 +21,193 @@
* questions.
*/
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import jdk.testlibrary.OutputAnalyzer;
import jdk.testlibrary.ProcessTools;
import jdk.testlibrary.Utils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.BindException;
import java.nio.charset.Charset;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
import java.util.regex.Pattern;
/**
* @test
* @library /lib/testlibrary
* @bug 6228231
* @summary Test that RMI registry uses SSL.
* @build jdk.testlibrary.Utils
* @build jdk.testlibrary.ProcessTools
* @build jdk.testlibrary.OutputAnalyzer
* @build RmiRegistrySslTestApp
* @run main/timeout=300 RmiRegistrySslTest
* @author Luis-Miguel Alventosa, Taras Ledkov
*/
public class RmiRegistrySslTest {
private final String TEST_CLASS_PATH = System.getProperty("test.class.path");
private final String TEST_CLASSES = System.getProperty("test.classes");
private final String TEST_SRC = System.getProperty("test.src");
private final FileSystem FS = FileSystems.getDefault();
static final String ok = "OK: Found jmxrmi entry in RMIRegistry!";
static final String ko = "KO: Did not find jmxrmi entry in RMIRegistry!";
static final String ko2 = "KO: Did not get expected exception!";
static final String okException = "OK: Got expected exception!";
static final String koException = "KO: Got unexpected exception!";
private final Path libDir = FS.getPath(TEST_CLASSES, "lib");
private final Path rmiRegistryTemplate = FS.getPath(TEST_SRC, "rmiregistry.properties");
private final Path rmiRegistrySslTemplate = FS.getPath(TEST_SRC, "rmiregistryssl.properties");
private final Path rmiRegistryFile = libDir.resolve("rmiregistry.properties");
private final Path rmiRegistrySslFile = libDir.resolve("rmiregistryssl.properties");
private final String className = "RmiRegistrySslTestApp";
private int failures = 0;
private int port = 4444;
private static int MAX_GET_FREE_PORT_TRIES = 10;
private Map<String, Object> model = new HashMap<>();
public static void main(String args[]) throws Exception {
private RmiRegistrySslTest() {
try {
MAX_GET_FREE_PORT_TRIES = Integer.parseInt(System.getProperty("test.getfreeport.max.tries", "10"));
} catch (NumberFormatException ex) {
}
}
System.out.println("RmiRegistry lookup...");
private void initPort() {
try {
port = Utils.getFreePort();
} catch (Exception e) {
}
model.put("${getFreePort}", new Integer(port));
}
String testID = System.getProperty("testID");
private void initTestEnvironment() throws IOException {
initPort();
if ("Test1".equals(testID)) {
Files.deleteIfExists(rmiRegistryFile);
Files.deleteIfExists(rmiRegistrySslFile);
libDir.toFile().mkdir();
createFileByTemplate(rmiRegistryTemplate, rmiRegistryFile, model);
createFileByTemplate(rmiRegistrySslTemplate, rmiRegistrySslFile, model);
}
public static void createFileByTemplate(Path template, Path out, Map<String, Object> model) throws IOException {
if (Files.exists(out) && Files.isRegularFile(out)) {
try {
Registry registry = LocateRegistry.getRegistry(4444);
String[] list = registry.list();
if ("jmxrmi".equals(list[0])) {
System.out.println(ok);
} else {
System.out.println(ko);
throw new IllegalArgumentException(ko);
}
} catch (Exception e) {
System.out.println(koException);
e.printStackTrace(System.out);
throw e;
Files.delete(out);
} catch (Exception ex) {
System.out.println("WARNING: " + out.toFile().getAbsolutePath() + " already exists - unable to remove old copy");
ex.printStackTrace();
}
}
if ("Test2".equals(testID)) {
try {
Registry registry = LocateRegistry.getRegistry(4444);
String[] list = registry.list();
throw new IllegalArgumentException(ko2);
} catch (Exception e) {
System.out.println(okException);
e.printStackTrace(System.out);
return;
}
}
if ("Test3".equals(testID)) {
try {
Registry registry = LocateRegistry.getRegistry(
null, 4444, new SslRMIClientSocketFactory());
String[] list = registry.list();
if ("jmxrmi".equals(list[0])) {
System.out.println(ok);
} else {
System.out.println(ko);
throw new IllegalArgumentException(ko);
try (BufferedReader br = Files.newBufferedReader(template, Charset.defaultCharset());
BufferedWriter bw = Files.newBufferedWriter(out, Charset.defaultCharset())) {
String line;
while ((line = br.readLine()) != null) {
if (model != null) {
for (Map.Entry<String, Object> macro : model.entrySet()) {
line = line.replaceAll(Pattern.quote(macro.getKey()), macro.getValue().toString());
}
}
} catch (Exception e) {
System.out.println(koException);
e.printStackTrace(System.out);
throw e;
bw.write(line, 0, line.length());
bw.newLine();
}
}
}
public void runTest(String[] args) throws Exception {
test1();
test2();
test3();
if (failures == 0) {
System.out.println("All test(s) passed");
} else {
throw new Error(String.format("%d test(s) failed", failures));
}
}
private void test1() throws Exception {
System.out.println("-------------------------------------------------------------");
System.out.println(getClass().getName() + " : Non SSL RMIRegistry - Non SSL Lookup");
System.out.println("-------------------------------------------------------------");
int res = doTest("-DtestID=Test1",
"-Dcom.sun.management.config.file=" + rmiRegistryFile.toFile().getAbsolutePath());
if (res != 0) {
++failures;
}
}
private void test2() throws Exception {
System.out.println("-------------------------------------------------------------");
System.out.println(getClass().getName() + " : SSL RMIRegistry - Non SSL Lookup");
System.out.println("-------------------------------------------------------------");
int res = doTest("-DtestID=Test2",
"-Dcom.sun.management.config.file=" + rmiRegistrySslFile.toFile().getAbsolutePath());
if (res != 0) {
++failures;
}
}
private void test3() throws Exception {
System.out.println("-------------------------------------------------------------");
System.out.println(getClass().getName() + " : SSL RMIRegistry - SSL Lookup");
System.out.println("-------------------------------------------------------------");
int res = doTest("-DtestID=Test3",
"-Djavax.net.ssl.keyStore=" + FS.getPath(TEST_SRC, "ssl", "keystore").toFile().getAbsolutePath(),
"-Djavax.net.ssl.keyStorePassword=password",
"-Djavax.net.ssl.trustStore=" + FS.getPath(TEST_SRC, "ssl", "truststore").toFile().getAbsolutePath(),
"-Djavax.net.ssl.trustStorePassword=trustword",
"-Dcom.sun.management.config.file=" + rmiRegistrySslFile.toFile().getAbsolutePath());
if (res != 0) {
++failures;
}
}
private int doTest(String... args) throws Exception {
for (int i = 0; i < MAX_GET_FREE_PORT_TRIES; ++i) {
initTestEnvironment();
List<String> command = new ArrayList<>();
command.addAll(Utils.getVmOptions());
command.add("-Dtest.src=" + TEST_SRC);
command.add("-Dtest.rmi.port=" + port);
command.addAll(Arrays.asList(args));
command.add("-cp");
command.add(TEST_CLASS_PATH);
command.add(className);
ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder(command.toArray(new String[command.size()]));
Process p = processBuilder.start();
OutputAnalyzer output = new OutputAnalyzer(p);
System.out.println("test output:");
System.out.println(output.getOutput());
if (!output.getOutput().contains("Exception thrown by the agent : " +
"java.rmi.server.ExportException: Port already in use")) {
return p.exitValue();
}
}
throw new Error("Cannot find free port");
}
public static void main(String[] args) throws Exception {
RmiRegistrySslTest test = new RmiRegistrySslTest();
test.runTest(args);
}
}

View File

@ -1,64 +0,0 @@
#
# Copyright (c) 2005, 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 6228231
# @summary Test that RMI registry uses SSL.
# @author Luis-Miguel Alventosa
# @run clean RmiRegistrySslTest
# @run build RmiRegistrySslTest
# @run shell/timeout=300 RmiRegistrySslTest.sh
echo -------------------------------------------------------------
echo `basename $0 .sh` : Non SSL RMIRegistry - Non SSL Lookup
echo -------------------------------------------------------------
${TESTJAVA}/bin/java ${TESTVMOPTS} -classpath ${TESTCLASSES} \
-Dtest.src=${TESTSRC} \
-DtestID=Test1 \
-Dcom.sun.management.config.file=${TESTSRC}/rmiregistry.properties \
RmiRegistrySslTest || exit $?
echo -------------------------------------------------------------
echo `basename $0 .sh` : SSL RMIRegistry - Non SSL Lookup
echo -------------------------------------------------------------
${TESTJAVA}/bin/java ${TESTVMOPTS} -classpath ${TESTCLASSES} \
-Dtest.src=${TESTSRC} \
-DtestID=Test2 \
-Dcom.sun.management.config.file=${TESTSRC}/rmiregistryssl.properties \
RmiRegistrySslTest || exit $?
echo -------------------------------------------------------------
echo `basename $0 .sh` : SSL RMIRegistry - SSL Lookup
echo -------------------------------------------------------------
${TESTJAVA}/bin/java ${TESTVMOPTS} -classpath ${TESTCLASSES} \
-Dtest.src=${TESTSRC} \
-DtestID=Test3 \
-Djavax.net.ssl.keyStore=${TESTSRC}/ssl/keystore \
-Djavax.net.ssl.keyStorePassword=password \
-Djavax.net.ssl.trustStore=${TESTSRC}/ssl/truststore \
-Djavax.net.ssl.trustStorePassword=trustword \
-Dcom.sun.management.config.file=${TESTSRC}/rmiregistryssl.properties \
RmiRegistrySslTest || exit $?

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2005, 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.
*/
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import jdk.testlibrary.Utils;
public class RmiRegistrySslTestApp {
static final String ok = "OK: Found jmxrmi entry in RMIRegistry!";
static final String ko = "KO: Did not find jmxrmi entry in RMIRegistry!";
static final String ko2 = "KO: Did not get expected exception!";
static final String okException = "OK: Got expected exception!";
static final String koException = "KO: Got unexpected exception!";
public static void main(String args[]) throws Exception {
System.out.println("RmiRegistry lookup...");
String testID = System.getProperty("testID");
int port = Integer.parseInt(System.getProperty("test.rmi.port"));
if ("Test1".equals(testID)) {
try {
Registry registry = LocateRegistry.getRegistry(port);
String[] list = registry.list();
if ("jmxrmi".equals(list[0])) {
System.out.println(ok);
} else {
System.out.println(ko);
throw new IllegalArgumentException(ko);
}
} catch (Exception e) {
System.out.println(koException);
e.printStackTrace(System.out);
throw e;
}
}
if ("Test2".equals(testID)) {
try {
Registry registry = LocateRegistry.getRegistry(port);
String[] list = registry.list();
throw new IllegalArgumentException(ko2);
} catch (Exception e) {
System.out.println(okException);
e.printStackTrace(System.out);
return;
}
}
if ("Test3".equals(testID)) {
try {
Registry registry = LocateRegistry.getRegistry(
null, port, new SslRMIClientSocketFactory());
String[] list = registry.list();
if ("jmxrmi".equals(list[0])) {
System.out.println(ok);
} else {
System.out.println(ko);
throw new IllegalArgumentException(ko);
}
} catch (Exception e) {
System.out.println(koException);
e.printStackTrace(System.out);
throw e;
}
}
}
}

View File

@ -26,7 +26,11 @@
# @bug 6528083
# @summary Test RMI Bootstrap with SSL
#
# @build TestLogger RmiBootstrapTest Utils
# @library /lib/testlibrary
# @build jdk.testlibrary.Utils
# @build TestLogger
# @build Utils
# @build RmiBootstrapTest
# @run shell/timeout=300 RmiSslBootstrapTest.sh
# Define the Java class test name

View File

@ -45,8 +45,6 @@ import javax.management.*;
import sun.management.AgentConfigurationError;
import util.TestLogger;
/**
* <p>This class implements unit test for RMI Bootstrap.
* When called with no arguments main() looks in the directory indicated

View File

@ -0,0 +1,69 @@
/*
* Copyright (c) 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
* 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.
*/
import java.io.IOException;
/**
* @test
* @library /lib/testlibrary
* @bug 6557093
* @bug 6557093
* @build jdk.testlibrary.Utils
* @build jdk.testlibrary.ProcessTools
* @build jdk.testlibrary.OutputAnalyzer
* @build Dummy
* @build AbstractFilePermissionTest
* @summary Check SSL config file permission for out-of-the-box management
* @run main/timeout=300 SSLConfigFilePermissionTest
*
* @author Taras Ledkov
*/
public class SSLConfigFilePermissionTest extends AbstractFilePermissionTest {
private final String TEST_SRC = System.getProperty("test.src");
private SSLConfigFilePermissionTest() {
super("jmxremote.ssl.config");
}
public void testSetup() throws IOException {
createFile(mgmt,
"# management.properties",
"com.sun.management.jmxremote.authenticate=false",
"com.sun.management.jmxremote.ssl.config.file=" + file2PermissionTest.toFile().getAbsolutePath());
createFile(file2PermissionTest,
"# management.properties",
"javax.net.ssl.keyStore = " +
FS.getPath(TEST_SRC, "ssl", "keystore").toFile().getAbsolutePath(),
"javax.net.ssl.keyStorePassword = password");
}
public static void main(String[] args) throws Exception {
SSLConfigFilePermissionTest test = new SSLConfigFilePermissionTest();
test.runTest(args);
}
}

View File

@ -1,128 +0,0 @@
#!/bin/sh
#
# Copyright (c) 2007, 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 6557093
# @summary Check SSL config file permission for out-of-the-box management
#
# @run shell SSLConfigFilePermissionTest.sh
createJavaFile()
{
cat << EOF > $1/$2.java
class $2 {
public static void main(String[] args) {
System.out.println("Inside main method...");
}
}
EOF
}
createManagementConfigFile() {
cat << EOF > $1
# management.properties
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl.config.file=$2
EOF
}
createSSLConfigFile() {
if [ -f "$1" ] ; then
rm -f $1 || echo WARNING: $1 already exists - unable to remove old copy
fi
cat << EOF > $1
javax.net.ssl.keyStore=$2
javax.net.ssl.keyStorePassword=password
EOF
}
# Check we are run from jtreg
if [ -z "${TESTCLASSES}" ]; then
echo "Test is designed to be run from jtreg only"
exit 0
fi
# Test not suitable for Windows as chmod may not be able to
# security the password file.
os=`uname -s`
if [ "$os" != "Linux" -a "$os" != "SunOS" ]; then
echo "Test not designed to run on this operating system, skipping..."
exit 0
fi
# Create management and SSL configuration files
LIBDIR=${TESTCLASSES}/lib
MGMT=${LIBDIR}/management.properties
SSL=${LIBDIR}/jmxremote.ssl.config
rm -f ${MGMT}
rm -f ${SSL}
mkdir ${LIBDIR} 2>&1
createJavaFile ${TESTCLASSES} Dummy
createManagementConfigFile ${MGMT} ${SSL}
createSSLConfigFile ${SSL} ${TESTSRC}/ssl/keystore
# Compile test
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${TESTCLASSES} ${TESTCLASSES}/Dummy.java
JAVA=${TESTJAVA}/bin/java
CLASSPATH=${TESTCLASSES}
export CLASSPATH
failures=0
mp=-Dcom.sun.management.config.file=${MGMT}
pp=-Dcom.sun.management.jmxremote.port=4999
go() {
echo ''
sh -xc "$JAVA ${TESTVMOPTS} $1 $2 $3 $4 $5 $6 $7 $8" 2>&1
if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
}
# Test 1 - SSL config file is secure - VM should start
chmod 700 ${SSL}
sh -xc "$JAVA ${TESTVMOPTS} $mp $pp Dummy" 2>&1
if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
# Test 2 - SSL config file is not secure - VM should fail to start
chmod o+rx ${SSL}
sh -xc "$JAVA ${TESTVMOPTS} $mp $pp Dummy" 2>&1
if [ $? = 0 ]; then failures=`expr $failures + 1`; fi
# Reset the file permissions on the generated SSL config file
chmod 777 ${SSL}
#
# Results
#
echo ''
if [ $failures -gt 0 ];
then echo "$failures test(s) failed";
else echo "All test(s) passed"; fi
exit $failures

View File

@ -20,7 +20,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package util;
import java.util.logging.Logger;
import java.util.logging.Level;

View File

@ -24,7 +24,7 @@
# ################ Management Agent Port #########################
#
# For setting the JMX RMI agent port use the following line
com.sun.management.jmxremote.port=4444
com.sun.management.jmxremote.port=${getFreePort}
#
# For setting the SNMP agent port use the following line
# com.sun.management.snmp.port=<port-number>

View File

@ -24,7 +24,7 @@
# ################ Management Agent Port #########################
#
# For setting the JMX RMI agent port use the following line
com.sun.management.jmxremote.port=4444
com.sun.management.jmxremote.port=${getFreePort}
#
# For setting the SNMP agent port use the following line
# com.sun.management.snmp.port=<port-number>