jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh
changeset 22459 def24c6b5019
parent 22458 6a74da13c52f
parent 22455 b32e2219736e
child 22473 210fdf11f9df
equal deleted inserted replaced
22458:6a74da13c52f 22459:def24c6b5019
     1 #!/bin/sh
       
     2 
       
     3 # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
       
     4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     5 # 
       
     6 # This code is free software; you can redistribute it and/or modify it
       
     7 # under the terms of the GNU General Public License version 2 only, as
       
     8 # published by the Free Software Foundation.
       
     9 # 
       
    10 # This code is distributed in the hope that it will be useful, but WITHOUT
       
    11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    12 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    13 # version 2 for more details (a copy is included in the LICENSE file that
       
    14 # accompanied this code).
       
    15 # 
       
    16 # You should have received a copy of the GNU General Public License version
       
    17 # 2 along with this work; if not, write to the Free Software Foundation,
       
    18 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    19 #
       
    20 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    21 # or visit www.oracle.com if you need additional information or have any
       
    22 # questions.
       
    23 
       
    24 # @test
       
    25 # @bug 7110104
       
    26 # @build JMXStartStopTest JMXStartStopDoSomething
       
    27 # @run shell JMXStartStopTest.sh --jtreg --no-compile
       
    28 # @summary No word Failed expected in the test output
       
    29 
       
    30 _server=no
       
    31 _jtreg=no
       
    32 _compile=yes
       
    33 _testsuite="01,02,03,04,05,06,07,08,09,10,11,12,13"
       
    34 _port_one=50234
       
    35 _port_two=50235
       
    36 
       
    37 
       
    38 _testclasses=".classes"
       
    39 _testsrc=`pwd`
       
    40 
       
    41 _logname=".classes/output.txt"
       
    42 _lockFileName="JMXStartStop.lck"
       
    43 
       
    44 _compile(){
       
    45 
       
    46     if [ ! -d ${_testclasses} ]
       
    47     then
       
    48       mkdir -p ${_testclasses} 
       
    49     fi   
       
    50 
       
    51     rm -f ${_testclasses}/JMXStartStopTest.class
       
    52 
       
    53     # Compile testcase
       
    54     ${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d ${_testclasses} \
       
    55 	JMXStartStopDoSomething.java JMXStartStopTest.java 
       
    56 
       
    57     if [ ! -f ${_testclasses}/JMXStartStopTest.class ]
       
    58     then
       
    59       echo "ERROR: Can't compile"
       
    60       exit -1
       
    61     fi
       
    62 }
       
    63 
       
    64 _app_start(){
       
    65   ${TESTJAVA}/bin/java ${TESTVMOPTS} $* -cp ${_testclasses} JMXStartStopDoSomething  >> ${_logname} 2>&1 &
       
    66 
       
    67   x=0
       
    68   while [ ! -f ${_lockFileName} ]
       
    69   do
       
    70      if [ $x -gt 20 ]
       
    71      then
       
    72         echo "ERROR: Test app not started"
       
    73         if [ "${_jtreg}" = "yes" ]
       
    74         then
       
    75            exit -1
       
    76         fi   
       
    77      fi    
       
    78         
       
    79      echo "Waiting JMXStartStopDoSomething to start: $x"
       
    80      x=`expr $x + 1`
       
    81      sleep 1
       
    82   done
       
    83 }
       
    84 
       
    85 _get_pid(){
       
    86     ${COMPILEJAVA}/bin/jps ${TESTTOOLVMOPTS} | sed -n "/JMXStartStopDoSomething/s/ .*//p"
       
    87 }
       
    88 
       
    89 _app_stop(){
       
    90   rm ${_lockFileName}
       
    91 
       
    92   # wait until VM is actually shuts down
       
    93   while true 
       
    94   do
       
    95     npid=`_get_pid`
       
    96     if [ "${npid}" = "" ] 
       
    97     then
       
    98       break
       
    99     fi
       
   100     sleep 1
       
   101   done 
       
   102 }
       
   103 
       
   104 _exit_on_jtreg(){
       
   105   # Stop on first failed test under jtreg
       
   106   if [ "${_jtreg}" = "yes" ]
       
   107   then
       
   108       _app_stop
       
   109       exit -1
       
   110   fi
       
   111 }
       
   112 
       
   113 _testme(){
       
   114   ${TESTJAVA}/bin/java ${TESTVMOPTS} -cp ${_testclasses} JMXStartStopTest $*
       
   115 }   
       
   116 
       
   117   
       
   118 _jcmd(){
       
   119   ${TESTJAVA}/bin/jcmd ${TESTTOOLVMOPTS} JMXStartStopDoSomething $* > /dev/null 2>/dev/null
       
   120 } 
       
   121 
       
   122 _echo(){
       
   123     echo "$*"
       
   124     echo "$*" >> ${_logname}
       
   125 }
       
   126    
       
   127 # ============= TESTS ======================================
       
   128    
       
   129 test_01(){
       
   130 # Run an app with JMX enabled stop it and 
       
   131 # restart on other port
       
   132         
       
   133     _echo "**** Test one ****"      
       
   134 
       
   135     _app_start  -Dcom.sun.management.jmxremote.port=$1 \
       
   136                 -Dcom.sun.management.jmxremote.authenticate=false \
       
   137                 -Dcom.sun.management.jmxremote.ssl=false 
       
   138 
       
   139     res1=`_testme $1`
       
   140 
       
   141     _jcmd ManagementAgent.stop
       
   142 
       
   143     res2=`_testme $1`
       
   144 
       
   145     _jcmd ManagementAgent.start jmxremote.port=$2
       
   146 
       
   147     res3=`_testme $2`
       
   148 
       
   149     if [ "${res1}" = "OK_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
       
   150     then
       
   151         _echo "Passed"
       
   152     else
       
   153         _echo "Failed r1(OK):${res1} r2(NO):${res2} r3(OK):${res3}"
       
   154         _exit_on_jtreg
       
   155     fi
       
   156 
       
   157     _app_stop
       
   158 }  
       
   159    
       
   160 test_02(){
       
   161 # Run an app without JMX enabled 
       
   162 # start JMX by jcmd
       
   163 
       
   164     _echo "**** Test two ****"      
       
   165     _app_start  
       
   166 
       
   167     _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
       
   168 
       
   169     res1=`_testme $1`
       
   170 
       
   171     if [ "${res1}" = "OK_CONN" ] 
       
   172     then
       
   173         _echo "Passed"
       
   174     else
       
   175         _echo "Failed r1(OK):${res1}"
       
   176         _exit_on_jtreg
       
   177     fi
       
   178     _app_stop
       
   179 }   
       
   180    
       
   181 test_03(){
       
   182 # Run an app without JMX enabled 
       
   183 # start JMX by jcmd on one port than on other one
       
   184 
       
   185     _echo "**** Test three ****"        
       
   186     _app_start  
       
   187 
       
   188     _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
       
   189 
       
   190 # Second agent shouldn't start
       
   191     _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
       
   192 
       
   193 # First agent should connect
       
   194     res1=`_testme $1`
       
   195 
       
   196     if [ "${res1}" = "OK_CONN" ] 
       
   197     then
       
   198         _echo "Passed $1"
       
   199     else
       
   200         _echo "Failed r1(NO):${res1}"
       
   201         _exit_on_jtreg
       
   202     fi
       
   203 
       
   204 #Second agent shouldn't connect
       
   205     res1=`_testme $2`
       
   206 
       
   207     if [ "${res1}" = "NO_CONN" ] 
       
   208     then
       
   209         _echo "Passed $2"
       
   210     else
       
   211         _echo "Failed r1(OK):${res1}"
       
   212         _exit_on_jtreg
       
   213     fi
       
   214 
       
   215     _app_stop
       
   216 }   
       
   217    
       
   218 test_04(){
       
   219 # Run an app without JMX enabled 
       
   220 # start JMX by jcmd on one port, specify rmi port explicitly
       
   221 
       
   222     _echo "**** Test four ****"     
       
   223     _app_start  
       
   224 
       
   225     _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
       
   226 
       
   227 # First agent should connect
       
   228     res1=`_testme $1 $2`
       
   229 
       
   230     if [ "${res1}" = "OK_CONN" ] 
       
   231     then
       
   232         _echo "Passed $1 $2"
       
   233     else
       
   234         _echo "Failed r1(NO):${res1}"
       
   235         _exit_on_jtreg
       
   236     fi
       
   237 
       
   238     _app_stop
       
   239 }   
       
   240 
       
   241 test_05(){
       
   242 # Run an app without JMX enabled, it will enable local server
       
   243 # but should leave remote server disabled  
       
   244 
       
   245     _echo "**** Test five ****"     
       
   246     _app_start  
       
   247 
       
   248     _jcmd ManagementAgent.start jmxremote=1 
       
   249 
       
   250     # First agent should connect
       
   251     res1=`_testme $1`
       
   252 
       
   253     if [ "${res1}" = "NO_CONN" ] 
       
   254     then
       
   255         _echo "Passed $1 $2"
       
   256     else
       
   257         _echo "Failed r1(OK):${res1}"
       
   258         _exit_on_jtreg
       
   259     fi
       
   260 
       
   261     _app_stop
       
   262 }   
       
   263 
       
   264 test_06(){
       
   265 # Run an app without JMX enabled 
       
   266 # start JMX by jcmd on one port, specify rmi port explicitly
       
   267 # attempt to start it again
       
   268 # 1) with the same port 
       
   269 # 2) with other port
       
   270 # 3) attempt to stop it twice
       
   271 # Check for valid messages in the output    
       
   272 
       
   273     _echo "**** Test six ****"      
       
   274     _app_start  
       
   275 
       
   276     _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
       
   277 
       
   278     # First agent should connect
       
   279     res1=`_testme $1 $2`
       
   280 
       
   281     if [ "${res1}" = "OK_CONN" ] 
       
   282     then
       
   283         _echo "Passed $1 $2"
       
   284     else
       
   285         _echo "Failed r1(NO):${res1}"
       
   286         _exit_on_jtreg
       
   287     fi
       
   288 
       
   289     _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
       
   290 
       
   291     _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
       
   292 
       
   293     _jcmd ManagementAgent.stop
       
   294 
       
   295     _jcmd ManagementAgent.stop
       
   296 
       
   297     _jcmd ManagementAgent.start jmxremote.port=22 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
       
   298 
       
   299     _app_stop
       
   300 }   
       
   301 
       
   302 test_07(){
       
   303 # Run an app without JMX enabled, but with some properties set 
       
   304 # in command line.
       
   305 # make sure these properties overriden corectly 
       
   306 
       
   307     _echo "**** Test seven ****"        
       
   308 
       
   309     _app_start   -Dcom.sun.management.jmxremote.authenticate=false \
       
   310                  -Dcom.sun.management.jmxremote.ssl=true 
       
   311 
       
   312     res1=`_testme $1`
       
   313 
       
   314     _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
       
   315 
       
   316     res2=`_testme $2`
       
   317 
       
   318     if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] 
       
   319     then
       
   320         echo "Passed"
       
   321     else
       
   322         _echo "Failed r1(NO):${res1} r2(OK):${res2}"
       
   323         _exit_on_jtreg
       
   324     fi
       
   325 
       
   326     _app_stop
       
   327 }   
       
   328 
       
   329 test_08(){
       
   330 # Run an app with JMX enabled and with some properties set 
       
   331 # in command line.
       
   332 # stop JMX agent and then start it again with different property values
       
   333 # make sure these properties overriden corectly 
       
   334 
       
   335     _echo "**** Test eight ****"        
       
   336 
       
   337     _app_start  -Dcom.sun.management.jmxremote.port=$1 \
       
   338                 -Dcom.sun.management.jmxremote.authenticate=false \
       
   339                 -Dcom.sun.management.jmxremote.ssl=true 
       
   340 
       
   341     res1=`_testme $1`
       
   342 
       
   343     _jcmd ManagementAgent.stop
       
   344 
       
   345     res2=`_testme $1`
       
   346 
       
   347     _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
       
   348 
       
   349     res3=`_testme $2`
       
   350 
       
   351     if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
       
   352     then
       
   353         _echo "Passed"
       
   354     else
       
   355         _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
       
   356         _exit_on_jtreg
       
   357     fi
       
   358  
       
   359     _app_stop
       
   360 }   
       
   361 
       
   362 test_09(){
       
   363 # Run an app with JMX enabled and with some properties set 
       
   364 # in command line.
       
   365 # stop JMX agent and then start it again with different property values
       
   366 # specifing some property in management config file and some of them
       
   367 # in command line
       
   368 # make sure these properties overriden corectly 
       
   369 
       
   370     _echo "**** Test nine ****"     
       
   371 
       
   372     _app_start -Dcom.sun.management.config.file=${_testsrc}/management_cl.properties \
       
   373                -Dcom.sun.management.jmxremote.authenticate=false 
       
   374 
       
   375     res1=`_testme $1`
       
   376 
       
   377     _jcmd ManagementAgent.stop
       
   378 
       
   379     res2=`_testme $1`
       
   380 
       
   381     _jcmd ManagementAgent.start config.file=${_testsrc}/management_jcmd.properties \
       
   382                                 jmxremote.authenticate=false jmxremote.port=$2
       
   383 
       
   384     res3=`_testme $2`
       
   385 
       
   386     if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
       
   387     then
       
   388         _echo "Passed"
       
   389     else
       
   390         _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
       
   391         _exit_on_jtreg
       
   392     fi
       
   393  
       
   394     _app_stop
       
   395 }   
       
   396 
       
   397 test_10(){
       
   398 # Run an app with JMX enabled and with some properties set 
       
   399 # in command line.
       
   400 # stop JMX agent and then start it again with different property values
       
   401 # stop JMX agent again and then start it without property value
       
   402 # make sure these properties overriden corectly 
       
   403 
       
   404     _echo "**** Test ten ****"      
       
   405 
       
   406     _app_start  -Dcom.sun.management.jmxremote.port=$1 \
       
   407                 -Dcom.sun.management.jmxremote.authenticate=false \
       
   408                 -Dcom.sun.management.jmxremote.ssl=true 
       
   409 
       
   410     res1=`_testme $1`
       
   411 
       
   412     _jcmd ManagementAgent.stop
       
   413     _jcmd ManagementAgent.start jmxremote.ssl=false jmxremote.port=$1
       
   414 
       
   415 
       
   416     res2=`_testme $1`
       
   417 
       
   418     _jcmd ManagementAgent.stop
       
   419     _jcmd ManagementAgent.start jmxremote.port=$1
       
   420 
       
   421     res3=`_testme $1`
       
   422 
       
   423     if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" -a "${res3}" = "NO_CONN" ] 
       
   424     then
       
   425         _echo "Passed"
       
   426     else
       
   427         _echo "Failed r1(NO):${res1} r2(OK):${res2} r3(NO):${res3}"
       
   428         _exit_on_jtreg
       
   429     fi
       
   430  
       
   431     _app_stop
       
   432 }   
       
   433 
       
   434 test_11(){
       
   435 # Run an app with JMX enabled 
       
   436 # stop remote agent 
       
   437 # make sure local agent is not affected
       
   438 
       
   439     _echo "**** Test eleven ****"       
       
   440 
       
   441     _app_start  -Dcom.sun.management.jmxremote.port=$2 \
       
   442                 -Dcom.sun.management.jmxremote.authenticate=false \
       
   443                 -Dcom.sun.management.jmxremote.ssl=false 
       
   444       
       
   445     res1=`_testme $2`
       
   446 
       
   447     _jcmd ManagementAgent.stop
       
   448 
       
   449     pid=`${COMPILEJAVA}/bin/jps ${TESTTOOLVMOPTS} | sed -n "/JMXStartStopDoSomething/s/ .*//p"`
       
   450     res2=`_testme local ${pid}`
       
   451 
       
   452     if [ "${res1}" = "OK_CONN" -a "${res2}" = "OK_CONN" ] 
       
   453     then
       
   454         _echo "Passed"
       
   455     else
       
   456         _echo "Failed r1(OK):${res1} r2(OK):${res2}"
       
   457         _exit_on_jtreg
       
   458     fi
       
   459  
       
   460     _app_stop
       
   461 }   
       
   462 
       
   463 test_12(){
       
   464 # Run an app with JMX disabled 
       
   465 # start local agent only
       
   466 
       
   467     _echo "**** Test twelve ****"       
       
   468 
       
   469     _app_start 
       
   470       
       
   471     res1=`_testme $1`
       
   472 
       
   473     _jcmd ManagementAgent.start_local
       
   474 
       
   475     pid=`_get_pid`
       
   476     if [ "x${pid}" = "x" ]
       
   477     then
       
   478         res2="NO_CONN"
       
   479     else
       
   480         res2=`_testme local ${pid}`
       
   481     fi
       
   482 
       
   483     if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] 
       
   484     then
       
   485         _echo "Passed"
       
   486     else
       
   487         _echo "Failed r1(NO):${res1} r2(OK):${res2}"
       
   488         _exit_on_jtreg
       
   489     fi
       
   490  
       
   491     _app_stop
       
   492 }   
       
   493 
       
   494 test_13(){
       
   495 # Run an app with -javaagent make sure it works as expected - system properties are ignored
       
   496 
       
   497     _echo "**** Test thirteen ****"       
       
   498 			   
       
   499     AGENT="${TESTJAVA}/jre/lib/management-agent.jar"
       
   500     if [ ! -f ${AGENT} ]
       
   501     then
       
   502         AGENT="${TESTJAVA}/lib/management-agent.jar"
       
   503     fi
       
   504 
       
   505     _app_start -javaagent:${AGENT}=com.sun.management.jmxremote.port=$1,com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 
       
   506       
       
   507     res1=`_testme $1`
       
   508 
       
   509     if [ "${res1}" = "NO_CONN" ] 
       
   510     then
       
   511         _echo "Passed"
       
   512     else
       
   513         _echo "Failed r1(NO):${res1}"
       
   514         _exit_on_jtreg
       
   515     fi
       
   516  
       
   517     _app_stop
       
   518 }   
       
   519 
       
   520 # ============= MAIN =======================================
       
   521 
       
   522 if [ "x${TESTJAVA}" = "x" ]
       
   523 then
       
   524   echo "TESTJAVA env have to be set"
       
   525   exit
       
   526 fi
       
   527 
       
   528 if [ ! -x "${TESTJAVA}/bin/jcmd" ]
       
   529 then
       
   530   echo "${TESTJAVA}/bin/jcmd"
       
   531   echo "Doesn't exist or not an executable"
       
   532   exit
       
   533 fi
       
   534 
       
   535 
       
   536 #------------------------------------------------------------------------------
       
   537 # reading parameters 
       
   538 
       
   539 for parm in "$@"  
       
   540 do
       
   541    case $parm in
       
   542   --jtreg)        _jtreg=yes    ;;
       
   543   --no-compile)   _compile=no   ;;
       
   544   --testsuite=*)  _testsuite=`_echo $parm | sed "s,^--.*=\(.*\),\1,"`  ;;
       
   545   --port-one=*)   _port_one=`_echo $parm | sed "s,^--.*=\(.*\),\1,"`  ;;
       
   546   --port-two=*)   _port_two=`_echo $parm | sed "s,^--.*=\(.*\),\1,"`  ;;
       
   547   *) 
       
   548      echo "Undefined parameter $parm. Try --help for help" 
       
   549      exit 
       
   550    ;;
       
   551  esac 
       
   552 done
       
   553 
       
   554 if [ "${COMPILEJAVA}" = "" ]
       
   555 then 
       
   556   COMPILEJAVA=${TESTJAVA}
       
   557 fi
       
   558 
       
   559 if [ ${_compile} = "yes" ]
       
   560 then
       
   561  _compile
       
   562 fi
       
   563 
       
   564 if [ ${_jtreg} = "yes" ]
       
   565 then
       
   566  _testclasses=${TESTCLASSES}
       
   567  _testsrc=${TESTSRC}
       
   568  _logname="JMXStartStopTest_output.txt"
       
   569 fi
       
   570 
       
   571 rm -f ${_logname}
       
   572 
       
   573 # Local mode tests
       
   574 for i in `echo ${_testsuite} | sed -e "s/,/ /g"`
       
   575 do
       
   576   test_${i} ${_port_one} ${_port_two}
       
   577 done
       
   578 
       
   579