jdk/test/tools/launcher/SolarisRunpath.sh
changeset 4840 74d64c277d62
parent 4839 6b3edc448285
parent 4396 d78c0cb4baf7
child 4841 ae658e3b0f27
equal deleted inserted replaced
4839:6b3edc448285 4840:74d64c277d62
     1 # Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
       
     2 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     3 #
       
     4 # This code is free software; you can redistribute it and/or modify it
       
     5 # under the terms of the GNU General Public License version 2 only, as
       
     6 # published by the Free Software Foundation.
       
     7 #
       
     8 # This code is distributed in the hope that it will be useful, but WITHOUT
       
     9 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    10 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    11 # version 2 for more details (a copy is included in the LICENSE file that
       
    12 # accompanied this code).
       
    13 #
       
    14 # You should have received a copy of the GNU General Public License version
       
    15 # 2 along with this work; if not, write to the Free Software Foundation,
       
    16 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    17 #
       
    18 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       
    19 # CA 95054 USA or visit www.sun.com if you need additional information or
       
    20 # have any questions.
       
    21 
       
    22 
       
    23 # @test
       
    24 # @bug 4731671
       
    25 # @build libraryCaller
       
    26 # @run shell SolarisRunpath.sh
       
    27 # @summary Verify that Solaris LD_LIBRARY_PATH rules are followed
       
    28 # @author Joseph D. Darcy
       
    29 
       
    30 # The launcher has been updated to properly take account of Solaris
       
    31 # LD_LIBRARY_PATH rules when constructing the runpath for the Java
       
    32 # executable.  That is, data model dependent LD_LIBRARY_PATH variables
       
    33 # are tested for and override LD_LIBRARY_PATH if present.  The current
       
    34 # launcher design relies on LD_LIBRARY_PATH settings to ensure the
       
    35 # proper jre/jdk libraries are opening during program execution.  In
       
    36 # the future, this dependence might be removed by having the vm
       
    37 # explicitly dlopen the needed files.  If that change occurs, this
       
    38 # test will be harmless but no long relevant.
       
    39 
       
    40 # A more robust test for Solaris SPARC would set the different
       
    41 # LD_LIBRARY_PATH variables while also varying the -d[32|64] options
       
    42 # to make sure the LD_LIBRARY_PATH of the *target* data model were
       
    43 # being respected.  That is "java -d64" should use the 64-bit
       
    44 # LD_LIBRARY_PATH while "java -d32" should use the 32-bit
       
    45 # LD_LIBRARY_PATH regardless of the data model of the "java" binary.
       
    46 # However, by default builds do not contain both 32 and 64 bit
       
    47 # components so such a test would often not be applicable.
       
    48 
       
    49 
       
    50 # If the test is not being run on a Solaris box, SPARC or x86, the
       
    51 # test succeeds immediately.
       
    52 
       
    53 OS=`uname -s`;
       
    54 
       
    55 case "$OS" in
       
    56 	SunOS )
       
    57 	PATHSEP=":"
       
    58 	;;
       
    59 
       
    60 	* )
       
    61 	echo "Not a Solaris environment; test vacuously succeeds."
       
    62 	exit 0;
       
    63 	;;
       
    64 esac
       
    65 
       
    66 # Verify directory context variables are set
       
    67 if [ "${TESTJAVA}" = "" ]
       
    68 then
       
    69   echo "TESTJAVA not set.  Test cannot execute.  Failed."
       
    70   exit 1
       
    71 fi
       
    72 
       
    73 if [ "${TESTSRC}" = "" ]
       
    74 then
       
    75   echo "TESTSRC not set.  Test cannot execute.  Failed."
       
    76   exit 1
       
    77 fi
       
    78 
       
    79 
       
    80 if [ "${TESTCLASSES}" = "" ]
       
    81 then
       
    82   echo "TESTCLASSES not set.  Test cannot execute.  Failed."
       
    83   exit 1
       
    84 fi
       
    85 
       
    86 # Construct paths to default Java executables
       
    87 JAVAC="$TESTJAVA/bin/javac"
       
    88 
       
    89 
       
    90 # Create our little Java test on the fly
       
    91 ( printf "public class GetDataModel {"
       
    92   printf "   public static void main(String argv[]) {"
       
    93   printf "      System.out.println(System.getProperty(\"sun.arch.data.model\", \"none\"));"
       
    94   printf "   }"
       
    95   printf "}"
       
    96 ) > GetDataModel.java
       
    97 
       
    98 $JAVAC GetDataModel.java
       
    99 
       
   100 
       
   101 # ARCH should be sparc or i386
       
   102 ARCH=`uname -p`
       
   103 case "$ARCH" in 
       
   104 	sparc | i386 )
       
   105 	;;
       
   106 
       
   107 	* )
       
   108 	echo "Unrecognized architecture; test fails."
       
   109 	exit 1
       
   110 esac
       
   111 
       
   112 # The following construction may not work as desired in a
       
   113 # 64-bit build.
       
   114 JAVA="$TESTJAVA/bin/java -classpath $TESTCLASSES${PATHSEP}."
       
   115 
       
   116 # Determine data model
       
   117 DM=`$JAVA GetDataModel`
       
   118 
       
   119 # verify DM is 32 or 64
       
   120 case "$DM" in 
       
   121 	32 )
       
   122 	ODM=64;
       
   123 	;;
       
   124 	
       
   125 	64 )
       
   126 	ODM=32;
       
   127 	;;
       
   128 
       
   129 	* )
       
   130 	echo "Unknown data model \"$DM\"; test fails."
       
   131 	exit 1
       
   132 esac
       
   133 
       
   134 # -------------------- Test 1 --------------------
       
   135 
       
   136 LD_LIBRARY_PATH=$TESTSRC/lib/$ARCH/lib$DM
       
   137 export LD_LIBRARY_PATH
       
   138 unset LD_LIBRARY_PATH_32
       
   139 unset LD_LIBRARY_PATH_64
       
   140 	
       
   141 # With plain LD_LIBRARY_PATH, result should always be 0
       
   142 RESULT=`$JAVA libraryCaller`
       
   143 if [ "${RESULT}" != "0" ]; 
       
   144 then
       
   145 	echo "Not using LD_LIBRARY_PATH; test fails."
       
   146 	exit 1
       
   147 fi
       
   148 
       
   149 # The following two tests sets both data model dependent
       
   150 # LD_LIBRARY_PATH variables individually.
       
   151 
       
   152 # -------------------- Test 2 --------------------
       
   153 
       
   154 # Set opposite data model variable; should return same result
       
   155 # as plain LD_LIBRARY_PATH.
       
   156 
       
   157 if [ "${DM}" = "32"  ]; then
       
   158 	LD_LIBRARY_PATH_64=$TESTSRC/lib/$ARCH/lib$DM/lib$DM
       
   159 	export LD_LIBRARY_PATH_64
       
   160 else
       
   161 	LD_LIBRARY_PATH_32=$TESTSRC/lib/$ARCH/lib$DM/lib$DM
       
   162 	export LD_LIBRARY_PATH_32
       
   163 fi
       
   164 
       
   165 RESULT=`$JAVA libraryCaller`
       
   166 if [ "${RESULT}" != "0" ]; 
       
   167 then
       
   168 	echo "Using LD_LIBRARY_PATH_$ODM for $DM binary;"
       
   169 	echo "test fails."
       
   170 	exit 1
       
   171 fi
       
   172 
       
   173 unset LD_LIBRARY_PATH_32
       
   174 unset LD_LIBRARY_PATH_64
       
   175 
       
   176 # -------------------- Test 3 --------------------
       
   177 
       
   178 # Set appropriate data model variable; result should match
       
   179 # data model.
       
   180 if [ "${DM}" = "32"  ]; then
       
   181 	LD_LIBRARY_PATH_32=$TESTSRC/lib/$ARCH/lib$DM/lib$DM
       
   182 	export LD_LIBRARY_PATH_32
       
   183 else
       
   184 	LD_LIBRARY_PATH_64=$TESTSRC/lib/$ARCH/lib$DM/lib$DM
       
   185 	export LD_LIBRARY_PATH_64
       
   186 fi
       
   187 
       
   188 RESULT=`$JAVA libraryCaller`
       
   189 if [ "${RESULT}" != "$DM" ]; 
       
   190 then
       
   191 	echo "Data model dependent LD_LIBRARY_PATH_$DM"
       
   192 	echo "not overriding LD_LIBRARY_PATH; test fails."
       
   193 	exit 1
       
   194 fi
       
   195 
       
   196 unset LD_LIBRARY_PATH
       
   197 unset LD_LIBRARY_PATH_32
       
   198 unset LD_LIBRARY_PATH_64
       
   199 
       
   200 # -------------------- Test 4 --------------------
       
   201 
       
   202 # Have only data model dependent LD_LIBRARY_PATH set; result
       
   203 # should match data model.
       
   204 
       
   205 if [ "${DM}" = "32"  ]; then
       
   206 	LD_LIBRARY_PATH_32=$TESTSRC/lib/$ARCH/lib$DM/lib$DM
       
   207 	export LD_LIBRARY_PATH_32
       
   208 else
       
   209 	LD_LIBRARY_PATH_64=$TESTSRC/lib/$ARCH/lib$DM/lib$DM
       
   210 	export LD_LIBRARY_PATH_64
       
   211 fi
       
   212 
       
   213 RESULT=`$JAVA libraryCaller`
       
   214 if [ "${RESULT}" != "$DM" ]; 
       
   215 then
       
   216 	echo "Not using data-model dependent LD_LIBRARY_PATH; test fails."
       
   217 	exit 1
       
   218 fi
       
   219 
       
   220 # All tests have passed
       
   221 exit 0