8076524: Remove jhat tests and help library from JDK
Reviewed-by: sla, alanb
This commit is contained in:
parent
ba963fa58d
commit
6f18b7da8f
@ -1,210 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright (c) 2005, 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.
|
||||
#
|
||||
|
||||
|
||||
# Support functions to start, stop, wait for or kill a given SimpleApplication
|
||||
|
||||
# Starts a given app as background process, usage:
|
||||
# startApplication <class> port-file [args...]
|
||||
#
|
||||
# The following variables are set:
|
||||
#
|
||||
# appJavaPid - application's Java pid
|
||||
# appOtherPid - pid associated with the app other than appJavaPid
|
||||
# appPidList - all pids associated with the app
|
||||
# appOutput - file containing stdout and stderr from the app
|
||||
#
|
||||
# Waits for at least one line of output from the app to indicate
|
||||
# that it is up and running.
|
||||
#
|
||||
startApplication()
|
||||
{
|
||||
appOutput="${TESTCLASSES}/Application.out"
|
||||
|
||||
${JAVA} -XX:+UsePerfData -classpath "${TESTCLASSPATH:-${TESTCLASSES}}" "$@" > "$appOutput" 2>&1 &
|
||||
appJavaPid="$!"
|
||||
appOtherPid=
|
||||
appPidList="$appJavaPid"
|
||||
|
||||
echo "INFO: waiting for $1 to initialize..."
|
||||
_cnt=0
|
||||
while true; do
|
||||
# if the app doesn't start then the JavaTest/JTREG timeout will
|
||||
# kick in so this isn't really a endless loop
|
||||
sleep 1
|
||||
out=`tail -1 "$appOutput"`
|
||||
if [ -n "$out" ]; then
|
||||
# we got some output from the app so it's running
|
||||
break
|
||||
fi
|
||||
_cnt=`expr $_cnt + 1`
|
||||
echo "INFO: waited $_cnt second(s) ..."
|
||||
done
|
||||
unset _cnt
|
||||
|
||||
if $isWindows; then
|
||||
# Windows requires special handling
|
||||
appOtherPid="$appJavaPid"
|
||||
|
||||
if $isCygwin; then
|
||||
appJavaPid=`ps -p "$appOtherPid" \
|
||||
| sed -n '
|
||||
# See if $appOtherPid is in PID column; there are sometimes
|
||||
# non-blanks in column 1 (I and S observed so far)
|
||||
/^.'"${PATTERN_WS}${PATTERN_WS}*${appOtherPid}${PATTERN_WS}"'/{
|
||||
# strip PID column
|
||||
s/^.'"${PATTERN_WS}${PATTERN_WS}*${appOtherPid}${PATTERN_WS}${PATTERN_WS}"'*//
|
||||
# strip PPID column
|
||||
s/^[1-9][0-9]*'"${PATTERN_WS}${PATTERN_WS}"'*//
|
||||
# strip PGID column
|
||||
s/^[1-9][0-9]*'"${PATTERN_WS}${PATTERN_WS}"'*//
|
||||
# strip everything after WINPID column
|
||||
s/'"${PATTERN_WS}"'.*//
|
||||
p
|
||||
q
|
||||
}
|
||||
'`
|
||||
echo "INFO: Cygwin pid=$appOtherPid maps to Windows pid=$appJavaPid"
|
||||
else
|
||||
# show PID, PPID and COMM columns only
|
||||
appJavaPid=`ps -o pid,ppid,comm \
|
||||
| sed -n '
|
||||
# see if appOtherPid is in either PID or PPID columns
|
||||
/'"${PATTERN_WS}${appOtherPid}${PATTERN_WS}"'/{
|
||||
# see if this is a java command
|
||||
/java'"${PATTERN_EOL}"'/{
|
||||
# strip leading white space
|
||||
s/^'"${PATTERN_WS}${PATTERN_WS}"'*//
|
||||
# strip everything after the first word
|
||||
s/'"${PATTERN_WS}"'.*//
|
||||
# print the pid and we are done
|
||||
p
|
||||
q
|
||||
}
|
||||
}
|
||||
'`
|
||||
echo "INFO: MKS shell pid=$appOtherPid; Java pid=$appJavaPid"
|
||||
fi
|
||||
|
||||
if [ -z "$appJavaPid" ]; then
|
||||
echo "ERROR: could not find app's Java pid." >&2
|
||||
killApplication
|
||||
exit 2
|
||||
fi
|
||||
appPidList="$appOtherPid $appJavaPid"
|
||||
fi
|
||||
|
||||
echo "INFO: $1 is process $appJavaPid"
|
||||
echo "INFO: $1 output is in $appOutput"
|
||||
}
|
||||
|
||||
|
||||
# Stops a simple application by invoking ShutdownSimpleApplication
|
||||
# class with a specific port-file, usage:
|
||||
# stopApplication port-file
|
||||
#
|
||||
# Note: When this function returns, the SimpleApplication (or a subclass)
|
||||
# may still be running because the application has not yet reached the
|
||||
# shutdown check.
|
||||
#
|
||||
stopApplication()
|
||||
{
|
||||
$JAVA -XX:+UsePerfData -classpath "${TESTCLASSPATH:-${TESTCLASSES}}" ShutdownSimpleApplication $1
|
||||
}
|
||||
|
||||
|
||||
# Wait for a simple application to stop running.
|
||||
#
|
||||
waitForApplication() {
|
||||
if [ $isWindows = false ]; then
|
||||
# non-Windows is easy; just one process
|
||||
echo "INFO: waiting for $appJavaPid"
|
||||
set +e
|
||||
wait "$appJavaPid"
|
||||
set -e
|
||||
|
||||
elif $isCygwin; then
|
||||
# Cygwin pid and not the Windows pid
|
||||
echo "INFO: waiting for $appOtherPid"
|
||||
set +e
|
||||
wait "$appOtherPid"
|
||||
set -e
|
||||
|
||||
else # implied isMKS
|
||||
# MKS has intermediate shell and Java process
|
||||
echo "INFO: waiting for $appJavaPid"
|
||||
|
||||
# appJavaPid can be empty if pid search in startApplication() failed
|
||||
if [ -n "$appJavaPid" ]; then
|
||||
# only need to wait for the Java process
|
||||
set +e
|
||||
wait "$appJavaPid"
|
||||
set -e
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Kills a simple application by sending a SIGTERM to the appropriate
|
||||
# process(es); on Windows SIGQUIT (-9) is used.
|
||||
#
|
||||
killApplication()
|
||||
{
|
||||
if [ $isWindows = false ]; then
|
||||
# non-Windows is easy; just one process
|
||||
echo "INFO: killing $appJavaPid"
|
||||
set +e
|
||||
kill -TERM "$appJavaPid" # try a polite SIGTERM first
|
||||
sleep 2
|
||||
# send SIGQUIT (-9) just in case SIGTERM didn't do it
|
||||
# but don't show any complaints
|
||||
kill -QUIT "$appJavaPid" > /dev/null 2>&1
|
||||
wait "$appJavaPid"
|
||||
set -e
|
||||
|
||||
elif $isCygwin; then
|
||||
# Cygwin pid and not the Windows pid
|
||||
echo "INFO: killing $appOtherPid"
|
||||
set +e
|
||||
kill -9 "$appOtherPid"
|
||||
wait "$appOtherPid"
|
||||
set -e
|
||||
|
||||
else # implied isMKS
|
||||
# MKS has intermediate shell and Java process
|
||||
echo "INFO: killing $appPidList"
|
||||
set +e
|
||||
kill -9 $appPidList
|
||||
set -e
|
||||
|
||||
# appJavaPid can be empty if pid search in startApplication() failed
|
||||
if [ -n "$appJavaPid" ]; then
|
||||
# only need to wait for the Java process
|
||||
set +e
|
||||
wait "$appJavaPid"
|
||||
set -e
|
||||
fi
|
||||
fi
|
||||
}
|
@ -1,131 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright (c) 2005, 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.
|
||||
#
|
||||
|
||||
|
||||
# Common setup for tool tests and other tests that use jtools.
|
||||
# Checks that TESTJAVA, TESTSRC, and TESTCLASSES environment variables are set.
|
||||
#
|
||||
# Creates the following constants for use by the caller:
|
||||
# JAVA - java launcher
|
||||
# JHAT - jhat utility
|
||||
# JINFO - jinfo utility
|
||||
# JMAP - jmap utility
|
||||
# JPS - jps utility
|
||||
# JSTACK - jstack utility
|
||||
# JCMD - jcmd utility
|
||||
# OS - operating system name
|
||||
# PATTERN_EOL - grep or sed end-of-line pattern
|
||||
# PATTERN_WS - grep or sed whitespace pattern
|
||||
# PS - path separator (";" or ":")
|
||||
#
|
||||
# Sets the following variables:
|
||||
#
|
||||
# isCygwin - true if environment is Cygwin
|
||||
# isMKS - true if environment is MKS
|
||||
# isLinux - true if OS is Linux
|
||||
# isSolaris - true if OS is Solaris
|
||||
# isWindows - true if OS is Windows
|
||||
# isMacos - true if OS is Macos X
|
||||
# isAIX - true if OS is AIX
|
||||
|
||||
|
||||
if [ -z "${TESTJAVA}" ]; then
|
||||
echo "ERROR: TESTJAVA not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${TESTSRC}" ]; then
|
||||
echo "ERROR: TESTSRC not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${TESTCLASSES}" ]; then
|
||||
echo "ERROR: TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# only enable these after checking the expected incoming env variables
|
||||
set -eu
|
||||
|
||||
JAVA="${TESTJAVA}/bin/java"
|
||||
JHAT="${TESTJAVA}/bin/jhat"
|
||||
JINFO="${TESTJAVA}/bin/jinfo"
|
||||
JMAP="${TESTJAVA}/bin/jmap"
|
||||
JPS="${TESTJAVA}/bin/jps"
|
||||
JSTACK="${TESTJAVA}/bin/jstack"
|
||||
JCMD="${TESTJAVA}/bin/jcmd"
|
||||
|
||||
isCygwin=false
|
||||
isMKS=false
|
||||
isLinux=false
|
||||
isSolaris=false
|
||||
isUnknownOS=false
|
||||
isWindows=false
|
||||
isMacos=false
|
||||
isAIX=false
|
||||
|
||||
OS=`uname -s`
|
||||
|
||||
# start with some UNIX like defaults
|
||||
PATTERN_EOL='$'
|
||||
# blank and tab
|
||||
PATTERN_WS='[ ]'
|
||||
PS=":"
|
||||
|
||||
case "$OS" in
|
||||
CYGWIN* )
|
||||
OS="Windows"
|
||||
PATTERN_EOL='[
]*$'
|
||||
# blank and tab
|
||||
PATTERN_WS='[ \t]'
|
||||
isCygwin=true
|
||||
isWindows=true
|
||||
;;
|
||||
Linux )
|
||||
OS="Linux"
|
||||
isLinux=true
|
||||
;;
|
||||
Darwin )
|
||||
OS="Mac OS X"
|
||||
isMacos=true
|
||||
;;
|
||||
SunOS )
|
||||
OS="Solaris"
|
||||
isSolaris=true
|
||||
;;
|
||||
AIX )
|
||||
OS="AIX"
|
||||
isAIX=true
|
||||
;;
|
||||
Windows* )
|
||||
OS="Windows"
|
||||
PATTERN_EOL='[
]*$'
|
||||
PS=";"
|
||||
isWindows=true
|
||||
;;
|
||||
* )
|
||||
isUnknownOS=true
|
||||
;;
|
||||
esac
|
@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Used to shutdown SimpleApplication (or a subclass). The argument to
|
||||
* this class is the name of a file that contains the TCP port number
|
||||
* on which SimpleApplication (or a subclass) is listening.
|
||||
*
|
||||
* Note: When this program returns, the SimpleApplication (or a subclass)
|
||||
* may still be running because the application has not yet reached the
|
||||
* shutdown check.
|
||||
*/
|
||||
import java.net.Socket;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
|
||||
public class ShutdownSimpleApplication {
|
||||
public static void main(String args[]) throws Exception {
|
||||
|
||||
if (args.length != 1) {
|
||||
throw new RuntimeException("Usage: ShutdownSimpleApplication" +
|
||||
" port-file");
|
||||
}
|
||||
|
||||
// read the (TCP) port number from the given file
|
||||
|
||||
File f = new File(args[0]);
|
||||
FileInputStream fis = new FileInputStream(f);
|
||||
byte b[] = new byte[8];
|
||||
int n = fis.read(b);
|
||||
if (n < 1) {
|
||||
throw new RuntimeException("Empty port-file");
|
||||
}
|
||||
fis.close();
|
||||
|
||||
String str = new String(b, 0, n, "UTF-8");
|
||||
System.out.println("INFO: Port number of SimpleApplication: " + str);
|
||||
int port = Integer.parseInt(str);
|
||||
|
||||
// Now connect to the port (which will shutdown application)
|
||||
|
||||
System.out.println("INFO: Connecting to port " + port +
|
||||
" to shutdown SimpleApplication ...");
|
||||
System.out.flush();
|
||||
|
||||
Socket s = new Socket();
|
||||
s.connect( new InetSocketAddress(port) );
|
||||
s.close();
|
||||
|
||||
System.out.println("INFO: done connecting to SimpleApplication.");
|
||||
System.out.flush();
|
||||
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
@ -1,120 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* A simple application used by unit tests. The first argument to this
|
||||
* class is the name of a file to which a TCP port number can be written.
|
||||
*
|
||||
* By default, this class does nothing other than bind to a TCP port,
|
||||
* write the TCP port number to a file, and wait for an incoming connection
|
||||
* in order to complete the application shutdown protocol.
|
||||
*/
|
||||
import java.net.Socket;
|
||||
import java.net.ServerSocket;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
public class SimpleApplication {
|
||||
private static SimpleApplication myApp; // simple app or a subclass
|
||||
private static String myAppName; // simple app name
|
||||
private static int myPort; // coordination port #
|
||||
private static ServerSocket mySS; // coordination socket
|
||||
|
||||
// protected so a subclass can extend it; not public so creation is
|
||||
// limited.
|
||||
protected SimpleApplication() {
|
||||
// save simple app (or subclass) name for messages
|
||||
myAppName = getClass().getName();
|
||||
}
|
||||
|
||||
// return the simple application (or a subclass)
|
||||
final public static SimpleApplication getMyApp() {
|
||||
return myApp;
|
||||
}
|
||||
|
||||
// set the simple application (for use by a subclass)
|
||||
final public static void setMyApp(SimpleApplication _myApp) {
|
||||
myApp = _myApp;
|
||||
}
|
||||
|
||||
// execute the application finish protocol
|
||||
final public void doMyAppFinish(String[] args) throws Exception {
|
||||
System.out.println("INFO: " + myAppName + " is waiting on port: " +
|
||||
myPort);
|
||||
System.out.flush();
|
||||
|
||||
// wait for test harness to connect
|
||||
Socket s = mySS.accept();
|
||||
s.close();
|
||||
mySS.close();
|
||||
|
||||
System.out.println("INFO: " + myAppName + " is shutting down.");
|
||||
System.out.flush();
|
||||
}
|
||||
|
||||
// execute the application start protocol
|
||||
final public void doMyAppStart(String[] args) throws Exception {
|
||||
if (args.length < 1) {
|
||||
throw new RuntimeException("Usage: " + myAppName +
|
||||
" port-file [arg(s)]");
|
||||
}
|
||||
|
||||
// bind to a random port
|
||||
mySS = new ServerSocket(0);
|
||||
myPort = mySS.getLocalPort();
|
||||
|
||||
// Write the port number to the given file
|
||||
File f = new File(args[0]);
|
||||
FileOutputStream fos = new FileOutputStream(f);
|
||||
fos.write( Integer.toString(myPort).getBytes("UTF-8") );
|
||||
fos.close();
|
||||
|
||||
System.out.println("INFO: " + myAppName + " created socket on port: " +
|
||||
myPort);
|
||||
System.out.flush();
|
||||
}
|
||||
|
||||
// execute the app work (subclass can override this)
|
||||
public void doMyAppWork(String[] args) throws Exception {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
if (myApp == null) {
|
||||
// create myApp since a subclass hasn't done so
|
||||
myApp = new SimpleApplication();
|
||||
}
|
||||
|
||||
myApp.doMyAppStart(args); // do the app start protocol
|
||||
|
||||
System.out.println("INFO: " + myAppName + " is calling doMyAppWork()");
|
||||
System.out.flush();
|
||||
myApp.doMyAppWork(args); // do the app work
|
||||
System.out.println("INFO: " + myAppName + " returned from" +
|
||||
" doMyAppWork()");
|
||||
System.out.flush();
|
||||
|
||||
myApp.doMyAppFinish(args); // do the app finish protocol
|
||||
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* An example subclass of SimpleApplication that illustrates how to
|
||||
* override the doMyAppWork() method.
|
||||
*/
|
||||
|
||||
public class SleeperApplication extends SimpleApplication {
|
||||
public static int DEFAULT_SLEEP_TIME = 60; // time is in seconds
|
||||
|
||||
// execute the sleeper app work
|
||||
public void doMyAppWork(String[] args) throws Exception {
|
||||
int sleep_time = DEFAULT_SLEEP_TIME;
|
||||
|
||||
// args[0] is the port-file
|
||||
if (args.length < 2) {
|
||||
System.out.println("INFO: using default sleep time of "
|
||||
+ sleep_time + " seconds.");
|
||||
} else {
|
||||
try {
|
||||
sleep_time = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new RuntimeException("Error: '" + args[1] +
|
||||
"': is not a valid seconds value.");
|
||||
}
|
||||
}
|
||||
|
||||
Thread.sleep(sleep_time * 1000); // our "work" is to sleep
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SleeperApplication myApp = new SleeperApplication();
|
||||
|
||||
SimpleApplication.setMyApp(myApp);
|
||||
|
||||
SimpleApplication.main(args);
|
||||
}
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2014, 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.File;
|
||||
import java.util.Arrays;
|
||||
|
||||
import jdk.testlibrary.Asserts;
|
||||
import jdk.testlibrary.JDKToolLauncher;
|
||||
import jdk.testlibrary.OutputAnalyzer;
|
||||
import jdk.testlibrary.ProcessTools;
|
||||
|
||||
/* @test
|
||||
* @bug 5102009
|
||||
* @summary Sanity test of jhat functionality
|
||||
* @library /lib/testlibrary
|
||||
* @build jdk.testlibarary.*
|
||||
* @compile -g HelloWorld.java
|
||||
* @run main HatHeapDump1Test
|
||||
*/
|
||||
public class HatHeapDump1Test {
|
||||
|
||||
private static final String TEST_CLASSES = System.getProperty("test.classes", ".");
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
String className = "HelloWorld";
|
||||
File dumpFile = new File(className + ".hdump");
|
||||
|
||||
// Generate a heap dump
|
||||
ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder("-cp",
|
||||
TEST_CLASSES,
|
||||
"-Xcheck:jni",
|
||||
"-Xverify:all",
|
||||
"-agentlib:hprof=heap=dump,format=b,file=" + dumpFile.getAbsolutePath(),
|
||||
className);
|
||||
OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
|
||||
System.out.println(output.getOutput());
|
||||
output.shouldHaveExitValue(0);
|
||||
output.shouldContain("Dumping Java heap ... done");
|
||||
Asserts.assertTrue(dumpFile.exists() && dumpFile.isFile(), "Invalid dump file " + dumpFile.getAbsolutePath());
|
||||
|
||||
// Run jhat to analyze the heap dump
|
||||
output = jhat("-debug", "2", dumpFile.getAbsolutePath());
|
||||
output.shouldHaveExitValue(0);
|
||||
output.shouldContain("Snapshot resolved");
|
||||
output.shouldContain("-debug 2 was used");
|
||||
output.shouldNotContain("ERROR");
|
||||
|
||||
dumpFile.delete();
|
||||
}
|
||||
|
||||
private static OutputAnalyzer jhat(String... toolArgs) throws Exception {
|
||||
JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jhat");
|
||||
if (toolArgs != null) {
|
||||
for (String toolArg : toolArgs) {
|
||||
launcher.addToolArg(toolArg);
|
||||
}
|
||||
}
|
||||
|
||||
ProcessBuilder processBuilder = new ProcessBuilder();
|
||||
processBuilder.command(launcher.getCommand());
|
||||
System.out.println(Arrays.toString(processBuilder.command().toArray()).replace(",", ""));
|
||||
OutputAnalyzer output = ProcessTools.executeProcess(processBuilder);
|
||||
System.out.println(output.getOutput());
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
}
|
@ -1,51 +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.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Sample target application.
|
||||
*
|
||||
*/
|
||||
|
||||
public class HelloWorld {
|
||||
public static void main(String args[]) {
|
||||
|
||||
/* Use a generic type */
|
||||
java.util.List<String> l = new java.util.ArrayList<String>();
|
||||
String.format("%s", "");
|
||||
|
||||
/* Just some code with branches */
|
||||
try {
|
||||
if ( args.length == 0 ) {
|
||||
System.out.println("No arguments passed in");
|
||||
} else {
|
||||
System.out.println("Some arguments passed in");
|
||||
}
|
||||
} catch ( Throwable e ) {
|
||||
System.out.println("ERROR: System.out.println() did a throw");
|
||||
} finally {
|
||||
System.out.println("Hello, world!");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright (c) 2006, 2010, 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
|
||||
# @summary Testing jhat parsing against pre-created dump files.
|
||||
# see also: README.TXT
|
||||
|
||||
# @library ../common
|
||||
# @run shell ParseTest.sh
|
||||
|
||||
. ${TESTSRC}/../common/CommonSetup.sh
|
||||
|
||||
# all return statuses are checked in this test
|
||||
set +e
|
||||
|
||||
failed=0
|
||||
|
||||
DUMPFILE="minimal.bin"
|
||||
|
||||
${JHAT} -parseonly true ${TESTSRC}/${DUMPFILE}
|
||||
if [ $? != 0 ]; then failed=1; fi
|
||||
|
||||
DUMPFILE="jmap.bin"
|
||||
|
||||
${JHAT} -parseonly true ${TESTSRC}/${DUMPFILE}
|
||||
if [ $? != 0 ]; then failed=1; fi
|
||||
|
||||
DUMPFILE="hprof.bin"
|
||||
|
||||
${JHAT} -parseonly true ${TESTSRC}/${DUMPFILE}
|
||||
if [ $? != 0 ]; then failed=1; fi
|
||||
|
||||
# try something that is not heapdump and expect to fail!
|
||||
DUMPFILE="ParseTest.sh"
|
||||
|
||||
${JHAT} -parseonly true ${TESTSRC}/${DUMPFILE}
|
||||
if [ $? = 0 ]; then failed=1; fi
|
||||
|
||||
# try something that does not exist and expect to fail!
|
||||
DUMPFILE="FileThatDoesNotExist"
|
||||
|
||||
${JHAT} -parseonly true ${TESTSRC}/${DUMPFILE}
|
||||
if [ $? = 0 ]; then failed=1; fi
|
||||
|
||||
exit $failed
|
||||
|
@ -1,16 +0,0 @@
|
||||
#
|
||||
|
||||
jhat heap dump parsing tests:
|
||||
|
||||
There are three hprof binary format dump files in this directory.
|
||||
These dumps were created by jmap and hprof profiler against a
|
||||
simple infinite looping Java program.
|
||||
|
||||
1. minimal.bin - minimal dump that has nothing! - not even java.lang.Class!
|
||||
- This was created by java -Xrunhprof:format=b,heap=sites MainClass.
|
||||
|
||||
2. jmap.bin - created by jmap -dump option
|
||||
|
||||
3. hprof.bin - created by java -Xrunhprof:heap=all,format=b MainClass
|
||||
|
||||
We can run jhat -parseonly true <dump-file> against these dumps.
|
Loading…
Reference in New Issue
Block a user