basic.sh revision 16909:085c764a3e5b
1# 2# Copyright (c) 2005, 2013, 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 24# @test 25# @bug 4640520 6354623 7198496 26# @summary Unit test for java.util.ServiceLoader 27# 28# @build Basic Load FooService FooProvider1 FooProvider2 FooProvider3 BarProvider 29# @run shell basic.sh 30 31# Command-line usage: sh basic.sh /path/to/build 32 33if [ -z "$TESTJAVA" ]; then 34 if [ $# -lt 1 ]; then exit 1; fi 35 TESTJAVA="$1"; shift 36 COMPILEJAVA="${TESTJAVA}" 37 TESTSRC="`pwd`" 38 TESTCLASSES="`pwd`" 39fi 40 41JAVA="$TESTJAVA/bin/java" 42JAR="$COMPILEJAVA/bin/jar" 43 44OS=`uname -s` 45case "$OS" in 46 SunOS | Darwin | AIX ) 47 FS='/' 48 SEP=':' ;; 49 Linux ) 50 FS='/' 51 SEP=':' ;; 52 * ) 53 FS='\\' 54 SEP='\;' ;; 55esac 56 57JARD=x.jar 58EXTD=x.ext 59TESTD=x.test 60P3JAR=${EXTD}${FS}p3.jar 61 62if [ \! -d $EXTD ]; then 63 # Initialize 64 echo Initializing... 65 rm -rf $JARD $EXTD $TESTD 66 mkdir -p $JARD $EXTD $TESTD 67 68 for n in 2 3; do 69 rm -rf $JARD/*; mkdir -p $JARD/META-INF/services 70 echo FooProvider$n \ 71 >$JARD/META-INF/services/FooService 72 cp $TESTCLASSES/FooProvider$n.class $JARD 73 if [ $n = 3 ]; then 74 cp $TESTCLASSES/FooService.class $JARD 75 fi 76 (cd $JARD; "$JAR" ${TESTTOOLVMOPTS} -cf ../p$n.jar *) 77 done 78 79 cp p2.jar p2dup.jar 80 mv p3.jar $EXTD 81 82 cp $TESTCLASSES/Load.class $TESTD 83 cp $TESTCLASSES/FooService.class $TESTD 84 cp $TESTCLASSES/FooProvider1.class $TESTD 85 mkdir -p $TESTD/META-INF/services 86 echo FooProvider1 \ 87 >$TESTD/META-INF/services/FooService 88 89 # This gives us: 90 # $TESTD: FooProvider1 91 # . : FooProvider2, in p2.jar 92 # $EXTD: FooProvider3, in p3.jar 93 94fi 95 96failures=0 97 98go() { 99 echo '' 100 cp="$1"; shift 101 if [ -z "$cp" ]; then cp="$TESTCLASSES"; else cp="$TESTCLASSES$SEP$cp"; fi 102 vmargs="$1"; shift 103 sh -xc "'$JAVA' ${TESTVMOPTS} -cp $cp $vmargs $T $*" 2>&1 104 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi 105} 106 107 108# Java-level tests 109 110T=Basic 111go ".${SEP}$TESTD${SEP}p2.jar" "" 112 113# Success cases 114 115T=Load 116 117go "$TESTD" "" FooProvider1 118 119go ".${SEP}p2.jar" "" FooProvider2 120 121go ".${SEP}p2.jar${SEP}p2dup.jar" "" FooProvider2 122 123go "${P3JAR}${SEP}p2.jar" "" FooProvider3 FooProvider2 124 125go "$TESTD${SEP}p2.jar" "" FooProvider1 FooProvider2 126 127go "${P3JAR}${SEP}$TESTD" "" FooProvider3 FooProvider1 128 129go "${P3JAR}${SEP}$TESTD${SEP}p2.jar" "" \ 130 FooProvider3 FooProvider1 FooProvider2 131 132# Failure cases 133 134mkdir -p x.meta/META-INF/services 135 136# Simple failures 137for p in FooProvider42 'blah blah' 9234 'X!' BarProvider; do 138 echo $p >x.meta/META-INF/services/FooService 139 go ".${SEP}x.meta" "" fail 140done 141 142# Failures followed by successes 143echo FooProvider42 >x.meta/META-INF/services/FooService 144go "$TESTD${SEP}x.meta" "" FooProvider1 fail 145go "x.meta${SEP}$TESTD" "" fail FooProvider1 146go "$TESTD${SEP}x.meta${SEP}${SEP}p2.jar" "" \ 147 FooProvider1 fail FooProvider2 148 149 150# Summary 151 152echo '' 153if [ $failures -gt 0 ]; 154 then echo "$failures case(s) failed"; 155 else echo "All cases passed"; fi 156exit $failures 157