#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# 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 6274276
# @summary JLI JAR manifest processing should ignore leading and trailing white space.
# @author Daniel D. Daugherty
#
# @run build ManifestTestApp ExampleForBootClassPath
# @run shell/timeout=900 ManifestTest.sh
#
# version_line and premain_line are required
version_line="Manifest-Version: 1.0"
premain_line="Premain-Class: ${AGENT}"
boot_cp_line=""
expect_boot_cp_line="ExampleForBootClassPath was not loaded."
expect_redef_line="isRedefineClassesSupported()=false"
expect_retrans_line="isRetransformClassesSupported()=false"
expect_set_nmp_line="isNativeMethodPrefixSupported()=false"
# some tests create directories with spaces in their name,
# explicitly delete these.
while [ $# != 0 ] ; do
# just use the defaults for the test
;;
boot_cp_line="Boot-Class-Path: no_white_space"
expect_boot_cp_line="ExampleForBootClassPath was loaded."
;;
boot_cp_line="Boot-Class-Path: has_leading_blank"
expect_boot_cp_line="ExampleForBootClassPath was loaded."
to_be_deleted=" has_leading_blank"
mkdir -p has_leading_blank " has_leading_blank"
# the good class is in the directory without the blank
# the bad class is in the directory with the blank
;;
boot_cp_line="Boot-Class-Path: has_trailing_blank "
expect_boot_cp_line="ExampleForBootClassPath was loaded."
to_be_deleted="has_trailing_blank "
mkdir -p has_trailing_blank "has_trailing_blank "
# the good class is in the directory without the blank
# the bad class is in the directory with the blank
"has_trailing_blank /ExampleForBootClassPath.class"
;;
boot_cp_line="Boot-Class-Path: has_leading_and_trailing_blank "
expect_boot_cp_line="ExampleForBootClassPath was loaded."
to_be_deleted=" has_leading_and_trailing_blank "
" has_leading_and_trailing_blank "
# the good class is in the directory without the blanks
# the bad class is in the directory with the blanks
" has_leading_and_trailing_blank /ExampleForBootClassPath.class"
;;
boot_cp_line="Boot-Class-Path: has_embedded blank"
expect_boot_cp_line="ExampleForBootClassPath was loaded."
to_be_deleted="has_embedded blank"
mkdir -p has_embedded "has_embedded blank"
# the good class is in the first blank separated word
# the bad class is in the directory with the blank
"has_embedded blank/ExampleForBootClassPath.class"
;;
can_redef_line="Can-Redefine-Classes: true"
expect_redef_line="isRedefineClassesSupported()=true"
;;
can_redef_line="Can-Redefine-Classes: true"
expect_redef_line="isRedefineClassesSupported()=true"
;;
can_redef_line="Can-Redefine-Classes: true "
expect_redef_line="isRedefineClassesSupported()=true"
;;
can_redef_line="Can-Redefine-Classes: true "
expect_redef_line="isRedefineClassesSupported()=true"
;;
can_redef_line="Can-Redefine-Classes: false"
;;
can_redef_line="Can-Redefine-Classes: false"
;;
can_redef_line="Can-Redefine-Classes: false "
;;
can_redef_line="Can-Redefine-Classes: false "
;;
# this line makes the jar command unhappy and that's
# not what we're testing so skip this case
can_redef_line="Can-Redefine-Classes:"
;;
can_redef_line="Can-Redefine-Classes: "
;;
can_redef_line="Can-Redefine-Classes: "
;;
can_retrans_line="Can-Retransform-Classes: true"
expect_retrans_line="isRetransformClassesSupported()=true"
;;
can_retrans_line="Can-Retransform-Classes: true"
expect_retrans_line="isRetransformClassesSupported()=true"
;;
can_retrans_line="Can-Retransform-Classes: true "
expect_retrans_line="isRetransformClassesSupported()=true"
;;
can_retrans_line="Can-Retransform-Classes: true "
expect_retrans_line="isRetransformClassesSupported()=true"
;;
can_retrans_line="Can-Retransform-Classes: false"
;;
can_retrans_line="Can-Retransform-Classes: false"
;;
can_retrans_line="Can-Retransform-Classes: false "
;;
can_retrans_line="Can-Retransform-Classes: false "
;;
# this line makes the jar command unhappy and that's
# not what we're testing so skip this case
can_retrans_line="Can-Retransform-Classes:"
;;
can_retrans_line="Can-Retransform-Classes: "
;;
can_retrans_line="Can-Retransform-Classes: "
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: true"
expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: true"
expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: true "
expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: true "
expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: false"
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: false"
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: false "
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: false "
;;
# this line makes the jar command unhappy and that's
# not what we're testing so skip this case
can_set_nmp_line="Can-Set-Native-Method-Prefix:"
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: "
;;
can_set_nmp_line="Can-Set-Native-Method-Prefix: "
;;
premain_line="Premain-Class: ${AGENT}"
;;
premain_line="Premain-Class: ${AGENT} "
;;
premain_line="Premain-Class: ${AGENT} "
;;
version_line="Manifest-Version: 1.0"
;;
version_line="Manifest-Version: 1.0 "
;;
version_line="Manifest-Version: 1.0 "
;;
*)
echo "ERROR: invalid test token"
exit 1
esac
shift
done
fi
fi
fi
fi
}
if [ "${TESTJAVA}" = "" ]
then
echo "TESTJAVA not set. Test cannot execute. Failed."
exit 1
fi
if [ "${TESTSRC}" = "" ]
then
echo "TESTSRC not set. Test cannot execute. Failed."
exit 1
fi
if [ "${TESTCLASSES}" = "" ]
then
echo "TESTCLASSES not set. Test cannot execute. Failed."
exit 1
fi
# Now that ManifestTestApp.class is built, we move
# ExampleForBootClassPath.class so that it cannot be found
# by default
# create a bad version of ExampleForBootClassPath.class
# so we can tell when the wrong version is run
# We compile the agent in the working directory instead of with
# a build task because we construct a different agent JAR file
# for each test case.
rm -f $FAIL_MARKER
while read token; do
echo
echo "===== begin test case: $token ====="
result=$?
if [ "$result" = 0 ]; then
echo "PASS: ManifestTestApp exited with status of 0."
else
echo "FAIL: ManifestTestApp exited with status of $result"
fi
MESG="Hello from ${AGENT}!"
result=$?
if [ "$result" = 0 ]; then
echo "PASS: found '$MESG' in the test output"
else
echo "FAIL: did NOT find '$MESG' in the test output"
fi
result=$?
if [ "$result" = 0 ]; then
echo "PASS: found '$MESG' in the test output"
else
echo "FAIL: did NOT find '$MESG' in the test output"
fi
result=$?
if [ "$result" = 0 ]; then
echo "PASS: found '$MESG' in the test output"
else
echo "FAIL: did NOT find '$MESG' in the test output"
fi
result=$?
if [ "$result" = 0 ]; then
echo "PASS: found '$MESG' in the test output"
else
echo "FAIL: did NOT find '$MESG' in the test output"
fi
result=$?
if [ "$result" = 0 ]; then
echo "PASS: found '$MESG' in the test output"
else
echo "FAIL: did NOT find '$MESG' in the test output"
fi
#clean up any problematic directories
if [ -n "$to_be_deleted" ]; then
echo "Test removing [$to_be_deleted]"
fi
echo "===== end test case: $token ====="
echo
done << EOF
defaults
version_line1
version_line2
version_line3
premain_line1
premain_line2
premain_line3
boot_cp_line1
boot_cp_line2
boot_cp_line3
boot_cp_line4
boot_cp_line5
can_redef_line1
can_redef_line2
can_redef_line3
can_redef_line4
can_redef_line5
can_redef_line6
can_redef_line7
can_redef_line8
can_redef_line10
can_redef_line11
can_retrans_line1
can_retrans_line2
can_retrans_line3
can_retrans_line4
can_retrans_line5
can_retrans_line6
can_retrans_line7
can_retrans_line8
can_retrans_line10
can_retrans_line11
can_set_nmp_line1
can_set_nmp_line2
can_set_nmp_line3
can_set_nmp_line4
can_set_nmp_line5
can_set_nmp_line6
can_set_nmp_line7
can_set_nmp_line8
can_set_nmp_line10
can_set_nmp_line11
EOF
if [ -f $FAIL_MARKER ]; then
exit 1
else
exit 0
fi