8022221: Intermittent test failures in sun/management/jmxremote/startstop/JMXStartStopTest.sh
Reviewed-by: sla
This commit is contained in:
parent
6609c71505
commit
28dabe2b6e
jdk/test
lib/testlibrary/jdk/testlibrary
sun/management/jmxremote/startstop
@ -32,6 +32,7 @@ import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
@ -39,6 +40,7 @@ import java.util.concurrent.Phaser;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import sun.management.VMManagement;
|
||||
|
||||
@ -69,10 +71,38 @@ public final class ProcessTools {
|
||||
*/
|
||||
public static Process startProcess(String name,
|
||||
ProcessBuilder processBuilder)
|
||||
throws IOException {
|
||||
return startProcess(name, processBuilder, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Starts a process from its builder.</p>
|
||||
* <span>The default redirects of STDOUT and STDERR are started</span>
|
||||
* <p>It is possible to monitor the in-streams via the provided {@code consumer}
|
||||
* @param name The process name
|
||||
* @param consumer {@linkplain Consumer} instance to process the in-streams
|
||||
* @param processBuilder The process builder
|
||||
* @return Returns the initialized process
|
||||
* @throws IOException
|
||||
*/
|
||||
public static Process startProcess(String name,
|
||||
ProcessBuilder processBuilder,
|
||||
Consumer<String> consumer)
|
||||
throws IOException {
|
||||
Process p = null;
|
||||
try {
|
||||
p = startProcess(name, processBuilder, null, -1, TimeUnit.NANOSECONDS);
|
||||
p = startProcess(
|
||||
name,
|
||||
processBuilder,
|
||||
line -> {
|
||||
if (consumer != null) {
|
||||
consumer.accept(line);
|
||||
}
|
||||
return false;
|
||||
},
|
||||
-1,
|
||||
TimeUnit.NANOSECONDS
|
||||
);
|
||||
} catch (InterruptedException | TimeoutException e) {
|
||||
// can't ever happen
|
||||
}
|
||||
@ -111,25 +141,28 @@ public final class ProcessTools {
|
||||
|
||||
stdout.addPump(new LineForwarder(name, System.out));
|
||||
stderr.addPump(new LineForwarder(name, System.err));
|
||||
final Phaser phs = new Phaser(1);
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
if (linePredicate != null) {
|
||||
stdout.addPump(new StreamPumper.LinePump() {
|
||||
StreamPumper.LinePump pump = new StreamPumper.LinePump() {
|
||||
@Override
|
||||
protected void processLine(String line) {
|
||||
if (linePredicate.test(line)) {
|
||||
if (phs.getRegisteredParties() > 0) {
|
||||
phs.arriveAndDeregister();
|
||||
}
|
||||
if (latch.getCount() > 0 && linePredicate.test(line)) {
|
||||
latch.countDown();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
stdout.addPump(pump);
|
||||
stderr.addPump(pump);
|
||||
}
|
||||
Future<Void> stdoutTask = stdout.process();
|
||||
Future<Void> stderrTask = stderr.process();
|
||||
|
||||
try {
|
||||
if (timeout > -1) {
|
||||
phs.awaitAdvanceInterruptibly(0, timeout, unit);
|
||||
long realTimeout = Math.round(timeout * Utils.TIMEOUT_FACTOR);
|
||||
if (!latch.await(realTimeout, unit)) {
|
||||
throw new TimeoutException();
|
||||
}
|
||||
}
|
||||
} catch (TimeoutException | InterruptedException e) {
|
||||
System.err.println("Failed to start a process (thread dump follows)");
|
||||
|
@ -59,6 +59,16 @@ public final class Utils {
|
||||
*/
|
||||
public static final String JAVA_OPTIONS = System.getProperty("test.java.opts", "").trim();
|
||||
|
||||
/**
|
||||
* Returns the value of 'test.timeout.factor' system property
|
||||
* converted to {@code double}.
|
||||
*/
|
||||
public static final double TIMEOUT_FACTOR;
|
||||
static {
|
||||
String toFactor = System.getProperty("test.timeout.factor", "1.0");
|
||||
TIMEOUT_FACTOR = Double.parseDouble(toFactor);
|
||||
}
|
||||
|
||||
private Utils() {
|
||||
// Private constructor to prevent class instantiation
|
||||
}
|
||||
|
@ -21,37 +21,20 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import jdk.testlibrary.ProcessTools;
|
||||
|
||||
public class JMXStartStopDoSomething {
|
||||
|
||||
private static final String lockFileName = "JMXStartStop.lck";
|
||||
|
||||
public static void doSomething() {
|
||||
try {
|
||||
File lockFile = new File(lockFileName);
|
||||
lockFile.createNewFile();
|
||||
|
||||
while(lockFile.exists()) {
|
||||
long datetime = lockFile.lastModified();
|
||||
long epoch = System.currentTimeMillis()/1000;
|
||||
|
||||
// Don't allow test app to run more than an hour
|
||||
if (epoch - datetime > 3600) {
|
||||
System.err.println("Lock is too old. Aborting");
|
||||
return;
|
||||
}
|
||||
Thread.sleep(500);
|
||||
}
|
||||
|
||||
} catch (Throwable e) {
|
||||
System.err.println("Something bad happens:" +e);
|
||||
}
|
||||
public static void doSomething() throws IOException{
|
||||
int r = System.in.read();
|
||||
System.out.println("read: " + r);
|
||||
}
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
System.err.println("main enter");
|
||||
System.out.println("pid:" + ProcessTools.getProcessId());
|
||||
System.out.println("main enter");
|
||||
System.out.flush();
|
||||
doSomething();
|
||||
System.err.println("main exit");
|
||||
System.out.println("main exit");
|
||||
}
|
||||
}
|
||||
|
@ -22,45 +22,60 @@
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.ConnectException;
|
||||
import java.rmi.NoSuchObjectException;
|
||||
import java.rmi.registry.LocateRegistry;
|
||||
import java.rmi.registry.Registry;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.management.*;
|
||||
import javax.management.remote.*;
|
||||
import javax.net.ssl.SSLHandshakeException;
|
||||
|
||||
import sun.management.AgentConfigurationError;
|
||||
import sun.management.jmxremote.ConnectorBootstrap;
|
||||
import jdk.testlibrary.ProcessTools;
|
||||
import jdk.testlibrary.JDKToolLauncher;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 7110104
|
||||
* @library /lib/testlibrary
|
||||
* @build jdk.testlibrary.ProcessTools
|
||||
* @build jdk.testlibrary.JDKToolLauncher
|
||||
* @build jdk.testlibrary.Utils
|
||||
* @build JMXStartStopTest JMXStartStopDoSomething
|
||||
* @run main/othervm JMXStartStopTest
|
||||
* @summary Makes sure that enabling/disabling the management agent through
|
||||
* JCMD achieves the desired results
|
||||
*/
|
||||
public class JMXStartStopTest {
|
||||
private static final String TEST_JDK = System.getProperty("test.jdk");
|
||||
private static final String TEST_SRC = System.getProperty("test.src");
|
||||
|
||||
static boolean verbose = false;
|
||||
private static final boolean verbose = false;
|
||||
|
||||
static void dbg_print(String msg){
|
||||
private static void dbg_print(String msg){
|
||||
if (verbose) {
|
||||
System.err.println("DBG: " +msg);
|
||||
System.out.println("DBG: " +msg);
|
||||
}
|
||||
}
|
||||
|
||||
static void dbg_print(String msg, Throwable ex){
|
||||
if (verbose) {
|
||||
System.err.println("DBG: " + msg + " " + ex.getMessage() );
|
||||
ex.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
public static int listMBeans(MBeanServerConnection server, ObjectName pattern, QueryExp query)
|
||||
private static int listMBeans(MBeanServerConnection server,
|
||||
ObjectName pattern,
|
||||
QueryExp query)
|
||||
throws Exception {
|
||||
|
||||
Set names = server.queryNames(pattern,query);
|
||||
@ -72,10 +87,9 @@ public class JMXStartStopTest {
|
||||
MBeanAttributeInfo[] attrs = info.getAttributes();
|
||||
if (attrs == null)
|
||||
continue;
|
||||
|
||||
for (int j=0; j<attrs.length; j++) {
|
||||
if (attrs[j].isReadable()) {
|
||||
Object o = server.getAttribute(name,attrs[j].getName());
|
||||
for (MBeanAttributeInfo attr : attrs) {
|
||||
if (attr.isReadable()) {
|
||||
Object o = server.getAttribute(name, attr.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -83,11 +97,10 @@ public class JMXStartStopTest {
|
||||
}
|
||||
|
||||
|
||||
public void run_local(String strPid)
|
||||
private static void testConnectLocal(int pid)
|
||||
throws Exception {
|
||||
|
||||
String jmxUrlStr = null;
|
||||
int pid = Integer.parseInt(strPid);
|
||||
|
||||
try {
|
||||
jmxUrlStr = sun.management.ConnectorAddressLink.importFrom(pid);
|
||||
@ -106,8 +119,8 @@ public class JMXStartStopTest {
|
||||
|
||||
int count = listMBeans(conn,pattern,null);
|
||||
if (count == 0)
|
||||
throw new Exception("Expected at least one matching "+ "MBean for "+pattern);
|
||||
|
||||
throw new Exception("Expected at least one matching "+
|
||||
"MBean for "+pattern);
|
||||
|
||||
} catch (IOException e) {
|
||||
dbg_print("Cannot find process : " + pid);
|
||||
@ -115,20 +128,40 @@ public class JMXStartStopTest {
|
||||
}
|
||||
}
|
||||
|
||||
public void run(String args[]) throws Exception {
|
||||
private static void testNoConnect(int port) throws Exception {
|
||||
testNoConnect(port, 0);
|
||||
}
|
||||
|
||||
private static void testNoConnect(int port, int rmiPort) throws Exception {
|
||||
try {
|
||||
testConnect(port, rmiPort);
|
||||
throw new Exception("Didn't expect the management agent running");
|
||||
} catch (Exception e) {
|
||||
Throwable t = e;
|
||||
while (t != null) {
|
||||
if (t instanceof NoSuchObjectException ||
|
||||
t instanceof ConnectException ||
|
||||
t instanceof SSLHandshakeException) {
|
||||
break;
|
||||
}
|
||||
t = t.getCause();
|
||||
}
|
||||
if (t == null) {
|
||||
throw new Exception("Unexpected exception", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void testConnect(int port) throws Exception {
|
||||
testConnect(port, 0);
|
||||
}
|
||||
|
||||
private static void testConnect(int port, int rmiPort) throws Exception {
|
||||
|
||||
dbg_print("RmiRegistry lookup...");
|
||||
|
||||
int port = 4567;
|
||||
if (args != null && args.length > 0) {
|
||||
port = Integer.parseInt(args[0]);
|
||||
}
|
||||
dbg_print("Using port: " + port);
|
||||
|
||||
int rmiPort = 0;
|
||||
if (args != null && args.length > 1) {
|
||||
rmiPort = Integer.parseInt(args[1]);
|
||||
}
|
||||
dbg_print("Using rmi port: " + rmiPort);
|
||||
|
||||
Registry registry = LocateRegistry.getRegistry(port);
|
||||
@ -140,8 +173,13 @@ public class JMXStartStopTest {
|
||||
}
|
||||
|
||||
String jmxUrlStr = (rmiPort != 0) ?
|
||||
String.format("service:jmx:rmi://localhost:%d/jndi/rmi://localhost:%d/jmxrmi", rmiPort, port) :
|
||||
String.format("service:jmx:rmi:///jndi/rmi://localhost:%d/jmxrmi",port);
|
||||
String.format(
|
||||
"service:jmx:rmi://localhost:%d/jndi/rmi://localhost:%d/jmxrmi",
|
||||
rmiPort,
|
||||
port) :
|
||||
String.format(
|
||||
"service:jmx:rmi:///jndi/rmi://localhost:%d/jmxrmi",
|
||||
port);
|
||||
|
||||
JMXServiceURL url = new JMXServiceURL(jmxUrlStr);
|
||||
Map m = new HashMap();
|
||||
@ -153,29 +191,632 @@ public class JMXStartStopTest {
|
||||
|
||||
int count = listMBeans(conn,pattern,null);
|
||||
if (count == 0)
|
||||
throw new Exception("Expected at least one matching "+ "MBean for "+pattern);
|
||||
throw new Exception("Expected at least one matching " +
|
||||
"MBean for " + pattern);
|
||||
}
|
||||
|
||||
private static class Failure {
|
||||
private final Throwable cause;
|
||||
private final String msg;
|
||||
|
||||
public static void main(String args[]) {
|
||||
JMXStartStopTest manager = new JMXStartStopTest();
|
||||
try {
|
||||
if (args!=null && args[0].equals("local")) {
|
||||
manager.run_local(args[1]);
|
||||
} else {
|
||||
manager.run(args);
|
||||
}
|
||||
} catch (RuntimeException r) {
|
||||
dbg_print("No connection: ", r);
|
||||
System.out.print("NO_CONN");
|
||||
System.exit(1);
|
||||
} catch (Throwable t) {
|
||||
dbg_print("No connection: ", t);
|
||||
System.out.print("NO_CONN");
|
||||
System.exit(2);
|
||||
public Failure(Throwable cause, String msg) {
|
||||
this.cause = cause;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public Failure(String msg) {
|
||||
this(null, msg);
|
||||
}
|
||||
|
||||
public Throwable getCause() {
|
||||
return cause;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 97 * hash + Objects.hashCode(this.cause);
|
||||
hash = 97 * hash + Objects.hashCode(this.msg);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final Failure other = (Failure) obj;
|
||||
if (!Objects.equals(this.cause, other.cause)) {
|
||||
return false;
|
||||
}
|
||||
if (!Objects.equals(this.msg, other.msg)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (cause != null) {
|
||||
return msg + "\n" + cause;
|
||||
} else {
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
System.out.print("OK_CONN");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
private static List<Failure> failures = new ArrayList<>();
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
for (int i=0;i<3;i++) {
|
||||
System.out.println("=== PASS " + i + " ===");
|
||||
for (Method m : JMXStartStopTest.class.getDeclaredMethods()) {
|
||||
if (m.getName().startsWith("test_")) {
|
||||
try {
|
||||
m.invoke(null);
|
||||
System.out.println("=== PASSED\n");
|
||||
} catch (Throwable e) {
|
||||
failures.add(new Failure(e, m.getName() + " failed"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!failures.isEmpty()) {
|
||||
for(Failure f : failures) {
|
||||
System.err.println(f.getMsg());
|
||||
f.getCause().printStackTrace(System.err);
|
||||
}
|
||||
throw new Error();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the PID of the test application using JCMD
|
||||
* @return The PID of the test application
|
||||
* @throws InterruptedException
|
||||
* @throws IOException
|
||||
*/
|
||||
private static String getPID() throws InterruptedException, IOException {
|
||||
final AtomicReference<String> pid = new AtomicReference<>();
|
||||
jcmd(
|
||||
null,
|
||||
line -> {
|
||||
if (line.endsWith("JMXStartStopDoSomething")) {
|
||||
pid.set(line.split(" ")[0]);
|
||||
}
|
||||
}
|
||||
);
|
||||
return pid.get();
|
||||
}
|
||||
|
||||
private static class Something {
|
||||
private Process p;
|
||||
private final ProcessBuilder pb;
|
||||
private final String name;
|
||||
private final AtomicBoolean started = new AtomicBoolean(false);
|
||||
private volatile int pid = -1;
|
||||
|
||||
public Something(ProcessBuilder pb, String name) {
|
||||
this.pb = pb;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public synchronized void start() throws InterruptedException, IOException, TimeoutException {
|
||||
if (started.compareAndSet(false, true)) {
|
||||
try {
|
||||
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
|
||||
);
|
||||
} catch (TimeoutException e) {
|
||||
p.destroy();
|
||||
p.waitFor();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getPid() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
public synchronized void stop()
|
||||
throws IOException, InterruptedException {
|
||||
if (started.compareAndSet(true, false)) {
|
||||
p.getOutputStream().write(0);
|
||||
p.getOutputStream().flush();
|
||||
int ec = p.waitFor();
|
||||
if (ec != 0) {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Test application '").append(name);
|
||||
msg.append("' failed with exit code: ");
|
||||
msg.append(ec);
|
||||
|
||||
failures.add(new Failure(msg.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the test application "JMXStartStopDoSomething"
|
||||
* @param name Test run name
|
||||
* @param args Additional arguments
|
||||
* @return Returns a {@linkplain Something} instance representing the run
|
||||
* @throws IOException
|
||||
* @throws InterruptedException
|
||||
* @throws TimeoutException
|
||||
*/
|
||||
private static Something doSomething(String name, String ... args)
|
||||
throws Exception {
|
||||
List<String> pbArgs = new ArrayList<>(Arrays.asList(
|
||||
"-cp",
|
||||
System.getProperty("test.class.path")
|
||||
));
|
||||
pbArgs.addAll(Arrays.asList(args));
|
||||
pbArgs.add("JMXStartStopDoSomething");
|
||||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||
pbArgs.toArray(new String[pbArgs.size()])
|
||||
);
|
||||
Something s = new Something(pb, name);
|
||||
s.start();
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the "jcmd" command
|
||||
*
|
||||
* @param command Command with parameters; space separated string
|
||||
* @throws IOException
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
private static void jcmd(String ... command) throws IOException, InterruptedException {
|
||||
if (command.length == 0) {
|
||||
jcmd(null, (Consumer<String>)null);
|
||||
} else {
|
||||
jcmd(null, command);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the "jcmd" command
|
||||
*
|
||||
* @param c {@linkplain Consumer} instance; may be null
|
||||
* @param command Command with parameters; space separated string
|
||||
* @throws IOException
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
private static void jcmd(Consumer<String> c, String ... command) throws IOException, InterruptedException {
|
||||
jcmd("JMXStartStopDoSomething", c, command);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the "jcmd" command
|
||||
* @param target The target application name (or PID)
|
||||
* @param c {@linkplain Consumer} instance; may be null
|
||||
* @param command Command with parameters; space separated string
|
||||
* @throws IOException
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
private static void jcmd(String target, final Consumer<String> c, String ... command) throws IOException, InterruptedException {
|
||||
dbg_print("[jcmd] " + (command.length > 0 ? command[0] : "list"));
|
||||
|
||||
JDKToolLauncher l = JDKToolLauncher.createUsingTestJDK("jcmd");
|
||||
l.addToolArg(target);
|
||||
for(String cmd : command) {
|
||||
l.addToolArg(cmd);
|
||||
}
|
||||
Process p = ProcessTools.startProcess(
|
||||
"jcmd",
|
||||
new ProcessBuilder(l.getCommand()),
|
||||
c
|
||||
);
|
||||
|
||||
p.waitFor();
|
||||
dbg_print("[jcmd] --------");
|
||||
}
|
||||
|
||||
private static final String CMD_STOP = "ManagementAgent.stop";
|
||||
private static final String CMD_START= "ManagementAgent.start";
|
||||
private static final String CMD_START_LOCAL = "ManagementAgent.start_local";
|
||||
private static final int port1 = 50234;
|
||||
private static final int port2 = 50235;
|
||||
|
||||
private static void test_01() throws Exception {
|
||||
// Run an app with JMX enabled stop it and
|
||||
// restart on other port
|
||||
|
||||
System.out.println("**** Test one ****");
|
||||
|
||||
Something s = doSomething(
|
||||
"test_01",
|
||||
"-Dcom.sun.management.jmxremote.port=" + port1,
|
||||
"-Dcom.sun.management.jmxremote.authenticate=false",
|
||||
"-Dcom.sun.management.jmxremote.ssl=false");
|
||||
|
||||
try {
|
||||
testConnect(port1);
|
||||
|
||||
jcmd(CMD_STOP);
|
||||
testNoConnect(port1);
|
||||
|
||||
jcmd(CMD_START, "jmxremote.port=" + port2);
|
||||
testConnect(port2);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_02() throws Exception {
|
||||
// Run an app without JMX enabled
|
||||
// start JMX by jcmd
|
||||
|
||||
System.out.println("**** Test two ****");
|
||||
|
||||
Something s = doSomething("test_02");
|
||||
try {
|
||||
jcmd(CMD_START,
|
||||
"jmxremote.port=" + port1,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
|
||||
testConnect(port1);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_03() throws Exception {
|
||||
// Run an app without JMX enabled
|
||||
// start JMX by jcmd on one port than on other one
|
||||
|
||||
System.out.println("**** Test three ****");
|
||||
|
||||
Something s = doSomething("test_03");
|
||||
try {
|
||||
jcmd(CMD_START,
|
||||
"jmxremote.port=" + port1,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
|
||||
// Second agent shouldn't start
|
||||
jcmd(CMD_START,
|
||||
"jmxremote.port=" + port2,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
|
||||
// First agent should connect
|
||||
testConnect(port1);
|
||||
|
||||
// Second agent should not connect
|
||||
testNoConnect(port2);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_04() throws Exception {
|
||||
// Run an app without JMX enabled
|
||||
// start JMX by jcmd on one port, specify rmi port explicitly
|
||||
|
||||
System.out.println("**** Test four ****");
|
||||
|
||||
Something s = doSomething("test_04");
|
||||
|
||||
try {
|
||||
jcmd(CMD_START,
|
||||
"jmxremote.port=" + port1,
|
||||
"jmxremote.rmi.port=" + port2,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
|
||||
testConnect(port1, port2);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_05() throws Exception {
|
||||
// Run an app without JMX enabled, it will enable local server
|
||||
// but should leave remote server disabled
|
||||
|
||||
System.out.println("**** Test five ****");
|
||||
|
||||
Something s = doSomething("test_05");
|
||||
try {
|
||||
jcmd(CMD_START_LOCAL);
|
||||
|
||||
testNoConnect(port1);
|
||||
testConnectLocal(s.getPid());
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private 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
|
||||
// Check for valid messages in the output
|
||||
|
||||
System.out.println("**** Test six ****");
|
||||
|
||||
Something s = doSomething("test_06");
|
||||
|
||||
try {
|
||||
jcmd(CMD_START,
|
||||
"jmxremote.port=" + port1,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
|
||||
testConnect(port1, port2);
|
||||
|
||||
final boolean[] checks = new boolean[3];
|
||||
jcmd(
|
||||
line -> {
|
||||
if (line.equals("java.lang.RuntimeException: Invalid agent state")) {
|
||||
checks[0] = true;
|
||||
}
|
||||
},
|
||||
CMD_START,
|
||||
"jmxremote.port=" + port1,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
|
||||
jcmd(
|
||||
line -> {
|
||||
if (line.equals("java.lang.RuntimeException: Invalid agent state")) {
|
||||
checks[1] = true;
|
||||
}
|
||||
},
|
||||
CMD_START,
|
||||
"jmxremote.port=" + port2,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
|
||||
jcmd(CMD_STOP);
|
||||
jcmd(CMD_STOP);
|
||||
|
||||
jcmd(
|
||||
line -> {
|
||||
if (line.contains("Port already in use: 22")) {
|
||||
checks[2] = true;
|
||||
}
|
||||
},
|
||||
CMD_START,
|
||||
"jmxremote.port=22",
|
||||
"jmxremote.rmi.port=" + port2,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false");
|
||||
if (!checks[0]) {
|
||||
throw new Exception("Starting agent on port " + port1 + " should " +
|
||||
"report an invalid agent state");
|
||||
}
|
||||
if (!checks[1]) {
|
||||
throw new Exception("Starting agent on poprt " + port2 + " should " +
|
||||
"report an invalid agent state");
|
||||
}
|
||||
if (!checks[2]) {
|
||||
throw new Exception("Starting agent on port 22 should " +
|
||||
"report port in use");
|
||||
}
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_07() throws Exception {
|
||||
// Run an app without JMX enabled, but with some properties set
|
||||
// in command line.
|
||||
// make sure these properties overriden corectly
|
||||
|
||||
System.out.println("**** Test seven ****");
|
||||
|
||||
Something s = doSomething(
|
||||
"test_07",
|
||||
"-Dcom.sun.management.jmxremote.authenticate=false",
|
||||
"-Dcom.sun.management.jmxremote.ssl=true");
|
||||
|
||||
try {
|
||||
testNoConnect(port1);
|
||||
jcmd(
|
||||
CMD_START,
|
||||
"jmxremote.port=" + port2,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false"
|
||||
);
|
||||
testConnect(port2);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_08() 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 overriden corectly
|
||||
|
||||
System.out.println("**** Test eight ****");
|
||||
|
||||
Something s = doSomething(
|
||||
"test_08",
|
||||
"-Dcom.sun.management.jmxremote.port=" + port1,
|
||||
"-Dcom.sun.management.jmxremote.authenticate=false",
|
||||
"-Dcom.sun.management.jmxremote.ssl=true");
|
||||
|
||||
try {
|
||||
testNoConnect(port1);
|
||||
|
||||
jcmd(CMD_STOP);
|
||||
|
||||
testNoConnect(port1);
|
||||
|
||||
jcmd(
|
||||
CMD_START,
|
||||
"jmxremote.port=" + port2,
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.ssl=false"
|
||||
);
|
||||
|
||||
testConnect(port2);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_09() 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
|
||||
// specifing some property in management config file and some of them
|
||||
// in command line
|
||||
// make sure these properties overriden corectly
|
||||
|
||||
System.out.println("**** Test nine ****");
|
||||
|
||||
Something s = doSomething("test_09",
|
||||
"-Dcom.sun.management.config.file=" +
|
||||
TEST_SRC + File.separator + "management_cl.properties",
|
||||
"-Dcom.sun.management.jmxremote.authenticate=false"
|
||||
);
|
||||
|
||||
try {
|
||||
testNoConnect(port1);
|
||||
|
||||
jcmd(CMD_STOP);
|
||||
|
||||
testNoConnect(port1);
|
||||
|
||||
jcmd(CMD_START,
|
||||
"config.file=" + TEST_SRC + File.separator +
|
||||
"management_jcmd.properties",
|
||||
"jmxremote.authenticate=false",
|
||||
"jmxremote.port=" + port2
|
||||
);
|
||||
|
||||
testConnect(port2);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_10() 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 overriden corectly
|
||||
|
||||
System.out.println("**** Test ten ****");
|
||||
|
||||
Something s = doSomething(
|
||||
"test_10",
|
||||
"-Dcom.sun.management.jmxremote.port=" + port1,
|
||||
"-Dcom.sun.management.jmxremote.authenticate=false",
|
||||
"-Dcom.sun.management.jmxremote.ssl=true");
|
||||
|
||||
try {
|
||||
testNoConnect(port1);
|
||||
|
||||
jcmd(CMD_STOP);
|
||||
jcmd(CMD_START,
|
||||
"jmxremote.ssl=false",
|
||||
"jmxremote.port=" + port1
|
||||
);
|
||||
testConnect(port1);
|
||||
|
||||
jcmd(CMD_STOP);
|
||||
jcmd(CMD_START,
|
||||
"jmxremote.port=" + port1
|
||||
);
|
||||
|
||||
testNoConnect(port1);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_11() throws Exception {
|
||||
// Run an app with JMX enabled
|
||||
// stop remote agent
|
||||
// make sure local agent is not affected
|
||||
|
||||
System.out.println("**** Test eleven ****");
|
||||
|
||||
Something s = doSomething(
|
||||
"test_11",
|
||||
"-Dcom.sun.management.jmxremote.port=" + port1,
|
||||
"-Dcom.sun.management.jmxremote.authenticate=false",
|
||||
"-Dcom.sun.management.jmxremote.ssl=false");
|
||||
try {
|
||||
testConnect(port1);
|
||||
jcmd(CMD_STOP);
|
||||
testConnectLocal(s.getPid());
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_12() throws Exception {
|
||||
// Run an app with JMX disabled
|
||||
// start local agent only
|
||||
|
||||
System.out.println("**** Test twelve ****");
|
||||
|
||||
Something s = doSomething("test_12");
|
||||
|
||||
try {
|
||||
testNoConnect(port1);
|
||||
jcmd(CMD_START + "_local");
|
||||
|
||||
testConnectLocal(s.getPid());
|
||||
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private static void test_13() throws Exception {
|
||||
// Run an app with -javaagent make sure it works as expected -
|
||||
// system properties are ignored
|
||||
|
||||
System.out.println("**** Test fourteen ****");
|
||||
|
||||
String agent = TEST_JDK + "/jre/lib/management-agent.jar";
|
||||
if (!new File(agent).exists()) {
|
||||
agent = TEST_JDK + "/lib/management-agent.jar";
|
||||
}
|
||||
|
||||
Something s = doSomething("test_14",
|
||||
"-javaagent:" + agent + "=com.sun.management.jmxremote.port=" +
|
||||
port1 + ",com.sun.management.jmxremote.authenticate=false",
|
||||
"-Dcom.sun.management.jmxremote.ssl=false"
|
||||
);
|
||||
|
||||
try {
|
||||
testNoConnect(port1);
|
||||
} finally {
|
||||
s.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,579 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright (c) 2011, 2012, 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 7110104
|
||||
# @build JMXStartStopTest JMXStartStopDoSomething
|
||||
# @run shell JMXStartStopTest.sh --jtreg --no-compile
|
||||
# @summary No word Failed expected in the test output
|
||||
|
||||
_server=no
|
||||
_jtreg=no
|
||||
_compile=yes
|
||||
_testsuite="01,02,03,04,05,06,07,08,09,10,11,12,13"
|
||||
_port_one=50234
|
||||
_port_two=50235
|
||||
|
||||
|
||||
_testclasses=".classes"
|
||||
_testsrc=`pwd`
|
||||
|
||||
_logname=".classes/output.txt"
|
||||
_lockFileName="JMXStartStop.lck"
|
||||
|
||||
_compile(){
|
||||
|
||||
if [ ! -d ${_testclasses} ]
|
||||
then
|
||||
mkdir -p ${_testclasses}
|
||||
fi
|
||||
|
||||
rm -f ${_testclasses}/JMXStartStopTest.class
|
||||
|
||||
# Compile testcase
|
||||
${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${_testclasses} \
|
||||
JMXStartStopDoSomething.java JMXStartStopTest.java
|
||||
|
||||
if [ ! -f ${_testclasses}/JMXStartStopTest.class ]
|
||||
then
|
||||
echo "ERROR: Can't compile"
|
||||
exit -1
|
||||
fi
|
||||
}
|
||||
|
||||
_app_start(){
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} $* -cp ${_testclasses} JMXStartStopDoSomething >> ${_logname} 2>&1 &
|
||||
|
||||
x=0
|
||||
while [ ! -f ${_lockFileName} ]
|
||||
do
|
||||
if [ $x -gt 20 ]
|
||||
then
|
||||
echo "ERROR: Test app not started"
|
||||
if [ "${_jtreg}" = "yes" ]
|
||||
then
|
||||
exit -1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Waiting JMXStartStopDoSomething to start: $x"
|
||||
x=`expr $x + 1`
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
_get_pid(){
|
||||
${COMPILEJAVA}/bin/jps ${TESTTOOLVMOPTS} | sed -n "/JMXStartStopDoSomething/s/ .*//p"
|
||||
}
|
||||
|
||||
_app_stop(){
|
||||
rm ${_lockFileName}
|
||||
|
||||
# wait until VM is actually shuts down
|
||||
while true
|
||||
do
|
||||
npid=`_get_pid`
|
||||
if [ "${npid}" = "" ]
|
||||
then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
_exit_on_jtreg(){
|
||||
# Stop on first failed test under jtreg
|
||||
if [ "${_jtreg}" = "yes" ]
|
||||
then
|
||||
_app_stop
|
||||
exit -1
|
||||
fi
|
||||
}
|
||||
|
||||
_testme(){
|
||||
${TESTJAVA}/bin/java ${TESTVMOPTS} -cp ${_testclasses} JMXStartStopTest $*
|
||||
}
|
||||
|
||||
|
||||
_jcmd(){
|
||||
${TESTJAVA}/bin/jcmd ${TESTTOOLVMOPTS} JMXStartStopDoSomething $* > /dev/null 2>/dev/null
|
||||
}
|
||||
|
||||
_echo(){
|
||||
echo "$*"
|
||||
echo "$*" >> ${_logname}
|
||||
}
|
||||
|
||||
# ============= TESTS ======================================
|
||||
|
||||
test_01(){
|
||||
# Run an app with JMX enabled stop it and
|
||||
# restart on other port
|
||||
|
||||
_echo "**** Test one ****"
|
||||
|
||||
_app_start -Dcom.sun.management.jmxremote.port=$1 \
|
||||
-Dcom.sun.management.jmxremote.authenticate=false \
|
||||
-Dcom.sun.management.jmxremote.ssl=false
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
|
||||
res2=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$2
|
||||
|
||||
res3=`_testme $2`
|
||||
|
||||
if [ "${res1}" = "OK_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(OK):${res1} r2(NO):${res2} r3(OK):${res3}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_02(){
|
||||
# Run an app without JMX enabled
|
||||
# start JMX by jcmd
|
||||
|
||||
_echo "**** Test two ****"
|
||||
_app_start
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
if [ "${res1}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(OK):${res1}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_03(){
|
||||
# Run an app without JMX enabled
|
||||
# start JMX by jcmd on one port than on other one
|
||||
|
||||
_echo "**** Test three ****"
|
||||
_app_start
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
# Second agent shouldn't start
|
||||
_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
# First agent should connect
|
||||
res1=`_testme $1`
|
||||
|
||||
if [ "${res1}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed $1"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
#Second agent shouldn't connect
|
||||
res1=`_testme $2`
|
||||
|
||||
if [ "${res1}" = "NO_CONN" ]
|
||||
then
|
||||
_echo "Passed $2"
|
||||
else
|
||||
_echo "Failed r1(OK):${res1}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_04(){
|
||||
# Run an app without JMX enabled
|
||||
# start JMX by jcmd on one port, specify rmi port explicitly
|
||||
|
||||
_echo "**** Test four ****"
|
||||
_app_start
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
# First agent should connect
|
||||
res1=`_testme $1 $2`
|
||||
|
||||
if [ "${res1}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed $1 $2"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_05(){
|
||||
# Run an app without JMX enabled, it will enable local server
|
||||
# but should leave remote server disabled
|
||||
|
||||
_echo "**** Test five ****"
|
||||
_app_start
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote=1
|
||||
|
||||
# First agent should connect
|
||||
res1=`_testme $1`
|
||||
|
||||
if [ "${res1}" = "NO_CONN" ]
|
||||
then
|
||||
_echo "Passed $1 $2"
|
||||
else
|
||||
_echo "Failed r1(OK):${res1}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_06(){
|
||||
# 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
|
||||
# Check for valid messages in the output
|
||||
|
||||
_echo "**** Test six ****"
|
||||
_app_start
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
# First agent should connect
|
||||
res1=`_testme $1 $2`
|
||||
|
||||
if [ "${res1}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed $1 $2"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=22 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_07(){
|
||||
# Run an app without JMX enabled, but with some properties set
|
||||
# in command line.
|
||||
# make sure these properties overriden corectly
|
||||
|
||||
_echo "**** Test seven ****"
|
||||
|
||||
_app_start -Dcom.sun.management.jmxremote.authenticate=false \
|
||||
-Dcom.sun.management.jmxremote.ssl=true
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
res2=`_testme $2`
|
||||
|
||||
if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ]
|
||||
then
|
||||
echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1} r2(OK):${res2}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_08(){
|
||||
# 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 overriden corectly
|
||||
|
||||
_echo "**** Test eight ****"
|
||||
|
||||
_app_start -Dcom.sun.management.jmxremote.port=$1 \
|
||||
-Dcom.sun.management.jmxremote.authenticate=false \
|
||||
-Dcom.sun.management.jmxremote.ssl=true
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
|
||||
res2=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
|
||||
|
||||
res3=`_testme $2`
|
||||
|
||||
if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_09(){
|
||||
# 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
|
||||
# specifing some property in management config file and some of them
|
||||
# in command line
|
||||
# make sure these properties overriden corectly
|
||||
|
||||
_echo "**** Test nine ****"
|
||||
|
||||
_app_start -Dcom.sun.management.config.file=${_testsrc}/management_cl.properties \
|
||||
-Dcom.sun.management.jmxremote.authenticate=false
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
|
||||
res2=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.start config.file=${_testsrc}/management_jcmd.properties \
|
||||
jmxremote.authenticate=false jmxremote.port=$2
|
||||
|
||||
res3=`_testme $2`
|
||||
|
||||
if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_10(){
|
||||
# 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 overriden corectly
|
||||
|
||||
_echo "**** Test ten ****"
|
||||
|
||||
_app_start -Dcom.sun.management.jmxremote.port=$1 \
|
||||
-Dcom.sun.management.jmxremote.authenticate=false \
|
||||
-Dcom.sun.management.jmxremote.ssl=true
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
_jcmd ManagementAgent.start jmxremote.ssl=false jmxremote.port=$1
|
||||
|
||||
|
||||
res2=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
_jcmd ManagementAgent.start jmxremote.port=$1
|
||||
|
||||
res3=`_testme $1`
|
||||
|
||||
if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" -a "${res3}" = "NO_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1} r2(OK):${res2} r3(NO):${res3}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_11(){
|
||||
# Run an app with JMX enabled
|
||||
# stop remote agent
|
||||
# make sure local agent is not affected
|
||||
|
||||
_echo "**** Test eleven ****"
|
||||
|
||||
_app_start -Dcom.sun.management.jmxremote.port=$2 \
|
||||
-Dcom.sun.management.jmxremote.authenticate=false \
|
||||
-Dcom.sun.management.jmxremote.ssl=false
|
||||
|
||||
res1=`_testme $2`
|
||||
|
||||
_jcmd ManagementAgent.stop
|
||||
|
||||
pid=`${COMPILEJAVA}/bin/jps ${TESTTOOLVMOPTS} | sed -n "/JMXStartStopDoSomething/s/ .*//p"`
|
||||
res2=`_testme local ${pid}`
|
||||
|
||||
if [ "${res1}" = "OK_CONN" -a "${res2}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(OK):${res1} r2(OK):${res2}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_12(){
|
||||
# Run an app with JMX disabled
|
||||
# start local agent only
|
||||
|
||||
_echo "**** Test twelve ****"
|
||||
|
||||
_app_start
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
_jcmd ManagementAgent.start_local
|
||||
|
||||
pid=`_get_pid`
|
||||
if [ "x${pid}" = "x" ]
|
||||
then
|
||||
res2="NO_CONN"
|
||||
else
|
||||
res2=`_testme local ${pid}`
|
||||
fi
|
||||
|
||||
if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1} r2(OK):${res2}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
test_13(){
|
||||
# Run an app with -javaagent make sure it works as expected - system properties are ignored
|
||||
|
||||
_echo "**** Test thirteen ****"
|
||||
|
||||
AGENT="${TESTJAVA}/jre/lib/management-agent.jar"
|
||||
if [ ! -f ${AGENT} ]
|
||||
then
|
||||
AGENT="${TESTJAVA}/lib/management-agent.jar"
|
||||
fi
|
||||
|
||||
_app_start -javaagent:${AGENT}=com.sun.management.jmxremote.port=$1,com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
|
||||
|
||||
res1=`_testme $1`
|
||||
|
||||
if [ "${res1}" = "NO_CONN" ]
|
||||
then
|
||||
_echo "Passed"
|
||||
else
|
||||
_echo "Failed r1(NO):${res1}"
|
||||
_exit_on_jtreg
|
||||
fi
|
||||
|
||||
_app_stop
|
||||
}
|
||||
|
||||
# ============= MAIN =======================================
|
||||
|
||||
if [ "x${TESTJAVA}" = "x" ]
|
||||
then
|
||||
echo "TESTJAVA env have to be set"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! -x "${TESTJAVA}/bin/jcmd" ]
|
||||
then
|
||||
echo "${TESTJAVA}/bin/jcmd"
|
||||
echo "Doesn't exist or not an executable"
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# reading parameters
|
||||
|
||||
for parm in "$@"
|
||||
do
|
||||
case $parm in
|
||||
--jtreg) _jtreg=yes ;;
|
||||
--no-compile) _compile=no ;;
|
||||
--testsuite=*) _testsuite=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;;
|
||||
--port-one=*) _port_one=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;;
|
||||
--port-two=*) _port_two=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;;
|
||||
*)
|
||||
echo "Undefined parameter $parm. Try --help for help"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${COMPILEJAVA}" = "" ]
|
||||
then
|
||||
COMPILEJAVA=${TESTJAVA}
|
||||
fi
|
||||
|
||||
if [ ${_compile} = "yes" ]
|
||||
then
|
||||
_compile
|
||||
fi
|
||||
|
||||
if [ ${_jtreg} = "yes" ]
|
||||
then
|
||||
_testclasses=${TESTCLASSES}
|
||||
_testsrc=${TESTSRC}
|
||||
_logname="JMXStartStopTest_output.txt"
|
||||
fi
|
||||
|
||||
rm -f ${_logname}
|
||||
|
||||
# Local mode tests
|
||||
for i in `echo ${_testsuite} | sed -e "s/,/ /g"`
|
||||
do
|
||||
test_${i} ${_port_one} ${_port_two}
|
||||
done
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user