# # Copyright (c) 2008, 2015, 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 6274276 # @summary JLI JAR manifest processing should ignore leading and trailing white space. # @author Daniel D. Daugherty # # @key intermittent # @run build ManifestTestApp ExampleForBootClassPath # @run shell/timeout=900 ManifestTest.sh #
make_a_JAR() { # 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."
can_redef_line=""
expect_redef_line="isRedefineClassesSupported()=false"
can_retrans_line=""
expect_retrans_line="isRetransformClassesSupported()=false"
can_set_nmp_line=""
expect_set_nmp_line="isNativeMethodPrefixSupported()=false" # some tests create directories with spaces in their name, # explicitly delete these.
to_be_deleted=""
while [ $# != 0 ] ; do
case "$1" in
defaults) # just use the defaults for the test
;;
boot_cp_line2)
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 cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class \
has_leading_blank # the bad class is in the directory with the blank cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class.bad \ " has_leading_blank/ExampleForBootClassPath.class"
;;
boot_cp_line3)
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 cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class \
has_trailing_blank # the bad class is in the directory with the blank cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class.bad \ "has_trailing_blank /ExampleForBootClassPath.class"
;;
boot_cp_line4)
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 "
mkdir -p has_leading_and_trailing_blank \ " has_leading_and_trailing_blank " # the good class is in the directory without the blanks cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class \
has_leading_and_trailing_blank # the bad class is in the directory with the blanks cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class.bad \ " has_leading_and_trailing_blank /ExampleForBootClassPath.class"
;;
boot_cp_line5)
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 cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class has_embedded # the bad class is in the directory with the blank cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class.bad \ "has_embedded blank/ExampleForBootClassPath.class"
;;
can_redef_line9) # 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_retrans_line9) # 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_set_nmp_line9) # 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:"
;;
# Now that ManifestTestApp.class is built, we move # ExampleForBootClassPath.class so that it cannot be found # by default
OUT_OF_THE_WAY=out_of_the_way
mkdir $OUT_OF_THE_WAY
mv "${TESTCLASSES}/ExampleForBootClassPath.class" $OUT_OF_THE_WAY
# create a bad version of ExampleForBootClassPath.class # so we can tell when the wrong version is run
sed 's/return 15/return 42/'"${TESTSRC}"/ExampleForBootClassPath.java \
> ExampleForBootClassPath.java "$JAVAC" ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} ExampleForBootClassPath.java
mv ExampleForBootClassPath.class \
$OUT_OF_THE_WAY/ExampleForBootClassPath.class.bad
mv ExampleForBootClassPath.java \
$OUT_OF_THE_WAY/ExampleForBootClassPath.java.bad
AGENT=ManifestTestAgent # 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.
${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d . ${TESTSRC}/${AGENT}.java
FAIL_MARKER=fail_marker rm -f $FAIL_MARKER
while read token; do echo echo"===== begin test case: $token ====="
make_a_JAR "$token"
if [ "$result" = 0 ]; then echo"PASS: ManifestTestApp exited with status of 0." else echo"FAIL: ManifestTestApp exited with status of $result"
touch $FAIL_MARKER fi
MESG="Hello from ${AGENT}!"
grep -s "$MESG" output.log > /dev/null
result=$? if [ "$result" = 0 ]; then echo"PASS: found '$MESG' in the test output" else echo"FAIL: did NOT find '$MESG' in the test output"
touch $FAIL_MARKER fi
MESG=`cat expect_boot_cp_line | tr -d '\n\r'`
grep -s "$MESG" output.log > /dev/null
result=$? if [ "$result" = 0 ]; then echo"PASS: found '$MESG' in the test output" else echo"FAIL: did NOT find '$MESG' in the test output"
touch $FAIL_MARKER fi
MESG=`cat expect_redef_line | tr -d '\n\r'`
grep -s "$MESG" output.log > /dev/null
result=$? if [ "$result" = 0 ]; then echo"PASS: found '$MESG' in the test output" else echo"FAIL: did NOT find '$MESG' in the test output"
touch $FAIL_MARKER fi
MESG=`cat expect_retrans_line | tr -d '\n\r'`
grep -s "$MESG" output.log > /dev/null
result=$? if [ "$result" = 0 ]; then echo"PASS: found '$MESG' in the test output" else echo"FAIL: did NOT find '$MESG' in the test output"
touch $FAIL_MARKER fi
MESG=`cat expect_set_nmp_line | tr -d '\n\r'`
grep -s "$MESG" output.log > /dev/null
result=$? if [ "$result" = 0 ]; then echo"PASS: found '$MESG' in the test output" else echo"FAIL: did NOT find '$MESG' in the test output"
touch $FAIL_MARKER fi
#clean up any problematic directories if [ -n "$to_be_deleted" ]; then echo"Test removing [$to_be_deleted]" rm -rf "$to_be_deleted" fi
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.