MineField.sh revision 2721:f7ce2cfa4cdb
1#!/bin/sh 2 3# 4# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. 5# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6# 7# This code is free software; you can redistribute it and/or modify it 8# under the terms of the GNU General Public License version 2 only, as 9# published by the Free Software Foundation. 10# 11# This code is distributed in the hope that it will be useful, but WITHOUT 12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14# version 2 for more details (a copy is included in the LICENSE file that 15# accompanied this code). 16# 17# You should have received a copy of the GNU General Public License version 18# 2 along with this work; if not, write to the Free Software Foundation, 19# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20# 21# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22# or visit www.oracle.com if you need additional information or have any 23# questions. 24# 25 26# 27# @test 28# @bug 4758537 4809833 29# @summary Test that javac and java find files in similar ways 30# @author Martin Buchholz 31# 32# @run shell/timeout=600 MineField.sh 33 34# To run this test manually, simply do ./MineField.sh 35 36#---------------------------------------------------------------- 37# The search order for classes used by both java and javac is: 38# 39# -Xbootclasspath/p:<path> 40# -endorseddirs <dirs> or -Djava.endorsed.dirs=<dirs> (search for jar/zip only) 41# -bootclasspath <path> or -Xbootclasspath:<path> 42# -Xbootclasspath/a:<path> 43# -extdirs <dirs> or -Djava.ext.dirs=<dirs> (search for jar/zip only) 44# -classpath <path>, -cp <path>, env CLASSPATH=<path> 45# 46# Peculiarities of the class file search: 47# - Empty elements of the (user) classpath default to ".", 48# while empty elements of other paths are ignored. 49# - Only for the user classpath is an empty string value equivalent to "." 50# - Specifying a bootclasspath on the command line obliterates any 51# previous -Xbootclasspath/p: or -Xbootclasspath/a: command line flags. 52#---------------------------------------------------------------- 53 54. ${TESTSRC-.}/Util.sh 55 56set -u 57 58# BCP=`DefaultBootClassPath` 59 60#---------------------------------------------------------------- 61# Prepare the "Minefield" 62#---------------------------------------------------------------- 63Cleanup() { 64 Sys rm -rf GooSrc GooJar GooZip GooClass 65 Sys rm -rf BadSrc BadJar BadZip BadClass 66 Sys rm -rf OneDir *.class Main.java MANIFEST.MF 67} 68 69Cleanup 70Sys mkdir GooSrc GooJar GooZip GooClass 71Sys mkdir BadSrc BadJar BadZip BadClass 72 73echo 'public class Lib {public static void f(){}}' > Lib.java 74Sys "$javac" ${TESTTOOLVMOPTS} Lib.java 75Sys "$jar" cf GooJar/Lib.jar Lib.class 76Sys "$jar" cf GooZip/Lib.zip Lib.class 77Sys mv Lib.class GooClass/. 78Sys mv Lib.java GooSrc/. 79CheckFiles GooZip/Lib.zip GooJar/Lib.jar GooSrc/Lib.java 80 81echo 'public class Lib {/* Bad */}' > Lib.java 82Sys "$javac" ${TESTTOOLVMOPTS} Lib.java 83Sys "$jar" cf BadJar/Lib.jar Lib.class 84Sys "$jar" cf BadZip/Lib.zip Lib.class 85Sys mv Lib.class BadClass/. 86Sys mv Lib.java BadSrc/. 87CheckFiles BadZip/Lib.zip BadJar/Lib.jar BadSrc/Lib.java 88 89echo 'public class Main {public static void main(String[] a) {Lib.f();}}' > Main.java 90 91#---------------------------------------------------------------- 92# Verify that javac class search order is the same as java's 93#---------------------------------------------------------------- 94# Failure "$javac" ${TESTTOOLVMOPTS} \ 95# -Xbootclasspath/p:"BadClass" \ 96# -J-Djava.endorsed.dirs="GooJar" \ 97# Main.java 98# Success "$javac" ${TESTTOOLVMOPTS} \ 99# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ 100# -J-Djava.endorsed.dirs="BadJar${PS}GooZip" \ 101# Main.java 102# Failure "$java" ${TESTVMOPTS} \ 103# -Xbootclasspath/p:"BadClass" \ 104# -Djava.endorsed.dirs="GooJar" \ 105# Main 106# Success "$java" ${TESTVMOPTS} \ 107# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ 108# -Djava.endorsed.dirs="BadJar${PS}GooZip" \ 109# Main 110 111#---------------------------------------------------------------- 112# Failure "$javac" ${TESTTOOLVMOPTS} \ 113# -Xbootclasspath/p:"GooClass" \ 114# -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ 115# Main.java 116# Success "$javac" ${TESTTOOLVMOPTS} \ 117# -Xbootclasspath/p:"BadClass${PS}GooClass" \ 118# -bootclasspath "$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ 119# Main.java 120# Success "$javac" ${TESTTOOLVMOPTS} \ 121# -Xbootclasspath/p:"BadJar/Lib.jar" \ 122# -Xbootclasspath:"$BCP${PS}GooClass" \ 123# Main.java 124# Failure "$java" ${TESTVMOPTS} \ 125# -Xbootclasspath/p:"GooClass" \ 126# -Xbootclasspath:"$BCP${PS}BadZip/Lib.zip" \ 127# Main 128# Success "$java" ${TESTVMOPTS} \ 129# -Xbootclasspath/p:"BadClass${PS}GooClass" \ 130# -Xbootclasspath:"$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ 131# Main 132 133#---------------------------------------------------------------- 134# Failure "$javac" ${TESTTOOLVMOPTS} \ 135# -bootclasspath "$BCP${PS}GooZip/Lib.zip" \ 136# -Xbootclasspath/p:"BadClass" \ 137# Main.java 138# Success "$javac" ${TESTTOOLVMOPTS} \ 139# -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ 140# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ 141# Main.java 142# Failure "$java" ${TESTVMOPTS} \ 143# -Xbootclasspath:"$BCP${PS}GooClass" \ 144# -Xbootclasspath/p:"BadClass" \ 145# Main 146# Success "$java" ${TESTVMOPTS} \ 147# -Xbootclasspath:"$BCP${PS}BadClass" \ 148# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ 149# Main 150 151#---------------------------------------------------------------- 152Failure "$javac" ${TESTTOOLVMOPTS} \ 153 -Xbootclasspath/p:"BadClass" \ 154 -Xbootclasspath/a:"GooClass" \ 155 Main.java 156Success "$javac" ${TESTTOOLVMOPTS} \ 157 -Xbootclasspath/p:"GooClass${PS}BadClass" \ 158 -Xbootclasspath/a:"BadClass" \ 159 Main.java 160Failure "$java" ${TESTVMOPTS} \ 161 -Xbootclasspath/p:"BadClass" \ 162 -Xbootclasspath/a:"GooClass" \ 163 Main 164Success "$java" ${TESTVMOPTS} \ 165 -Xbootclasspath/p:"GooClass${PS}BadClass" \ 166 -Xbootclasspath/a:"BadClass" \ 167 Main 168 169#---------------------------------------------------------------- 170# Failure "$javac" ${TESTTOOLVMOPTS} \ 171# -Xbootclasspath/p:"GooClass" \ 172# -J-Djava.endorsed.dirs="BadZip" \ 173# -bootclasspath "GooClass${PS}$BCP" \ 174# Main.java 175# Success "$javac" ${TESTTOOLVMOPTS} \ 176# -Xbootclasspath/p:"BadClass" \ 177# -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ 178# -bootclasspath "BadClass${PS}$BCP" \ 179# Main.java 180# Failure "$java" ${TESTVMOPTS} \ 181# -Xbootclasspath/p:"GooClass" \ 182# -Djava.endorsed.dirs="BadZip" \ 183# -Xbootclasspath:"GooClass${PS}$BCP" \ 184# Main 185# Success "$java" ${TESTVMOPTS} \ 186# -Xbootclasspath/p:"BadClass" \ 187# -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ 188# -Xbootclasspath:"BadClass${PS}$BCP" \ 189# Main 190 191#---------------------------------------------------------------- 192# Failure "$javac" ${TESTTOOLVMOPTS} \ 193# -Xbootclasspath/p:"GooClass" \ 194# -Xbootclasspath:"BadClass${PS}$BCP" \ 195# -Xbootclasspath/a:"GooClass" \ 196# Main.java 197# Success "$javac" ${TESTTOOLVMOPTS} \ 198# -Xbootclasspath/p:"BadClass" \ 199# -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ 200# -Xbootclasspath/a:"BadClass" \ 201# Main.java 202# Failure "$java" ${TESTVMOPTS} \ 203# -Xbootclasspath/p:"GooClass" \ 204# -Xbootclasspath:"BadClass${PS}$BCP" \ 205# -Xbootclasspath/a:"GooClass" \ 206# Main 207# Success "$java" ${TESTVMOPTS} \ 208# -Xbootclasspath/p:"BadClass" \ 209# -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ 210# -Xbootclasspath/a:"BadClass" \ 211# Main 212 213#---------------------------------------------------------------- 214# Failure "$javac" ${TESTTOOLVMOPTS} \ 215# -J-Djava.endorsed.dirs="BadZip" \ 216# -Xbootclasspath:"GooClass${PS}$BCP" \ 217# Main.java 218# Success "$javac" ${TESTTOOLVMOPTS} \ 219# -endorseddirs "BadClass${PS}GooZip${PS}BadJar" \ 220# -Xbootclasspath:"BadClass${PS}$BCP" \ 221# Main.java 222# Success "$javac" ${TESTTOOLVMOPTS} \ 223# -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ 224# -Xbootclasspath:"BadClass${PS}$BCP" \ 225# Main.java 226# Success "$javac" ${TESTTOOLVMOPTS} \ 227# -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ 228# -Xbootclasspath:"BadClass${PS}$BCP" \ 229# Main.java 230# Failure "$java" ${TESTVMOPTS} \ 231# -Djava.endorsed.dirs="BadZip" \ 232# -Xbootclasspath:"GooClass${PS}$BCP" \ 233# Main 234# Success "$java" ${TESTVMOPTS} \ 235# -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ 236# -Xbootclasspath:"BadClass${PS}$BCP" \ 237# Main 238 239#---------------------------------------------------------------- 240Failure "$javac" ${TESTTOOLVMOPTS} \ 241 -Xbootclasspath/a:"BadClass" \ 242 -extdirs "GooZip" \ 243 Main.java 244Success "$javac" ${TESTTOOLVMOPTS} \ 245 -Xbootclasspath/a:"GooClass${PS}BadClass" \ 246 -extdirs "BadZip" \ 247 Main.java 248# Failure "$java" ${TESTVMOPTS} \ 249# -Xbootclasspath/a:"BadClass" \ 250# -Djava.ext.dirs="GooZip" \ 251# Main 252# Success "$java" ${TESTVMOPTS} \ 253# -Xbootclasspath/a:"GooClass${PS}BadClass" \ 254# -Djava.ext.dirs="BadZip" \ 255# Main 256 257#---------------------------------------------------------------- 258# Failure "$javac" ${TESTTOOLVMOPTS} \ 259# -bootclasspath "$BCP${PS}BadJar/Lib.jar" \ 260# -J-Djava.ext.dir="GooJar" \ 261# Main.java 262# Success "$javac" ${TESTTOOLVMOPTS} \ 263# -bootclasspath "$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ 264# -J-Djava.ext.dir="BadJar" \ 265# Main.java 266# Failure "$java" ${TESTVMOPTS} \ 267# -Xbootclasspath:"$BCP${PS}BadJar/Lib.jar" \ 268# -Djava.ext.dirs="GooJar" \ 269# Main 270# Success "$java" ${TESTVMOPTS} \ 271# -Xbootclasspath:"$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ 272# -Djava.ext.dirs="BadJar" \ 273# Main 274 275#---------------------------------------------------------------- 276Failure "$javac" ${TESTTOOLVMOPTS} \ 277 -extdirs "GooClass${PS}BadZip" \ 278 -cp "GooZip/Lib.zip" \ 279 Main.java 280Success "$javac" ${TESTTOOLVMOPTS} \ 281 -extdirs "BadClass${PS}GooZip${PS}BadJar" \ 282 -cp "BadZip/Lib.zip" \ 283 Main.java 284Success "$javac" ${TESTTOOLVMOPTS} \ 285 -Djava.ext.dirs="GooZip${PS}BadJar" \ 286 -classpath "BadZip/Lib.zip" \ 287 Main.java 288# Success "$javac" ${TESTTOOLVMOPTS} \ 289# -J-Djava.ext.dirs="GooZip${PS}BadJar" \ 290# -classpath "BadZip/Lib.zip" \ 291# Main.java 292# Failure "$java" ${TESTVMOPTS} \ 293# -Djava.ext.dirs="GooClass${PS}BadZip" \ 294# -cp "GooZip/Lib.zip${PS}." \ 295# Main 296# Success "$java" ${TESTVMOPTS} \ 297# -Djava.ext.dirs="GooZip${PS}BadJar" \ 298# -cp "BadZip/Lib.zip${PS}." \ 299# Main 300 301#---------------------------------------------------------------- 302Failure "$javac" ${TESTTOOLVMOPTS} -classpath "BadClass${PS}GooClass" Main.java 303Success "$javac" ${TESTTOOLVMOPTS} -classpath "GooClass${PS}BadClass" Main.java 304Failure "$java" ${TESTVMOPTS} -classpath "BadClass${PS}GooClass${PS}." Main 305Success "$java" ${TESTVMOPTS} -classpath "GooClass${PS}BadClass${PS}." Main 306 307Failure "$javac" ${TESTTOOLVMOPTS} -cp "BadJar/Lib.jar${PS}GooZip/Lib.zip" Main.java 308Success "$javac" ${TESTTOOLVMOPTS} -cp "GooJar/Lib.jar${PS}BadZip/Lib.zip" Main.java 309Failure "$java" ${TESTVMOPTS} -cp "BadJar/Lib.jar${PS}${PS}GooZip/Lib.zip" Main 310Success "$java" ${TESTVMOPTS} -cp "GooJar/Lib.jar${PS}${PS}BadZip/Lib.zip" Main 311 312Failure env CLASSPATH="BadZip/Lib.zip${PS}GooJar/Lib.jar" "$javac" ${TESTTOOLVMOPTS} Main.java 313Success env CLASSPATH="GooZip/Lib.zip${PS}BadJar/Lib.jar" "$javac" ${TESTTOOLVMOPTS} Main.java 314Failure env CLASSPATH="${PS}BadZip/Lib.zip${PS}GooJar/Lib.jar" "$java" ${TESTVMOPTS} Main 315Success env CLASSPATH="${PS}GooZip/Lib.zip${PS}BadJar/Lib.jar" "$java" ${TESTVMOPTS} Main 316 317#---------------------------------------------------------------- 318# Check behavior of empty paths and empty path elements 319#---------------------------------------------------------------- 320In() { cd "$1"; shift; "$@"; cd ..; } 321 322In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -cp ".." ../Main.java 323In GooClass Failure "$java" ${TESTVMOPTS} -cp ".." Main 324 325# Unspecified classpath defaults to "." 326Sys mkdir OneDir; Sys cp -p Main.java GooClass/Lib.class OneDir/. 327In OneDir Success "$javac" ${TESTTOOLVMOPTS} Main.java 328In OneDir Success "$java" ${TESTVMOPTS} Main 329 330# Empty classpath elements mean "." 331In GooClass Success "$javac" ${TESTTOOLVMOPTS} -cp "${PS}.." ../Main.java 332In GooClass Success "$java" ${TESTVMOPTS} -cp "${PS}.." Main 333 334In GooClass Success "$javac" ${TESTTOOLVMOPTS} -cp "..${PS}" ../Main.java 335In GooClass Success "$java" ${TESTVMOPTS} -cp "..${PS}" Main 336 337In GooClass Success "$javac" ${TESTTOOLVMOPTS} -cp "..${PS}${PS}/xyzzy" ../Main.java 338In GooClass Success "$java" ${TESTVMOPTS} -cp "..${PS}${PS}/xyzzy" Main 339 340# All other empty path elements are ignored. 341In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -extdirs "" -cp ".." ../Main.java 342# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="" -cp ".." Main 343 344In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -extdirs "${PS}" -cp ".." ../Main.java 345In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="${PS}" -cp ".." ../Main.java 346# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="${PS}" -cp ".." Main 347 348In GooJar Success "$javac" ${TESTTOOLVMOPTS} -extdirs "." -cp ".." ../Main.java 349In GooJar Success "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="." -cp ".." ../Main.java 350# In GooJar Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="." -cp ".." Main 351 352# In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="" -cp ".." ../Main.java 353In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="" -cp ".." ../Main.java 354# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="" -cp ".." Main 355 356# In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="${PS}" -cp ".." ../Main.java 357In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -endorseddirs "${PS}" -cp ".." ../Main.java 358# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="${PS}" -cp ".." Main 359 360# In GooJar Success "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="." -cp ".." ../Main.java 361In GooJar Success "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="." -cp ".." ../Main.java 362# In GooJar Success "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="." -cp ".." Main 363 364In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/p: -cp ".." ../Main.java 365In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath/p: -cp ".." Main 366 367In GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/p:. -cp ".." ../Main.java 368In GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath/p:. -cp ".." Main 369 370# In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP" -cp ".." ../Main.java 371# In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP" -cp ".." Main 372 373# In GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." ../Main.java 374# In GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." Main 375 376In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/a: -cp ".." ../Main.java 377In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath/a: -cp ".." Main 378 379In GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/a:. -cp ".." ../Main.java 380In GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath/a:. -cp ".." Main 381 382Cleanup 383 384Bottom Line 385