1 #!/bin/ksh -p
   2 
   3 #
   4 # Copyright (c) 2005, 2013, 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=$TESTVMOPTS $TESTJAVAOPTS
  86 
  87 # Figure out what the libarch path is
  88 os=`uname -s`
  89 
  90 jreloc=${TESTJAVA}/jre
  91 if [ ! -d ${jreloc} ] ; then
  92     jreloc=${TESTJAVA}
  93 fi
  94 
  95 libdir=${TESTCLASSES}
  96 
  97 is_windows=false
  98 is_cygwin=false
  99 case `uname -s` in
 100   SunOS|Linux|AIX)
 101     xx=`find ${jreloc}/lib -name libdt_socket.so`
 102     libloc=`dirname ${xx}`
 103     ;;
 104   Darwin)
 105     libloc=${jreloc}/lib
 106     ;;
 107   Windows*)
 108     is_windows=true
 109     libloc=${jreloc}/bin
 110     sep=';'
 111     ;;
 112   CYGWIN*)
 113     is_windows=true
 114     is_cygwin=true
 115     libloc=${jreloc}/bin
 116     sep=':'
 117 
 118     # This is going onto PATH and cygwin needs the form
 119     # /cygdrive/j/x..... for that.
 120     libdir=`cygpath -u "$TESTCLASSES"`
 121     ;;
 122   *)
 123     echo "FAILURE:  Unknown uname -s: " `uname -s`
 124     exit 1
 125     ;;
 126 esac
 127 
 128 # Create private transport library
 129 echo "Setup private transport library by copying an existing one and renaming"
 130 private_transport=private_dt_socket
 131 if [ -f ${libloc}/dt_socket.dll ] ; then
 132     fullpath=${libdir}/${private_transport}.dll
 133     rm -f ${fullpath}
 134     echo cp ${libloc}/dt_socket.dll ${fullpath}
 135     cp ${libloc}/dt_socket.dll ${fullpath}
 136     # make sure we can find libraries in current directory
 137     PATH="${PATH}${sep}${libdir}"
 138     export PATH
 139     echo PATH=${PATH}
 140 elif [ -f ${libloc}/libdt_socket.dylib ]; then
 141     fullpath=${libdir}/lib${private_transport}.dylib
 142     rm -f ${fullpath}
 143     echo cp ${libloc}/libdt_socket.dylib ${fullpath}
 144     cp ${libloc}/libdt_socket.dylib ${fullpath}
 145     # make sure we can find libraries in current directory
 146     if [ "${LD_LIBRARY_PATH}" = "" ] ; then
 147         LD_LIBRARY_PATH=${libdir}
 148     else
 149         LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir}
 150     fi
 151     export LD_LIBRARY_PATH
 152     echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
 153 elif [ -f ${libloc}/libdt_socket.so ] ; then
 154     fullpath=${libdir}/lib${private_transport}.so
 155     rm -f ${fullpath}
 156     echo cp ${libloc}/libdt_socket.so ${fullpath}
 157     cp ${libloc}/libdt_socket.so ${fullpath}
 158     # make sure we can find libraries in current directory
 159     if [ "$os" = "AIX" ] ; then
 160         if [ "${LIBPATH}" = "" ] ; then
 161             LIBPATH=${libdir}
 162         else
 163             LIBPATH=${LIBPATH}:${libdir}
 164         fi
 165         export LIBPATH
 166         echo LIBPATH=${LIBPATH}
 167     else
 168         if [ "${LD_LIBRARY_PATH}" = "" ] ; then
 169             LD_LIBRARY_PATH=${libdir}
 170         else
 171             LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${libdir}
 172         fi
 173         export LD_LIBRARY_PATH
 174         echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
 175     fi
 176 else
 177     echo "cannot find dt_socket in ${libloc} for ${private_transport}"
 178     fail "cannot find dt_socket in ${libloc} for ${private_transport}"
 179 fi
 180 
 181 #
 182 CP="-classpath \"${TESTCLASSES}\""
 183 #
 184 if [ "$is_windows" = "true" ]; then
 185     if [ "$is_cygwin" = "true" ]; then
 186         win_fullpath=`cygpath -m "$fullpath" \
 187             | sed -e 's#/#\\\\\\\\#g' -e 's/\.dll//'`
 188     else
 189         win_fullpath=`echo "$fullpath" \
 190             | sed -e 's#/#\\\\\\\\#g' -e 's/\.dll//'`
 191     fi
 192     DEBUGGEEFLAGS="$DEBUGGEEFLAGS -agentlib:jdwp=transport=${win_fullpath},server=y,suspend=n"
 193 else
 194     DEBUGGEEFLAGS="$DEBUGGEEFLAGS -agentlib:jdwp=transport=${private_transport},server=y,suspend=n"
 195 fi
 196 
 197 echo ${TESTJAVA}/bin/java ${DEBUGGEEFLAGS} ${CP} ${TARGETCLASS}
 198 eval ${TESTJAVA}/bin/java ${DEBUGGEEFLAGS} ${CP} ${TARGETCLASS}
 199 status=$?
 200 echo "test status for ${DEBUGGERFLAGS} was: $status"
 201 if [ $status -ne 0 ] ; then
 202     fail "unspecified test failure"
 203     exit 1
 204 fi
 205 
 206 pass "found private transport library"
 207 exit 0
 208