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