#!/bin/sh -x # Copyright (c) 2011, 2013, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # @test # @bug 7169888 # @compile -XDignore.symbol.file JdpUnitTest.java JdpClient.java JdpDoSomething.java # @run shell JdpTest.sh --jtreg --no-compile # @summary No word Failed expected in the test output _verbose=no _jtreg=no _compile=yes # temporary disable jcmd related tests # _testsuite="01,02,03,04,05" _testsuite="01" _pwd=`pwd` _testclasses=".classes" _testsrc="${_pwd}" _lockFileName="JdpDoSomething.lck" _logname=".classes/output.txt" _last_pid="" _ip="224.0.23.178" _port="7095" _jmxport="4545" _do_compile(){ # If the test run without JTReg, we have to compile it by our self # Under JTReg see @compile statement above # sun.* packages is not included to symbol file lib/ct.sym so we have # to ignore it if [ ! -d ${_testclasses} ] then mkdir -p ${_testclasses} fi rm -f ${_testclasses}/*.class # Compile testcase ${COMPILEJAVA}/bin/javac ${TESTTOOLVMOPTS} ${TESTJAVACOPTS} -XDignore.symbol.file -d ${_testclasses} \ JdpUnitTest.java \ JdpDoSomething.java \ JdpClient.java if [ ! -f ${_testclasses}/JdpDoSomething.class -o ! -f ${_testclasses}/JdpClient.class -o ! -f ${_testclasses}/JdpUnitTest.class ] then echo "ERROR: Can't compile" exit 255 fi } _app_start(){ testappname=$1 shift ${TESTJAVA}/bin/java ${TESTVMOPTS} ${TESTJAVAOPTS} -server $* -cp ${_testclasses} ${testappname} >> ${_logname} 2>&1 & _last_pid=$! # wait until VM is actually starts. # please note, if vm doesn't start for some reason # jtreg kills the test by timeout. Don't file a bug. cnt=1 while true do npid=`_get_pid` if [ "${npid}" != "" ] then break fi if [ "${cnt}" = "10" ] then echo "ERROR: Test app not started. Please check machine resources before filing a bug." if [ "${_jtreg}" = "yes" ] then exit 255 fi break fi cnt=`expr $cnt + 1` sleep 1 done } _get_pid(){ ${TESTJAVA}/bin/jps | sed -n "/Jdp/s/ .*//p" } _app_stop(){ rm ${_lockFileName} # wait until VM is actually shuts down while true do npid=`_get_pid` if [ "${npid}" = "" ] then break fi sleep 1 done } _testme(){ ${TESTJAVA}/bin/java \ -cp ${_testclasses} \ $* \ -Dcom.sun.management.jdp.port=${_port} \ -Dcom.sun.management.jdp.address=${_ip} \ JdpClient } _jcmd(){ ${TESTJAVA}/bin/jcmd JdpDoSomething $* > /dev/null 2>/dev/null } _echo(){ echo "$*" echo "$*" >> ${_logname} } # ============= TESTS ====================================== test_01(){ _echo "**** Test one ****" _app_start JdpUnitTest \ -Dcom.sun.management.jdp.port=${_port} \ -Dcom.sun.management.jdp.address=${_ip} \ -Dcom.sun.management.jdp.name=testme \ -Djava.rmi.server.hostname=localhost \ -Dcom.sun.management.jdp.pause=5 res=`_testme` case "${res}" in OK*) _echo "Passed" ;; *) _echo "Failed!" ;; esac _app_stop } test_02(){ _echo "**** Test two ****" _app_start JdpDoSomething \ -Dcom.sun.management.jdp.port=${_port} \ -Dcom.sun.management.jdp.address=${_ip} \ -Dcom.sun.management.jdp.pause=5 \ -Dcom.sun.management.jdp.name=testme \ -Djava.rmi.server.hostname=localhost \ -Dcom.sun.management.jmxremote.port=${_jmxport} \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false res=`_testme` case "${res}" in OK*) _echo "Passed" ;; *) _echo "Failed!" ;; esac _app_stop } test_03(){ _echo "**** Test three ****" _app_start JdpDoSomething _jcmd ManagementAgent.start\ jdp.port=${_port} \ jdp.address=${_ip} \ jdp.pause=5 \ jdp.name=jcmdtest \ jmxremote.port=${_jmxport} \ jmxremote.authenticate=false \ jmxremote.ssl=false res=`_testme` case "${res}" in OK*) _echo "Passed" ;; *) _echo "Failed!" ;; esac _app_stop } test_04(){ _echo "**** Test four ****" _app_start JdpDoSomething \ -Dcom.sun.management.jmxremote.autodiscovery=true \ -Dcom.sun.management.jdp.name=testme \ -Djava.rmi.server.hostname=localhost \ -Dcom.sun.management.jmxremote.port=${_jmxport} \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false res=`_testme` case "${res}" in OK*) _echo "Passed" ;; *) _echo "Failed!" ;; esac _app_stop } test_05(){ _echo "**** Test five ****" _app_start JdpDoSomething _jcmd ManagementAgent.start\ jmxremote.autodiscovery=true \ jmxremote.port=${_jmxport} \ jmxremote.authenticate=false \ jmxremote.ssl=false res=`_testme` case "${res}" in OK*) _echo "Passed" ;; *) _echo "Failed!" ;; esac _app_stop } # ============= MAIN ======================================= if [ "x${TESTJAVA}" = "x" ] then echo "TESTJAVA env have to be set" exit fi # COMPILEJAVA variable is set when we test jre if [ "x${COMPILEJAVA}" = "x" ] then COMPILEJAVA="${TESTJAVA}" fi #------------------------------------------------------------------------------ # reading parameters for parm in "$@" do case $parm in --verbose) _verbose=yes ;; --jtreg) _jtreg=yes ;; --no-compile) _compile=no ;; --testsuite=*) _testsuite=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;; *) echo "Undefined parameter $parm. Try --help for help" exit ;; esac done if [ "${_compile}" = "yes" ] then _do_compile fi if [ "${_jtreg}" = "yes" ] then _testclasses=${TESTCLASSES} _testsrc=${TESTSRC} _logname="output.txt" fi # Make sure _tesclasses is absolute path tt=`echo ${_testclasses} | sed -e 's,/,,'` if [ "${tt}" = "${_testclasses}" ] then _testclasses="${_pwd}/${_testclasses}" fi _policyname="${_testclasses}/policy" rm -f ${_logname} rm -f ${_policyname} if [ -f ${_testsrc}/policy.tpl ] then cat ${_testsrc}/policy.tpl | \ sed -e "s,@_TESTCLASSES@,${_testclasses},g" -e "s,@TESTJAVA@,${TESTJAVA},g" \ > ${_policyname} fi # Local mode tests for i in `echo ${_testsuite} | sed -e "s/,/ /g"` do test_${i} done