0N/A#
3261N/A# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
0N/A# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A#
0N/A# This code is free software; you can redistribute it and/or modify it
0N/A# under the terms of the GNU General Public License version 2 only, as
0N/A# published by the Free Software Foundation.
0N/A#
0N/A# This code is distributed in the hope that it will be useful, but WITHOUT
0N/A# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A# version 2 for more details (a copy is included in the LICENSE file that
0N/A# accompanied this code).
0N/A#
0N/A# You should have received a copy of the GNU General Public License version
0N/A# 2 along with this work; if not, write to the Free Software Foundation,
0N/A# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A#
2362N/A# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A# or visit www.oracle.com if you need additional information or have any
2362N/A# questions.
0N/A#
0N/A
0N/A# @test
0N/A# @bug 4640520 6354623
0N/A# @summary Unit test for java.util.ServiceLoader
0N/A#
0N/A# @build Basic Load FooService FooProvider1 FooProvider2 FooProvider3
0N/A# @run shell basic.sh
0N/A
0N/A# Command-line usage: sh basic.sh /path/to/build
0N/A
0N/Aif [ -z "$TESTJAVA" ]; then
0N/A if [ $# -lt 1 ]; then exit 1; fi
0N/A TESTJAVA="$1"; shift
0N/A TESTSRC="`pwd`"
0N/A TESTCLASSES="`pwd`"
0N/Afi
0N/A
0N/AJAVA="$TESTJAVA/bin/java"
0N/AJAR="$TESTJAVA/bin/jar"
0N/A
0N/AOS=`uname -s`
0N/Acase "$OS" in
4638N/A SunOS | Darwin )
0N/A SEP=':' ;;
0N/A Linux )
0N/A SEP=':' ;;
0N/A * )
0N/A SEP='\;' ;;
0N/Aesac
0N/A
2077N/AJARD=x.jar
2077N/AEXTD=x.ext
2077N/ATESTD=x.test
0N/A
0N/Aif [ \! -d $EXTD ]; then
0N/A # Initialize
0N/A echo Initializing...
0N/A rm -rf $JARD $EXTD $TESTD
0N/A mkdir -p $JARD $EXTD $TESTD
0N/A
0N/A for n in 2 3; do
0N/A rm -rf $JARD/*; mkdir -p $JARD/META-INF/services
0N/A echo FooProvider$n \
4638N/A >$JARD/META-INF/services/FooService
0N/A cp $TESTCLASSES/FooProvider$n.class $JARD
0N/A if [ $n = 3 ]; then
0N/A cp $TESTCLASSES/FooService.class $JARD
0N/A fi
0N/A (cd $JARD; "$JAR" -cf ../p$n.jar *)
0N/A done
0N/A
0N/A mv p3.jar $EXTD
0N/A
0N/A cp $TESTCLASSES/Load.class $TESTD
0N/A cp $TESTCLASSES/FooService.class $TESTD
0N/A cp $TESTCLASSES/FooProvider1.class $TESTD
0N/A mkdir -p $TESTD/META-INF/services
0N/A echo FooProvider1 \
0N/A >$TESTD/META-INF/services/FooService
0N/A
0N/A # This gives us:
0N/A # $TESTD: FooProvider1
0N/A # . : FooProvider2, in p2.jar
0N/A # $EXTD: FooProvider3, in p3.jar
0N/A
0N/Afi
0N/A
0N/Afailures=0
0N/A
0N/Ago() {
0N/A echo ''
0N/A cp="$1"; shift
0N/A if [ -z "$cp" ]; then cp="$TESTCLASSES"; else cp="$TESTCLASSES$SEP$cp"; fi
0N/A vmargs="$1"; shift
0N/A sh -xc "'$JAVA' -cp $cp $vmargs $T $*" 2>&1
0N/A if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
0N/A}
0N/A
0N/A
0N/A# Java-level tests
0N/A
0N/AT=Basic
0N/Ago ".${SEP}$TESTD${SEP}p2.jar" "-Djava.ext.dirs=$EXTD"
0N/A
0N/A
0N/A# Success cases
0N/A
0N/AT=Load
0N/A
0N/Ago "$TESTD" "" FooProvider1
0N/A
0N/Ago ".${SEP}p2.jar" "" FooProvider2
0N/A
0N/Ago "" "-Djava.ext.dirs=$EXTD" FooProvider3
0N/A
0N/Ago "$TESTD${SEP}p2.jar" "" FooProvider1 FooProvider2
0N/A
0N/Ago "$TESTD" "-Djava.ext.dirs=$EXTD" FooProvider3 FooProvider1
0N/A
0N/Ago "$TESTD${SEP}p2.jar" "-Djava.ext.dirs=$EXTD" \
0N/A FooProvider3 FooProvider1 FooProvider2
0N/A
0N/A# Should only find the installed provider
0N/Ago "$TESTD${SEP}p2.jar" "-Djava.ext.dirs=$EXTD" -i FooProvider3
0N/A
0N/A
0N/A# Failure cases
0N/A
0N/Amkdir -p x.meta/META-INF/services
0N/A
0N/A# Simple failures
0N/Afor p in FooProvider42 'blah blah' 9234 'X!' java.lang.Object; do
0N/A echo $p >x.meta/META-INF/services/FooService
0N/A go ".${SEP}x.meta" "" fail
0N/Adone
0N/A
0N/A# Failures followed by successes
0N/Aecho FooProvider42 >x.meta/META-INF/services/FooService
0N/Ago "$TESTD${SEP}x.meta" "" FooProvider1 fail
0N/Ago "x.meta${SEP}$TESTD" "" fail FooProvider1
0N/Ago "$TESTD${SEP}x.meta${SEP}${SEP}p2.jar" "-Djava.ext.dirs=$EXTD" \
0N/A FooProvider3 FooProvider1 fail FooProvider2
0N/A
0N/A
0N/A# Summary
0N/A
0N/Aecho ''
0N/Aif [ $failures -gt 0 ];
0N/A then echo "$failures case(s) failed";
0N/A else echo "All cases passed"; fi
0N/Aexit $failures