| #!/bin/sh |
| |
| # |
| # Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| # |
| # This code is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License version 2 only, as |
| # published by the Free Software Foundation. |
| # |
| # This code is distributed in the hope that it will be useful, but WITHOUT |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| # version 2 for more details (a copy is included in the LICENSE file that |
| # accompanied this code). |
| # |
| # You should have received a copy of the GNU General Public License version |
| # 2 along with this work; if not, write to the Free Software Foundation, |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| # |
| # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| # CA 95054 USA or visit www.sun.com if you need additional information or |
| # have any questions. |
| # |
| |
| |
| # @test |
| # @bug 6434402 |
| # @summary Start an application using a custom launcher and check that |
| # a management tool can connect. |
| # |
| # @build TestManager TestApplication |
| # @run shell CustomLauncherTest.sh |
| |
| # |
| # Check we are run from jtreg |
| # |
| if [ -z "${TESTCLASSES}" ]; then |
| echo "Test is designed to be run from jtreg only" |
| exit 0 |
| fi |
| |
| # |
| # For now this test passes silently on Windows - this means the test only |
| # has to locate libjvm.so. Also $! is not reliable on some releases of MKS. |
| #{ |
| OS=`uname -s` |
| if [ "$OS" != "Linux" -a "$OS" != "SunOS" ]; then |
| echo "Test not designed to run on this operating system, skipping..." |
| exit 0 |
| fi |
| |
| # |
| # Locate the custom launcher for this platform |
| # |
| PLATFORM=unknown |
| ARCH=unknown |
| if [ "$OS" = "SunOS" ]; then |
| PLATFORM=solaris |
| case "`uname -p`" in |
| i[3-9]86) |
| ARCH=i586 |
| ;; |
| sparc) |
| ARCH=sparc |
| ;; |
| esac |
| else |
| PLATFORM=linux |
| case "`uname -m`" in |
| i[3-6]86) |
| ARCH=i586 |
| ;; |
| x86_64) |
| ARCH=amd64 |
| ;; |
| esac |
| fi |
| |
| |
| # |
| # On x86 the native libraries are in lib/i386 for |
| # compatability reasons |
| # |
| if [ "$ARCH" = "i586" ]; then |
| LIBARCH="i386" |
| else |
| LIBARCH=$ARCH |
| fi |
| |
| |
| # |
| # Check that a custom launcher exists for this platform |
| # |
| LAUNCHER="${TESTSRC}/${PLATFORM}-${ARCH}/launcher" |
| if [ ! -x "${LAUNCHER}" ]; then |
| echo "${LAUNCHER} not found" |
| exit 0 |
| fi |
| |
| # |
| # Locate the libjvm.so library |
| # |
| JVMLIB="${TESTJAVA}/jre/lib/${LIBARCH}/client/libjvm.so" |
| if [ ! -f "${JVMLIB}" ]; then |
| JVMLIB="${TESTJAVA}/jre/lib/${LIBARCH}/server/libjvm.so" |
| if [ ! -f "${JVMLIB}" ]; then |
| JVMLIB="${TESTJAVA}/lib/${LIBARCH}/client/libjvm.so" |
| if [ ! -f "${JVMLIB}" ]; then |
| JVMLIB="${TESTJAVA}/lib/${LIBARCH}/serevr/libjvm.so" |
| if [ ! -f "${JVMLIB}" ]; then |
| echo "Unable to locate libjvm.so in ${TESTJAVA}" |
| exit 1 |
| fi |
| fi |
| fi |
| fi |
| |
| # |
| # Start the VM |
| # |
| outputfile=${TESTCLASSES}/Test.out |
| rm -f ${outputfile} |
| |
| echo '' |
| echo "Starting custom launcher..." |
| echo " launcher: ${LAUNCHER}" |
| echo " libjvm: ${JVMLIB}" |
| echo "classpath: ${TESTCLASSES}" |
| |
| |
| ${LAUNCHER} ${JVMLIB} ${TESTCLASSES} TestApplication > ${outputfile} & |
| pid=$! |
| |
| # Wait for managed VM to startup (although this looks like a potentially |
| # infinate loop, the framework will eventually kill it) |
| echo "Waiting for TestAppication to test..." |
| attempts=0 |
| while true; do |
| sleep 1 |
| port=`tail -1 ${outputfile}` |
| if [ ! -z "$port" ]; then |
| # In case of errors wait time for output to be flushed |
| sleep 1 |
| cat ${outputfile} |
| break |
| fi |
| attempts=`expr $attempts + 1` |
| echo "Waiting $attempts second(s) ..." |
| done |
| |
| # Start the manager - this should connect to VM |
| ${TESTJAVA}/bin/java -classpath ${TESTCLASSES}:${TESTJAVA}/lib/tools.jar \ |
| TestManager $pid $port true |
| if [ $? != 0 ]; then |
| echo "Test failed" |
| exit 1 |
| fi |
| exit 0 |