Diagnostics.sh revision 3294:9adfb22ff08f
1#!/bin/sh 2 3# 4# Copyright (c) 2003, 2016, 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 4884487 6295519 6236704 6429613 29# @summary Test for proper diagnostics during path manipulation operations 30# @author Martin Buchholz 31# 32# @run shell/timeout=180 Diagnostics.sh 33 34# To run this test manually, simply do ./Diagnostics.sh 35 36. ${TESTSRC-.}/Util.sh 37 38set -u 39 40# BCP=`DefaultBootClassPath` 41 42DiagnosticsInEnglishPlease 43 44No() { NO="no"; "$@"; NO=""; } # No means NO! 45 46Warning() { 47 HorizontalRule 48 echo "$@" 49 output=`"$@" 2>&1`; rc="$?" 50 output2=`echo "$output" | grep -v "bootstrap class path not set in conjunction with -source"` 51 test -n "$output2" && echo "$output" 52 test $rc -eq 0 || Fail "Command \"$*\" failed with exitValue $rc"; 53 case "$output2" in *warning:*) gotwarning="yes";; *) gotwarning="no";; esac 54 55 if test "$gotwarning" = "yes" -a "$NO" = "no"; then 56 Fail "Command \"$*\" printed an unexpected warning" 57 elif test "$gotwarning" = "no" -a "$NO" != "no"; then 58 Fail "Command \"$*\" did not generate the expected warning" 59 fi 60} 61 62Error() { 63 HorizontalRule 64 echo "$@" 65 output=`"$@" 2>&1`; rc="$?" 66 test -n "$output" && echo "$output" 67 case "$output" in *error:*) goterror="yes";; *) goterror="no";; esac 68 69 if test "$NO" = "no"; then 70 test "$rc" -ne 0 && \ 71 Fail "Command \"$*\" failed with return code $rc" 72 test "$goterror" = "yes" && \ 73 Fail "Command \"$*\" did not generate any error message" 74 else 75 test "$rc" -eq 0 && \ 76 Fail "Command \"$*\" was supposed to Die with fatal error"; 77 test "$goterror" = "no" && \ 78 Fail "Command \"$*\" printed an unexpected error message" 79 fi 80} 81 82Cleanup() { 83 Sys rm -rf Main.java Main.class 84 Sys rm -rf classes classes.foo classes.jar classes.war classes.zip 85 Sys rm -rf MANIFEST.MF classesRef.jar classesRefRef.jar jars 86} 87 88Cleanup 89echo "public class Main{public static void main(String[]a){}}" > Main.java 90 91# We need to set -source 8 -target 8 for those cases where the option is 92# not legal in 9 and later. However, that triggers an additional warning 93# about not setting bootclasspath, which is filtered out in Warning. 94# The alternative would be to extract a minimal rt.jar from JDK and 95# specify that with -bootclasspath. 96SRCTRG8="-source 8 -target 8" 97 98#---------------------------------------------------------------- 99# No warnings unless -Xlint:path is used 100#---------------------------------------------------------------- 101No Warning "$javac" ${TESTTOOLVMOPTS} Main.java 102No Warning "$javac" ${TESTTOOLVMOPTS} -cp ".${PS}classes" Main.java 103 104#---------------------------------------------------------------- 105# Warn for missing elts in user-specified paths 106#---------------------------------------------------------------- 107Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes" Main.java 108Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-Xbootclasspath/p:classes" Main.java 109Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint "-Xbootclasspath/a:classes" Main.java 110 111Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-endorseddirs" "classes" Main.java 112Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint "-extdirs" "classes" Main.java 113#Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-Xbootclasspath:classes${PS}${BCP}" Main.java 114 115#---------------------------------------------------------------- 116# No warning for missing elts in "system" paths 117#---------------------------------------------------------------- 118# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Djava.endorsed.dirs=classes" Main.java 119# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Djava.ext.dirs=classes" Main.java 120# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Xbootclasspath/p:classes" Main.java 121# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Xbootclasspath/a:classes" Main.java 122# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Xbootclasspath:classes${PS}${BCP}" Main.java 123 124#---------------------------------------------------------------- 125# No warning if class path element exists 126#---------------------------------------------------------------- 127Sys mkdir classes 128No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes" Main.java 129No Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-endorseddirs" "classes" Main.java 130No Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-extdirs" "classes" Main.java 131No Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-Xbootclasspath/p:classes" Main.java 132No Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-Xbootclasspath/a:classes" Main.java 133#No Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint:path "-Xbootclasspath:classes${PS}${BCP}" Main.java 134 135Sys "$jar" cf classes.jar Main.class 136Sys cp classes.jar classes.war 137Sys cp classes.war classes.zip 138No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes.jar" Main.java 139 Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes.war" Main.java 140No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes.zip" Main.java 141 142#---------------------------------------------------------------- 143# Warn if -Xlint is used and if class path element refers to 144# regular file which doesn't look like a zip file, but is 145#---------------------------------------------------------------- 146Sys cp classes.war classes.foo 147 Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes.foo" Main.java 148 149 150#---------------------------------------------------------------- 151# No error if class path element refers to regular file which is 152# not a zip file 153#---------------------------------------------------------------- 154No Error "$javac" ${TESTTOOLVMOPTS} -cp Main.java Main.java # Main.java is NOT a jar file 155No Error "$javac" ${TESTTOOLVMOPTS} Main.java 156 157#---------------------------------------------------------------- 158# Warn if -Xlint is used and if class path element refers to 159# regular file which is not a zip file 160#---------------------------------------------------------------- 161Warning "$javac" ${TESTTOOLVMOPTS} -Xlint -cp Main.java Main.java # Main.java is NOT a jar file 162 163#---------------------------------------------------------------- 164# Test jar file class path reference recursion 165#---------------------------------------------------------------- 166MkManifestWithClassPath classesRef.jar 167Sys "$jar" cmf MANIFEST.MF classesRefRef.jar Main.class 168 169#---------------------------------------------------------------- 170# Non-existent recursive Class-Path reference gives warning 171#---------------------------------------------------------------- 172No Warning "$javac" ${TESTTOOLVMOPTS} -classpath classesRefRef.jar Main.java 173 Warning "$javac" ${TESTTOOLVMOPTS} -Xlint -classpath classesRefRef.jar Main.java 174No Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint -Xbootclasspath/p:classesRefRef.jar Main.java 175 176BadJarFile classesRef.jar 177 178#---------------------------------------------------------------- 179# Non-jar file recursive Class-Path reference gives error 180#---------------------------------------------------------------- 181 Error "$javac" ${TESTTOOLVMOPTS} -classpath classesRefRef.jar Main.java 182No Error "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xbootclasspath/a:classesRefRef.jar Main.java 183 184MkManifestWithClassPath classes 185Sys "$jar" cmf MANIFEST.MF classesRef.jar Main.class 186 187#---------------------------------------------------------------- 188# Jar file recursive Class-Path reference is OK 189#---------------------------------------------------------------- 190No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint -classpath classesRefRef.jar Main.java 191No Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint -Xbootclasspath/p:classesRefRef.jar Main.java 192 193#---------------------------------------------------------------- 194# Class-Path attribute followed in extdirs or endorseddirs 195#---------------------------------------------------------------- 196Sys mkdir jars 197Sys cp classesRefRef.jar jars/. 198 Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint -extdirs jars Main.java 199 Warning "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint -endorseddirs jars Main.java 200 201#---------------------------------------------------------------- 202# Bad Jar file in extdirs and endorseddirs should not be ignored 203#---------------------------------------------------------------- 204BadJarFile jars/classesRef.jar 205 Error "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint -extdirs jars Main.java 206 Error "$javac" ${TESTTOOLVMOPTS} ${SRCTRG8} -Xlint -endorseddirs jars Main.java 207 208Cleanup 209 210Bottom Line 211