1 #!/bin/ksh -p 2 # Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 # 5 # This code is free software; you can redistribute it and/or modify it 6 # under the terms of the GNU General Public License version 2 only, as 7 # published by the Free Software Foundation. 8 # 9 # This code is distributed in the hope that it will be useful, but WITHOUT 10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 # version 2 for more details (a copy is included in the LICENSE file that 13 # accompanied this code). 14 # 15 # You should have received a copy of the GNU General Public License version 16 # 2 along with this work; if not, write to the Free Software Foundation, 17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 # 19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 # or visit www.oracle.com if you need additional information or have any 21 # questions. 22 # 23 # @test 24 # 25 # @bug 6342404 7078379 8167503 8183351 26 # 27 # @summary Test verifies that incorrectly configured ImageIO plugin spi 28 # does not affect registration of other ImageIO plugin in the 29 # applet context. 30 # 31 # 32 # @compile IIOPluginTest.java 33 # @compile DummyReaderPluginSpi.java 34 # @run shell BadPluginConfigurationTest.sh 35 36 # There are several resources which need to be present before many 37 # shell scripts can run. Following are examples of how to check for 38 # many common ones. 39 # 40 # Note that the shell used is the Korn Shell, KSH 41 # 42 # Also note, it is recommended that make files NOT be used. Rather, 43 # put the individual commands directly into this file. That way, 44 # it is possible to use command line arguments and other shell tech- 45 # niques to find the compiler, etc on different systems. For example, 46 # a different path could be used depending on whether this were a 47 # Solaris or Win32 machine, which is more difficult (if even possible) 48 # in a make file. 49 50 51 # Beginning of subroutines: 52 status=1 53 54 #Call this from anywhere to fail the test with an error message 55 # usage: fail "reason why the test failed" 56 fail() 57 { echo "The test failed :-(" 58 echo "$*" 1>&2 59 echo "exit status was $status" 60 clean 61 exit $status 62 } #end of fail() 63 64 #Call this from anywhere to pass the test with a message 65 # usage: pass "reason why the test passed if applicable" 66 pass() 67 { echo "The test passed!!!" 68 echo "$*" 1>&2 69 clean 70 exit 0 71 } #end of pass() 72 73 #Clean up the test_ext directory (PLUGINDST_DIR) before leaving 74 clean() 75 { 76 echo "Removing PLUGINDST_DIR ${PLUGINDST_DIR}" 77 if [ -n "${PLUGINDST_DIR}" -a -d "${PLUGINDST_DIR}" ] ; then 78 rm -rf "${PLUGINDST_DIR}" 79 fi 80 } 81 82 # end of subroutines 83 84 85 # The beginning of the script proper 86 87 # Checking for proper OS 88 OS=`uname -s` 89 MKTEMP="mktemp" 90 case "$OS" in 91 AIX ) 92 FILESEP="/" 93 PATHSEP=":" 94 TMP=`cd /tmp; pwd -P` 95 if ! [ -e ${MKTEMP} ] ; then 96 MKTEMP="/opt/freeware/bin/mktemp" 97 fi 98 if ! [ -e ${MKTEMP} ] ; then 99 pass "Test skipped because no mktemp found on this machine" 100 fi 101 ;; 102 103 Darwin | Linux | SunOS ) 104 FILESEP="/" 105 PATHSEP=":" 106 TMP=`cd /tmp; pwd -P` 107 ;; 108 109 Windows* ) 110 FILESEP="\\" 111 PATHSEP=";" 112 TMP=`cd "${SystemRoot}/Temp"; echo ${PWD}` 113 ;; 114 115 CYGWIN* ) 116 FILESEP="/" 117 PATHSEP=";" 118 TMP="/tmp" 119 ;; 120 121 # catch all other OSs 122 * ) 123 echo "Unrecognized system! $OS" 124 fail "Unrecognized system! $OS" 125 ;; 126 esac 127 128 # Want this test to run standalone as well as in the harness, so do the 129 # following to copy the test's directory into the harness's scratch directory 130 # and set all appropriate variables: 131 132 if [ -z "${TESTJAVA}" ] ; then 133 # TESTJAVA is not set, so the test is running stand-alone. 134 # TESTJAVA holds the path to the root directory of the build of the JDK 135 # to be tested. That is, any java files run explicitly in this shell 136 # should use TESTJAVA in the path to the java interpreter. 137 # So, we'll set this to the JDK spec'd on the command line. If none 138 # is given on the command line, tell the user that and use a cheesy 139 # default. 140 # THIS IS THE JDK BEING TESTED. 141 if [ -n "$1" ] ; 142 then TESTJAVA=$1 143 else fail "no JDK specified on command line!" 144 fi 145 TESTSRC=. 146 TESTCLASSES=. 147 STANDALONE=1; 148 fi 149 echo "JDK under test is: $TESTJAVA" 150 151 #Deal with .class files: 152 if [ -n "${STANDALONE}" ] ; 153 then 154 #if standalone, remind user to cd to dir. containing test before running it 155 echo "Just a reminder: cd to the dir containing this test when running it" 156 # then compile all .java files (if there are any) into .class files 157 if [ -a *.java ] ; 158 then echo "Reminder, this test should be in its own directory with all" 159 echo "supporting files it needs in the directory with it." 160 ${COMPILEJAVA}/bin/javac ./*.java ; 161 fi 162 # else in harness so copy all the class files from where jtreg put them 163 # over to the scratch directory this test is running in. 164 else cp ${TESTCLASSES}/*.class . ; 165 fi 166 167 #if in test harness, then copy the entire directory that the test is in over 168 # to the scratch directory. This catches any support files needed by the test. 169 if [ -z "${STANDALONE}" ] ; 170 then cp ${TESTSRC}/*.java . 171 fi 172 173 #Just before executing anything, make sure it has executable permission! 174 chmod 777 ./* 175 176 ############### YOUR TEST CODE HERE!!!!!!! ############# 177 178 #All files required for the test should be in the same directory with 179 # this file. If converting a standalone test to run with the harness, 180 # as long as all files are in the same directory and it returns 0 for 181 # pass, you should be able to cut and paste it into here and it will 182 # run with the test harness. 183 184 # This is an example of running something -- test 185 # The stuff below catches the exit status of test then passes or fails 186 # this shell test as appropriate ( 0 status is considered a pass here ) 187 188 echo 189 echo ------ PREPARE TEST PLUGIN --------- 190 191 # note that we can not use some subdirectory of the 192 # scratch dir as the plugin dst dir because the test 193 # app have file read permission for all subdirs of the 194 # scratch dir 195 196 PLUGINDST_DIR=$(${MKTEMP} -d ${TMP}/iio_test.XXXXXXXX) 197 echo "Created PLUGINDST_DIR as ${PLUGINDST_DIR}" 198 199 TEST_PLUGIN=dummy.jar 200 201 # remove old service declaration 202 if [ -d META-INF ] ; then 203 rm -rf META-INF 204 fi 205 206 # generate the service declaration 207 if [ ! -d META_INF ] ; then 208 mkdir META-INF 209 mkdir META-INF/services 210 fi 211 212 # add wrong record to the service configuration 213 echo "BadReaderPluginSpi" > META-INF/services/javax.imageio.spi.ImageReaderSpi 214 215 echo "DummyReaderPluginSpi" >> META-INF/services/javax.imageio.spi.ImageReaderSpi 216 217 218 ${TESTJAVA}/bin/jar -cvf ${TEST_PLUGIN} DummyReaderPluginSpi*.class META-INF/services/javax.imageio.spi.ImageReaderSpi 219 220 echo ----- TEST PLUGIN IS READY -------- 221 echo 222 echo ----- INSTALL PLUGIN -------- 223 echo "Install test plugin to ${PLUGINDST_DIR}" 224 if [ -f ${PLUGINDST_DIR}/${TEST_PLUGIN} ] ; then 225 echo "Remove old plugin..." 226 rm -f ${PLUGINDST_DIR}/${TEST_PLUGIN} 227 fi 228 mv -f ${TEST_PLUGIN} ${PLUGINDST_DIR} 229 if [ -f ${PLUGINDST_DIR}/${TEST_PLUGIN} ] ; then 230 echo Test plugin is installed. 231 else 232 fail "Unable to install test plugin to $PLUGINDST_DIR" 233 fi 234 echo ----- PLUGIN IS INSTALLED ------ 235 echo 236 echo ----- CLEAN PLUGIN TEMPORARY FILES ----- 237 rm -rf DummyReaderPluginSpi*.class META-INF 238 echo ----- CLEANING IS COMPLETE ------- 239 echo 240 241 242 case "$OS" in 243 CYGWIN* ) 244 TEST_CODEBASE=$(cygpath -m ${PWD}) 245 TEST_PLUGIN_JAR=$(cygpath -m ${PLUGINDST_DIR}${FILESEP}${TEST_PLUGIN}) 246 ;; 247 248 # catch all other OSs 249 * ) 250 TEST_CODEBASE=${PWD} 251 TEST_PLUGIN_JAR=${PLUGINDST_DIR}${FILESEP}${TEST_PLUGIN} 252 ;; 253 esac 254 255 256 # Update policy file to grant read permission 257 echo "grant codeBase \"file:${TEST_CODEBASE}\" {" > classpath.policy 258 echo " permission java.io.FilePermission \"${TEST_PLUGIN_JAR}\", \"read\";" >> classpath.policy 259 echo " permission java.util.PropertyPermission \"test.5076692.property\", \"read\";" >> classpath.policy 260 echo "};" >> classpath.policy 261 echo "grant codeBase \"file:${TEST_PLUGIN_JAR}\" {" >> classpath.policy 262 echo " permission java.util.PropertyPermission \"test.5076692.property\", \"read\";" >> classpath.policy 263 echo "};" >> classpath.policy 264 265 echo --------------------- 266 echo --- Applet policy --- 267 echo --------------------- 268 cat classpath.policy 269 echo --------------------- 270 echo 271 272 echo ------------------------------- 273 echo --- Applet Classpath Test --- 274 echo ------------------------------- 275 # 276 # please note that we need to use "==" in setup of the java.security.policy 277 # property in order to overwrite policies defined in the user policy file 278 # For more details see: 279 # http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html) 280 # 281 282 ${TESTJAVA}/bin/java ${TESTVMOPTS} -cp ".${PATHSEP}${TEST_PLUGIN_JAR}" \ 283 -Djava.security.policy==classpath.policy \ 284 -Djava.security.manager IIOPluginTest 285 286 status=$? 287 288 if [ $status -eq "0" ] ; then 289 pass "" 290 else 291 fail "Test failed due to test plugin was not found." 292 fi 293