--- /dev/null 2017-05-22 14:23:43.000000000 -0700 +++ new/test/javax/imageio/spi/AppletContextTest/BadPluginConfigurationTest.sh 2017-05-22 14:23:42.000000000 -0700 @@ -0,0 +1,272 @@ +#!/bin/ksh -p +# Copyright (c) 2005, 2017, 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 6342404 7078379 8167503 +# +# @summary Test verifies that incorrectly configured ImageIO plugin spi +# does not affect registration of other ImageIO plugin in the +# applet context. +# +# +# @compile IIOPluginTest.java +# @compile DummyReaderPluginSpi.java +# @run shell BadPluginConfigurationTest.sh + +# There are several resources which need to be present before many +# shell scripts can run. Following are examples of how to check for +# many common ones. +# +# Note that the shell used is the Korn Shell, KSH +# +# Also note, it is recommended that make files NOT be used. Rather, +# put the individual commands directly into this file. That way, +# it is possible to use command line arguments and other shell tech- +# niques to find the compiler, etc on different systems. For example, +# a different path could be used depending on whether this were a +# Solaris or Win32 machine, which is more difficult (if even possible) +# in a make file. + + +# Beginning of subroutines: +status=1 + +#Call this from anywhere to fail the test with an error message +# usage: fail "reason why the test failed" +fail() + { echo "The test failed :-(" + echo "$*" 1>&2 + echo "exit status was $status" + exit $status + } #end of fail() + +#Call this from anywhere to pass the test with a message +# usage: pass "reason why the test passed if applicable" +pass() + { echo "The test passed!!!" + echo "$*" 1>&2 + exit 0 + } #end of pass() + +# end of subroutines + + +# The beginning of the script proper + +# Checking for proper OS +OS=`uname -s` +case "$OS" in + SunOS | Linux | Darwin ) + FILESEP="/" + PATHSEP=":" + TMP=`cd /tmp; pwd -P` + ;; + + Windows* ) + FILESEP="\\" + PATHSEP=";" + TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` + ;; + + CYGWIN* ) + FILESEP="/" + PATHSEP=";" + TMP="/tmp" + ;; + + # catch all other OSs + * ) + echo "Unrecognized system! $OS" + fail "Unrecognized system! $OS" + ;; +esac + +# Want this test to run standalone as well as in the harness, so do the +# following to copy the test's directory into the harness's scratch directory +# and set all appropriate variables: + +if [ -z "${TESTJAVA}" ] ; then + # TESTJAVA is not set, so the test is running stand-alone. + # TESTJAVA holds the path to the root directory of the build of the JDK + # to be tested. That is, any java files run explicitly in this shell + # should use TESTJAVA in the path to the java interpreter. + # So, we'll set this to the JDK spec'd on the command line. If none + # is given on the command line, tell the user that and use a cheesy + # default. + # THIS IS THE JDK BEING TESTED. + if [ -n "$1" ] ; + then TESTJAVA=$1 + else fail "no JDK specified on command line!" + fi + TESTSRC=. + TESTCLASSES=. + STANDALONE=1; +fi +echo "JDK under test is: $TESTJAVA" + +#Deal with .class files: +if [ -n "${STANDALONE}" ] ; + then + #if standalone, remind user to cd to dir. containing test before running it + echo "Just a reminder: cd to the dir containing this test when running it" + # then compile all .java files (if there are any) into .class files + if [ -a *.java ] ; + then echo "Reminder, this test should be in its own directory with all" + echo "supporting files it needs in the directory with it." + ${COMPILEJAVA}/bin/javac ./*.java ; + fi + # else in harness so copy all the class files from where jtreg put them + # over to the scratch directory this test is running in. + else cp ${TESTCLASSES}/*.class . ; +fi + +#if in test harness, then copy the entire directory that the test is in over +# to the scratch directory. This catches any support files needed by the test. +if [ -z "${STANDALONE}" ] ; + then cp ${TESTSRC}/*.java . +fi + +#Just before executing anything, make sure it has executable permission! +chmod 777 ./* + +############### YOUR TEST CODE HERE!!!!!!! ############# + +#All files required for the test should be in the same directory with +# this file. If converting a standalone test to run with the harness, +# as long as all files are in the same directory and it returns 0 for +# pass, you should be able to cut and paste it into here and it will +# run with the test harness. + +# This is an example of running something -- test +# The stuff below catches the exit status of test then passes or fails +# this shell test as appropriate ( 0 status is considered a pass here ) + +echo +echo ------ PREPARE TEST PLUGIN --------- + +# note that we can not use some subdirectory of the +# scratch dir as the plugin dst dir because the test +# app have file read permission for all subdirs of the +# scratch dir + +PLUGINDST_DIR=${TMP}/test_ext +#PLUGINDST_DIR=${TESTJAVA}/lib/ext +TEST_PLUGIN=dummy.jar + +if [ ! -d ${PLUGINDST_DIR} ] ; then + mkdir ${PLUGINDST_DIR} +fi + +# remove old service declaration +if [ -d META-INF ] ; then + rm -rf META-INF +fi + +# generate the service declaration +if [ ! -d META_INF ] ; then + mkdir META-INF + mkdir META-INF/services +fi + +# add wrong record to the service configuration +echo "BadReaderPluginSpi" > META-INF/services/javax.imageio.spi.ImageReaderSpi + +echo "DummyReaderPluginSpi" >> META-INF/services/javax.imageio.spi.ImageReaderSpi + + +${TESTJAVA}/bin/jar -cvf ${TEST_PLUGIN} DummyReaderPluginSpi*.class META-INF/services/javax.imageio.spi.ImageReaderSpi + +echo ----- TEST PLUGIN IS READY -------- +echo +echo ----- INSTALL PLUGIN -------- +echo "Install test plugin to ${PLUGINDST_DIR}" +if [ -f ${PLUGINDST_DIR}/${TEST_PLUGIN} ] ; then + echo "Remove old plugin..." + rm -f ${PLUGINDST_DIR}/${TEST_PLUGIN} +fi +mv -f ${TEST_PLUGIN} ${PLUGINDST_DIR} +if [ -f ${PLUGINDST_DIR}/${TEST_PLUGIN} ] ; then + echo Test plugin is installed. +else + fail "Unable to install test plugin to $PLUGINDST_DIR" +fi +echo ----- PLUGIN IS INSTALLED ------ +echo +echo ----- CLEAN PLUGIN TEMPORARY FILES ----- +rm -rf DummyReaderPluginSpi*.class META-INF +echo ----- CLEANING IS COMPLETE ------- +echo + + +case "$OS" in + CYGWIN* ) + TEST_CODEBASE=$(cygpath -m ${PWD}) + TEST_PLUGIN_JAR=$(cygpath -m ${PLUGINDST_DIR}${FILESEP}${TEST_PLUGIN}) + ;; + + # catch all other OSs + * ) + TEST_CODEBASE=${PWD} + TEST_PLUGIN_JAR=${PLUGINDST_DIR}${FILESEP}${TEST_PLUGIN} + ;; +esac + + +# Update policy file to grant read permission +echo "grant codeBase \"file:${TEST_CODEBASE}\" {" > classpath.policy +echo " permission java.io.FilePermission \"${TEST_PLUGIN_JAR}\", \"read\";" >> classpath.policy +echo " permission java.util.PropertyPermission \"test.5076692.property\", \"read\";" >> classpath.policy +echo "};" >> classpath.policy +echo "grant codeBase \"file:${TEST_PLUGIN_JAR}\" {" >> classpath.policy +echo " permission java.util.PropertyPermission \"test.5076692.property\", \"read\";" >> classpath.policy +echo "};" >> classpath.policy + +echo --------------------- +echo --- Applet policy --- +echo --------------------- +cat classpath.policy +echo --------------------- +echo + +echo ------------------------------- +echo --- Applet Classpath Test --- +echo ------------------------------- +# +# please note that we need to use "==" in setup of the java.security.policy +# property in order to overwrite policies defined in the user policy file +# For more details see: +# http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html) +# + +${TESTJAVA}/bin/java ${TESTVMOPTS} -cp ".${PATHSEP}${TEST_PLUGIN_JAR}" \ + -Djava.security.policy==classpath.policy \ + -Djava.security.manager IIOPluginTest + +status=$? + +if [ $status -eq "0" ] ; then + pass "" +else + fail "Test failed due to test plugin was not found." +fi +