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