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