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