Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Java/Openjdk/test/jdk/java/lang/instrument/   (Sun/Oracle ©)  Datei vom 13.11.2022 mit Größe 15 kB image not shown  

Quelle  ManifestTest.sh   Sprache: Shell

 
#
# 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_line1)
            boot_cp_line="Boot-Class-Path: no_white_space"
            expect_boot_cp_line="ExampleForBootClassPath was loaded."
            mkdir -p no_white_space
            cp -p $OUT_OF_THE_WAY/ExampleForBootClassPath.class no_white_space
            ;;

        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_line1)
            can_redef_line="Can-Redefine-Classes: true"
            expect_redef_line="isRedefineClassesSupported()=true"
            ;;

        can_redef_line2)
            can_redef_line="Can-Redefine-Classes: true"
            expect_redef_line="isRedefineClassesSupported()=true"
            ;;

        can_redef_line3)
            can_redef_line="Can-Redefine-Classes: true "
            expect_redef_line="isRedefineClassesSupported()=true"
            ;;

        can_redef_line4)
            can_redef_line="Can-Redefine-Classes: true "
            expect_redef_line="isRedefineClassesSupported()=true"
            ;;

        can_redef_line5)
            can_redef_line="Can-Redefine-Classes: false"
            ;;

        can_redef_line6)
            can_redef_line="Can-Redefine-Classes: false"
            ;;

        can_redef_line7)
            can_redef_line="Can-Redefine-Classes: false "
            ;;

        can_redef_line8)
            can_redef_line="Can-Redefine-Classes: false "
            ;;

        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_redef_line10)
            can_redef_line="Can-Redefine-Classes: "
            ;;

        can_redef_line11)
            can_redef_line="Can-Redefine-Classes: "
            ;;

        can_retrans_line1)
            can_retrans_line="Can-Retransform-Classes: true"
            expect_retrans_line="isRetransformClassesSupported()=true"
            ;;

        can_retrans_line2)
            can_retrans_line="Can-Retransform-Classes: true"
            expect_retrans_line="isRetransformClassesSupported()=true"
            ;;

        can_retrans_line3)
            can_retrans_line="Can-Retransform-Classes: true "
            expect_retrans_line="isRetransformClassesSupported()=true"
            ;;

        can_retrans_line4)
            can_retrans_line="Can-Retransform-Classes: true "
            expect_retrans_line="isRetransformClassesSupported()=true"
            ;;

        can_retrans_line5)
            can_retrans_line="Can-Retransform-Classes: false"
            ;;

        can_retrans_line6)
            can_retrans_line="Can-Retransform-Classes: false"
            ;;

        can_retrans_line7)
            can_retrans_line="Can-Retransform-Classes: false "
            ;;

        can_retrans_line8)
            can_retrans_line="Can-Retransform-Classes: false "
            ;;

        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_retrans_line10)
            can_retrans_line="Can-Retransform-Classes: "
            ;;

        can_retrans_line11)
            can_retrans_line="Can-Retransform-Classes: "
            ;;

        can_set_nmp_line1)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: true"
            expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
            ;;

        can_set_nmp_line2)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: true"
            expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
            ;;

        can_set_nmp_line3)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: true "
            expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
            ;;

        can_set_nmp_line4)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: true "
            expect_set_nmp_line="isNativeMethodPrefixSupported()=true"
            ;;

        can_set_nmp_line5)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: false"
            ;;

        can_set_nmp_line6)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: false"
            ;;

        can_set_nmp_line7)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: false "
            ;;

        can_set_nmp_line8)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: false "
            ;;

        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:"
            ;;

        can_set_nmp_line10)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: "
            ;;

        can_set_nmp_line11)
            can_set_nmp_line="Can-Set-Native-Method-Prefix: "
            ;;

        premain_line1)
            premain_line="Premain-Class: ${AGENT}"
            ;;

        premain_line2)
            premain_line="Premain-Class: ${AGENT} "
            ;;

        premain_line3)
            premain_line="Premain-Class: ${AGENT} "
            ;;

        version_line1)
            version_line="Manifest-Version: 1.0"
            ;;

        version_line2)
            version_line="Manifest-Version: 1.0 "
            ;;

        version_line3)
            version_line="Manifest-Version: 1.0 "
            ;;

        *)
            echo "ERROR: invalid test token"
            exit 1
        esac
        shift
    done

    echo "${version_line}" >  ${AGENT}.mf
    echo "${premain_line}" >> ${AGENT}.mf

    if [ -n "$boot_cp_line" ]; then
        echo "${boot_cp_line}" >> ${AGENT}.mf
    fi

    if [ -n "$can_redef_line" ]; then
        echo "${can_redef_line}" >> ${AGENT}.mf
    fi

    if [ -n "$can_retrans_line" ]; then
        echo "${can_retrans_line}" >> ${AGENT}.mf
    fi

    if [ -n "$can_set_nmp_line" ]; then
        echo "${can_set_nmp_line}" >> ${AGENT}.mf
    fi

    rm -f ${AGENT}.jar
    ${JAR} ${TESTTOOLVMOPTS} cvfm ${AGENT}.jar ${AGENT}.mf ${AGENT}.class

    echo "$expect_boot_cp_line" > expect_boot_cp_line
    echo "$expect_redef_line"   > expect_redef_line
    echo "$expect_retrans_line" > expect_retrans_line
    echo "$expect_set_nmp_line" > expect_set_nmp_line
}

if [ "${TESTJAVA}" = "" ]
then
  echo "TESTJAVA not set. Test cannot execute. Failed."
  exit 1
fi

if [ "${COMPILEJAVA}" = "" ]
then
  COMPILEJAVA="${TESTJAVA}"
fi
echo "COMPILEJAVA=${COMPILEJAVA}"

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

JAR="${COMPILEJAVA}/bin/jar"
JAVAC="${COMPILEJAVA}"/bin/javac
JAVA="${TESTJAVA}"/bin/java

# 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"

    "${JAVA}" ${TESTVMOPTS} -javaagent:${AGENT}.jar \
        -classpath "${TESTCLASSES}" ManifestTestApp > output.log 2>&1
    result=$?

    cat output.log

    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

    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

86%


¤ Dauer der Verarbeitung: 0.24 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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 ist noch experimentell.