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:
  37 status=1
  38 
  39 #Call this from anywhere to fail the test with an error message
  40 # usage: fail "reason why the test failed"
  41 fail() 
  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"
  50 pass() 
  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 
  60 TARGETCLASS="HelloWorld"
  61 if [ -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
  80 fi
  81 #
  82 echo "JDK under test is: $TESTJAVA"
  83 
  84 # Get flags being sent to debuggee
  85 DEBUGGEEFLAGS=
  86 if [ -r $TESTCLASSES/@debuggeeVMOptions ] ; then
  87    DEBUGGEEFLAGS=`cat $TESTCLASSES/@debuggeeVMOptions`
  88 elif [ -r $TESTCLASSES/../@debuggeeVMOptions ] ; then
  89    DEBUGGEEFLAGS=`cat $TESTCLASSES/../@debuggeeVMOptions`
  90 fi
  91 
  92 # Figure out what the libarch path is
  93 os=`uname -s`
  94 
  95 jreloc=${TESTJAVA}/jre
  96 if [ ! -d ${jreloc} ] ; then
  97     jreloc=${TESTJAVA}
  98 fi
  99 
 100 libdir=${TESTCLASSES}
 101 
 102 is_windows=false
 103 is_cygwin=false
 104 case `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     ;;
 152 esac
 153 
 154 # Create private transport library
 155 echo "Setup private transport library by copying an existing one and renaming"
 156 private_transport=private_dt_socket
 157 if [ -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}
 166 elif [ -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}
 179 elif [ -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}
 192 else 
 193     echo "cannot find dt_socket in ${libloc} for ${private_transport}"
 194     fail "cannot find dt_socket in ${libloc} for ${private_transport}"
 195 fi
 196 
 197 #
 198 CP="-classpath \"${TESTCLASSES}\""
 199 #
 200 if [ "$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"
 209 else
 210     DEBUGGEEFLAGS="$DEBUGGEEFLAGS -agentlib:jdwp=transport=${private_transport},server=y,suspend=n"
 211 fi
 212                
 213 echo ${TESTJAVA}/bin/java ${DEBUGGEEFLAGS} ${CP} ${TARGETCLASS}
 214 eval ${TESTJAVA}/bin/java ${DEBUGGEEFLAGS} ${CP} ${TARGETCLASS}
 215 status=$?
 216 echo "test status for ${DEBUGGERFLAGS} was: $status"
 217 if [ $status -ne 0 ] ; then 
 218     fail "unspecified test failure"
 219     exit 1
 220 fi
 221 
 222 pass "found private transport library"
 223 exit 0
 224