PrivateTransportTest.sh revision 6073:cea72c2bf071
1#!/bin/ksh -p
2
3#
4# Copyright (c) 2005, 2012, 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       PrivateTransportTest.sh
28#   @bug        6225664 6220618
29#   @summary    Test for when private transport library outside jdk
30#   @author     Kelly O'Hair
31#
32#   @run compile -g HelloWorld.java
33#   @run shell PrivateTransportTest.sh
34#
35
36# Beginning of subroutines:
37status=1
38
39#Call this from anywhere to fail the test with an error message
40# usage: fail "reason why the test failed"
41fail() 
42 { echo "The test failed :-("
43   echo "$*" 1>&2
44   echo "exit status was $status"
45   exit $status
46 } #end of fail()
47
48#Call this from anywhere to pass the test with a message
49# usage: pass "reason why the test passed if applicable"
50pass() 
51 { echo "The test passed!!!"
52   echo "$*" 1>&2
53   exit 0
54 } #end of pass()
55
56# end of subroutines
57
58# The beginning of the script proper
59
60TARGETCLASS="HelloWorld"
61if [ -z "${TESTJAVA}" ] ; then
62   # TESTJAVA is not set, so the test is running stand-alone.
63   # TESTJAVA holds the path to the root directory of the build of the JDK
64   # to be tested.  That is, any java files run explicitly in this shell
65   # should use TESTJAVA in the path to the java interpreter.
66   # So, we'll set this to the JDK spec'd on the command line.  If none
67   # is given on the command line, tell the user that and use a default.
68   # THIS IS THE JDK BEING TESTED.
69   if [ -n "$1" ] ; then
70          TESTJAVA=$1
71      else
72	  TESTJAVA=$JAVA_HOME
73   fi
74   TESTSRC=.
75   TESTCLASSES=.
76   #Deal with .class files:
77   ${TESTJAVA}/bin/javac -d ${TESTCLASSES} \
78            -classpath "${TESTCLASSES}" -g \
79            ${TARGETCLASS}.java
80fi
81#
82echo "JDK under test is: $TESTJAVA"
83
84# Get flags being sent to debuggee
85DEBUGGEEFLAGS=
86if [ -r $TESTCLASSES/@debuggeeVMOptions ] ; then
87   DEBUGGEEFLAGS=`cat $TESTCLASSES/@debuggeeVMOptions`
88elif [ -r $TESTCLASSES/../@debuggeeVMOptions ] ; then
89   DEBUGGEEFLAGS=`cat $TESTCLASSES/../@debuggeeVMOptions`
90fi
91
92# Figure out what the libarch path is
93os=`uname -s`
94
95jreloc=${TESTJAVA}/jre
96if [ ! -d ${jreloc} ] ; then
97    jreloc=${TESTJAVA}
98fi
99
100libdir=${TESTCLASSES}
101
102is_windows=false
103is_cygwin=false
104case `uname -s` in 
105  SunOS)
106    libarch=`uname -p`
107    d64=`echo "${DEBUGGEEFLAGS}" | fgrep -- -d64`
108    case `uname -p` in
109      sparc)
110	if [ "${d64}" != "" ] ; then
111	    libarch=sparcv9
112	fi
113        ;;
114      i386)
115        if [ "${d64}" != "" ] ; then
116	    libarch=amd64
117	fi
118        ;;
119      *)
120        echo "FAILURE:  Unknown uname -p: " `uname -p`
121        exit 1
122        ;;
123    esac
124    libloc=${jreloc}/lib/${libarch}
125    ;;
126  Linux)
127    xx=`find ${jreloc}/lib -name libdt_socket.so`
128    libloc=`dirname ${xx}`
129    ;;
130  Darwin)
131    libloc=${jreloc}/lib
132    ;;
133  Windows*)
134    is_windows=true
135    libloc=${jreloc}/bin
136    sep=';'
137    ;;
138  CYGWIN*)
139    is_windows=true
140    is_cygwin=true
141    libloc=${jreloc}/bin
142    sep=':'
143
144    # This is going onto PATH and cygwin needs the form
145    # /cygdrive/j/x..... for that.
146    libdir=`cygpath -u "$TESTCLASSES"`
147    ;;
148  *)
149    echo "FAILURE:  Unknown uname -s: " `uname -s`
150    exit 1
151    ;;
152esac
153
154# Create private transport library
155echo "Setup private transport library by copying an existing one and renaming"
156private_transport=private_dt_socket
157if [ -f ${libloc}/dt_socket.dll ] ; then
158    fullpath=${libdir}/${private_transport}.dll
159    rm -f ${fullpath}
160    echo cp ${libloc}/dt_socket.dll ${fullpath}
161    cp ${libloc}/dt_socket.dll ${fullpath}
162    # make sure we can find libraries in current directory
163    PATH="${PATH}${sep}${libdir}"
164    export PATH
165    echo PATH=${PATH}
166elif [ -f ${libloc}/libdt_socket.dylib ]; then
167    fullpath=${libdir}/lib${private_transport}.dylib
168    rm -f ${fullpath}
169    echo cp ${libloc}/libdt_socket.dylib ${fullpath}
170    cp ${libloc}/libdt_socket.dylib ${fullpath}
171    # make sure we can find libraries in current directory
172    if [ "${LD_LIBRARY_PATH}" = "" ] ; then
173        LD_LIBRARY_PATH=${libdir}
174    else
175        LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir}
176    fi
177    export LD_LIBRARY_PATH
178    echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
179elif [ -f ${libloc}/libdt_socket.so ] ; then
180    fullpath=${libdir}/lib${private_transport}.so
181    rm -f ${fullpath}
182    echo cp ${libloc}/libdt_socket.so ${fullpath}
183    cp ${libloc}/libdt_socket.so ${fullpath}
184    # make sure we can find libraries in current directory
185    if [ "${LD_LIBRARY_PATH}" = "" ] ; then
186        LD_LIBRARY_PATH=${libdir}
187    else
188        LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir}
189    fi
190    export LD_LIBRARY_PATH
191    echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
192else 
193    echo "cannot find dt_socket in ${libloc} for ${private_transport}"
194    fail "cannot find dt_socket in ${libloc} for ${private_transport}"
195fi
196
197#
198CP="-classpath \"${TESTCLASSES}\""
199#
200if [ "$is_windows" = "true" ]; then
201    if [ "$is_cygwin" = "true" ]; then
202        win_fullpath=`cygpath -m "$fullpath" \
203            | sed -e 's#/#\\\\\\\\#g' -e 's/\.dll//'`
204    else
205        win_fullpath=`echo "$fullpath" \
206            | sed -e 's#/#\\\\\\\\#g' -e 's/\.dll//'`
207    fi
208    DEBUGGEEFLAGS="$DEBUGGEEFLAGS -agentlib:jdwp=transport=${win_fullpath},server=y,suspend=n"
209else
210    DEBUGGEEFLAGS="$DEBUGGEEFLAGS -agentlib:jdwp=transport=${private_transport},server=y,suspend=n"
211fi
212               
213echo ${TESTJAVA}/bin/java ${DEBUGGEEFLAGS} ${CP} ${TARGETCLASS}
214eval ${TESTJAVA}/bin/java ${DEBUGGEEFLAGS} ${CP} ${TARGETCLASS}
215status=$?
216echo "test status for ${DEBUGGERFLAGS} was: $status"
217if [ $status -ne 0 ] ; then 
218    fail "unspecified test failure"
219    exit 1
220fi
221
222pass "found private transport library"
223exit 0
224
225