7dea7787e2
Refactor test/sun/tools/common/* code and refactor AnonLoggerWeakRefLeak and LoggerWeakRefLeak to use it. Reviewed-by: ohair, alanb
315 lines
8.5 KiB
Bash
315 lines
8.5 KiB
Bash
#!/bin/sh
|
|
|
|
#
|
|
# 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.
|
|
#
|
|
|
|
|
|
# @test
|
|
# @bug 6964018
|
|
# @summary Unit test for common tools infrastructure.
|
|
#
|
|
# @build SimpleApplication SleeperApplication ShutdownSimpleApplication
|
|
# @run shell CommonTests.sh
|
|
|
|
. ${TESTSRC}/CommonSetup.sh
|
|
. ${TESTSRC}/ApplicationSetup.sh
|
|
|
|
# hope for the best:
|
|
status=0
|
|
|
|
|
|
# Test program path constants from CommonSetup.sh:
|
|
#
|
|
for name in JAVA JHAT JINFO JMAP JPS JSTACK; do
|
|
eval value=$`echo $name`
|
|
|
|
echo "INFO: $name=$value"
|
|
if [ -x "$value" ]; then
|
|
echo "INFO: '$value' is executable."
|
|
else
|
|
echo "ERROR: '$value' is not executable." >&2
|
|
status=1
|
|
fi
|
|
done
|
|
|
|
|
|
# Display flag values from CommonSetup.sh:
|
|
#
|
|
for name in isCygwin isMKS isLinux isSolaris isUnknownOS isWindows; do
|
|
eval value=$`echo $name`
|
|
echo "INFO: flag $name=$value"
|
|
done
|
|
|
|
|
|
# Test OS constant from CommonSetup.sh:
|
|
#
|
|
if [ -z "$OS" ]; then
|
|
echo "ERROR: OS constant cannot be empty." >&2
|
|
status=1
|
|
fi
|
|
|
|
|
|
# Display the PATTERN_EOL value:
|
|
#
|
|
echo "INFO: PATTERN_EOL="`echo "$PATTERN_EOL" | od -c`
|
|
|
|
|
|
# Test PATTERN_EOL with 'grep' for a regular line.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.grep_reg_line_eol"
|
|
set +e
|
|
echo 'regular line' | grep "line${PATTERN_EOL}" > "$TESTOUT"
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_EOL works for regular line with grep."
|
|
else
|
|
echo "ERROR: PATTERN_EOL does not work for regular line with grep." >&2
|
|
status=1
|
|
fi
|
|
|
|
|
|
if $isWindows; then
|
|
# Test PATTERN_EOL with 'grep' for a CR line.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.grep_cr_line_eol"
|
|
set +e
|
|
echo 'CR line
|
|
' | grep "line${PATTERN_EOL}" > "$TESTOUT"
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_EOL works for CR line with grep."
|
|
else
|
|
echo "ERROR: PATTERN_EOL does not work for CR line with grep." >&2
|
|
status=1
|
|
fi
|
|
fi
|
|
|
|
|
|
# Test PATTERN_EOL with 'sed' for a regular line.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.sed_reg_line_eol"
|
|
echo 'regular line' | sed -n "/line${PATTERN_EOL}/p" > "$TESTOUT"
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_EOL works for regular line with sed."
|
|
else
|
|
echo "ERROR: PATTERN_EOL does not work for regular line with sed." >&2
|
|
status=1
|
|
fi
|
|
|
|
|
|
if $isWindows; then
|
|
# Test PATTERN_EOL with 'sed' for a CR line.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.sed_cr_line_eol"
|
|
echo 'CR line
|
|
' | sed -n "/line${PATTERN_EOL}/p" > "$TESTOUT"
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_EOL works for CR line with sed."
|
|
else
|
|
echo "ERROR: PATTERN_EOL does not work for CR line with sed." >&2
|
|
status=1
|
|
fi
|
|
fi
|
|
|
|
|
|
# Display the PATTERN_WS value:
|
|
#
|
|
echo "INFO: PATTERN_WS="`echo "$PATTERN_WS" | od -c`
|
|
|
|
|
|
# Test PATTERN_WS with 'grep' for a blank.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.grep_blank"
|
|
set +e
|
|
echo 'blank: ' | grep "$PATTERN_WS" > "$TESTOUT"
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_WS works for blanks with grep."
|
|
else
|
|
echo "ERROR: PATTERN_WS does not work for blanks with grep." >&2
|
|
status=1
|
|
fi
|
|
|
|
|
|
# Test PATTERN_WS with 'grep' for a tab.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.grep_tab"
|
|
set +e
|
|
echo 'tab: ' | grep "$PATTERN_WS" > "$TESTOUT"
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_WS works for tabs with grep."
|
|
else
|
|
echo "ERROR: PATTERN_WS does not work for tabs with grep." >&2
|
|
status=1
|
|
fi
|
|
|
|
|
|
# Test PATTERN_WS with 'sed' for a blank.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.sed_blank"
|
|
echo 'blank: ' | sed -n "/$PATTERN_WS/p" > "$TESTOUT"
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_WS works for blanks with sed."
|
|
else
|
|
echo "ERROR: PATTERN_WS does not work for blanks with sed." >&2
|
|
status=1
|
|
fi
|
|
|
|
|
|
# Test PATTERN_WS with 'sed' for a tab.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.sed_tab"
|
|
echo 'tab: ' | sed -n "/$PATTERN_WS/p" > "$TESTOUT"
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: PATTERN_WS works for tabs with sed."
|
|
else
|
|
echo "ERROR: PATTERN_WS does not work for tabs with sed." >&2
|
|
status=1
|
|
fi
|
|
|
|
|
|
# Test startApplication and use PORTFILE for coordination
|
|
# The app sleeps for 30 seconds.
|
|
#
|
|
PORTFILE="${TESTCLASSES}"/shutdown.port
|
|
startApplication SleeperApplication "${PORTFILE}" 30
|
|
|
|
|
|
# Test appJavaPid in "ps" cmd output.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.ps_app"
|
|
set +e
|
|
if $isCygwin; then
|
|
# On Cygwin, appJavaPid is the Windows pid for the Java process
|
|
# and appOtherPid is the Cygwin pid for the Java process.
|
|
ps -p "$appOtherPid" \
|
|
| grep "${PATTERN_WS}${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
|
|
else
|
|
# output only pid and comm columns to avoid mismatches
|
|
ps -eo pid,comm \
|
|
| grep "^${PATTERN_WS}*${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
|
|
fi
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: begin appJavaPid=$appJavaPid in 'ps' cmd output:"
|
|
cat "$TESTOUT"
|
|
echo "INFO: end appJavaPid=$appJavaPid in 'ps' cmd output."
|
|
else
|
|
echo "ERROR: 'ps' cmd should show appJavaPid=$appJavaPid." >&2
|
|
status=1
|
|
fi
|
|
|
|
if [ -n "$appOtherPid" ]; then
|
|
# Test appOtherPid in "ps" cmd output, if we have one.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.ps_other"
|
|
set +e
|
|
if $isCygwin; then
|
|
ps -p "$appOtherPid" \
|
|
| grep "${PATTERN_WS}${appOtherPid}${PATTERN_WS}" > "$TESTOUT"
|
|
else
|
|
# output only pid and comm columns to avoid mismatches
|
|
ps -eo pid,comm \
|
|
| grep "^${PATTERN_WS}*${appOtherPid}${PATTERN_WS}" > "$TESTOUT"
|
|
fi
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: begin appOtherPid=$appOtherPid in 'ps' cmd output:"
|
|
cat "$TESTOUT"
|
|
echo "INFO: end appOtherPid=$appOtherPid in 'ps' cmd output."
|
|
else
|
|
echo "ERROR: 'ps' cmd should show appOtherPid=$appOtherPid." >&2
|
|
status=1
|
|
fi
|
|
fi
|
|
|
|
|
|
# Test stopApplication and PORTFILE for coordination
|
|
#
|
|
stopApplication "${PORTFILE}"
|
|
|
|
|
|
# Test application still running after stopApplication.
|
|
#
|
|
# stopApplication just lets the app know that it can stop, but the
|
|
# app might still be doing work. This test just demonstrates that
|
|
# fact and doesn't fail if the app is already done.
|
|
#
|
|
TESTOUT="${TESTCLASSES}/testout.after_stop"
|
|
set +e
|
|
if $isCygwin; then
|
|
# On Cygwin, appJavaPid is the Windows pid for the Java process
|
|
# and appOtherPid is the Cygwin pid for the Java process.
|
|
ps -p "$appOtherPid" \
|
|
| grep "${PATTERN_WS}${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
|
|
else
|
|
# output only pid and comm columns to avoid mismatches
|
|
ps -eo pid,comm \
|
|
| grep "^${PATTERN_WS}*${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
|
|
fi
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "INFO: it is okay for appJavaPid=$appJavaPid to still be running" \
|
|
"after stopApplication() is called."
|
|
echo "INFO: begin 'after_stop' output:"
|
|
cat "$TESTOUT"
|
|
echo "INFO: end 'after_stop' output."
|
|
fi
|
|
|
|
|
|
# Test waitForApplication
|
|
#
|
|
# The app might already be gone so this function shouldn't generate
|
|
# a fatal error in either call.
|
|
#
|
|
waitForApplication
|
|
|
|
if [ $isWindows = false ]; then
|
|
# Windows can recycle pids quickly so we can't use this test there
|
|
TESTOUT="${TESTCLASSES}/testout.after_kill"
|
|
set +e
|
|
# output only pid and comm columns to avoid mismatches
|
|
ps -eo pid,comm \
|
|
| grep "^${PATTERN_WS}*${appJavaPid}${PATTERN_WS}" > "$TESTOUT"
|
|
set -e
|
|
if [ -s "$TESTOUT" ]; then
|
|
echo "ERROR: 'ps' cmd should not show appJavaPid." >&2
|
|
echo "ERROR: begin 'after_kill' output:" >&2
|
|
cat "$TESTOUT" >&2
|
|
echo "ERROR: end 'after_kill' output." >&2
|
|
status=1
|
|
else
|
|
echo "INFO: 'ps' cmd does not show appJavaPid after" \
|
|
"waitForApplication() is called."
|
|
fi
|
|
fi
|
|
|
|
|
|
# Test killApplication
|
|
#
|
|
# The app is already be gone so this function shouldn't generate
|
|
# a fatal error.
|
|
#
|
|
killApplication
|
|
|
|
exit $status
|