Back to home page

Enduro/X

 
 

    


0001 #!/bin/bash
0002 ##
0003 ## @brief @(#) Test037 - Test "xadmin down" - wipe out all Enduro/X runtime resources.
0004 ##   NOTE: We also test removal of client processes childs for cpm and standalone..
0005 ##
0006 ## @file run.sh
0007 ##
0008 ## -----------------------------------------------------------------------------
0009 ## Enduro/X Middleware Platform for Distributed Transaction Processing
0010 ## Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0011 ## Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0012 ## This software is released under one of the following licenses:
0013 ## AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0014 ## See LICENSE file for full text.
0015 ## -----------------------------------------------------------------------------
0016 ## AGPL license:
0017 ##
0018 ## This program is free software; you can redistribute it and/or modify it under
0019 ## the terms of the GNU Affero General Public License, version 3 as published
0020 ## by the Free Software Foundation;
0021 ##
0022 ## This program is distributed in the hope that it will be useful, but WITHOUT ANY
0023 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0024 ## PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0025 ## for more details.
0026 ##
0027 ## You should have received a copy of the GNU Affero General Public License along 
0028 ## with this program; if not, write to the Free Software Foundation, Inc.,
0029 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0030 ##
0031 ## -----------------------------------------------------------------------------
0032 ## A commercial use license is available from Mavimax, Ltd
0033 ## contact@mavimax.com
0034 ## -----------------------------------------------------------------------------
0035 ##
0036 
0037 export TESTNO="037"
0038 export TESTNAME_SHORT="down"
0039 export TESTNAME="test${TESTNO}_${TESTNAME_SHORT}"
0040 
0041 PWD=`pwd`
0042 if [ `echo $PWD | grep $TESTNAME ` ]; then
0043         # Do nothing 
0044         echo > /dev/null
0045 else
0046         # started from parent folder
0047         pushd .
0048         echo "Doing cd"
0049         cd $TESTNAME
0050 fi;
0051 
0052 . ../testenv.sh
0053 
0054 export TESTDIR="$NDRX_APPHOME/atmitest/$TESTNAME"
0055 export PATH=$PATH:$TESTDIR
0056 # We do not need timeout, we will kill procs...
0057 export NDRX_TOUT=9999
0058 export NDRX_SILENT=Y
0059 #
0060 # Domain 1 - here client will live
0061 #
0062 function set_dom1 {
0063     echo "Setting domain 1"
0064     . ../dom1.sh
0065     export NDRX_CONFIG=$TESTDIR/ndrxconfig-dom1.xml
0066     export NDRX_DMNLOG=$TESTDIR/ndrxd-dom1.log
0067     export NDRX_LOG=$TESTDIR/ndrx-dom1.log
0068     export NDRX_DEBUG_CONF=$TESTDIR/debug-dom1.conf
0069 }
0070 
0071 #
0072 # Domain 2 - here server will live
0073 #
0074 function set_dom2 {
0075     echo "Setting domain 2"
0076     . ../dom2.sh    
0077     export NDRX_CONFIG=$TESTDIR/ndrxconfig-dom2.xml
0078     export NDRX_DMNLOG=$TESTDIR/ndrxd-dom2.log
0079     export NDRX_LOG=$TESTDIR/ndrx-dom2.log
0080     export NDRX_DEBUG_CONF=$TESTDIR/debug-dom2.conf
0081 }
0082 
0083 #
0084 # Generic exit function
0085 #
0086 function go_out {
0087     echo "Test exiting with: $1"
0088     
0089     set_dom1;
0090     xadmin stop -y
0091     xadmin down -y
0092 
0093     set_dom2;
0094     xadmin stop -y
0095     xadmin down -y
0096 
0097     # If some alive stuff left...
0098     xadmin killall atmiclt37
0099 
0100     popd 2>/dev/null
0101     exit $1
0102 }
0103 
0104 rm *dom*.log
0105 # Any bridges that are live must be killed!
0106 xadmin killall tpbridge
0107 #xadmin killall sleep
0108 xadmin killall nap.sh
0109 xadmin killall nap2.sh
0110 xadmin killall atmiclt
0111 xadmin killall ndrxd
0112 xadmin killall atmisrv
0113 
0114 set_dom1;
0115 #### Remove all shms
0116 xadmin down -y
0117 xadmin shms | cut -d ':' -f 2 | xargs -i ipcrm -m {}
0118 xadmin start -y || go_out 1
0119 
0120 echo "Wait for CPM to boot (WAIT 10)"
0121 sleep 10
0122 xadmin pc
0123 xadmin killall cpmsrv
0124 echo "Wait for CPM to boot (WAIT 15), AFTER CPMSRV REBOOT"
0125 sleep 15
0126 xadmin pc
0127 echo "Continue..."
0128 
0129 
0130 set_dom2;
0131 #### Remove all shsm
0132 xadmin down -y
0133 xadmin shms | cut -d ':' -f 2 | xargs -i ipcrm -m {}
0134 xadmin start -y || go_out 2
0135 
0136 # Clean up the logs
0137 rm xadmin-*.log
0138 
0139 # Have some wait for ndrxd goes in service - wait for connection establishment.
0140 sleep 10
0141 
0142 RET=0
0143 
0144 set_dom1;
0145 
0146 nohup ./atmiclt37 &
0147 sleep 1
0148 
0149 echo "DOM 1 atmiclts..."
0150 $PSCMD | grep atmiclt37 | grep -v grep
0151 
0152 set_dom2;
0153 
0154 nohup ./atmiclt37 &
0155 sleep 1
0156 
0157 echo "After DOM 2 atmiclts..."
0158 $PSCMD | grep atmiclt37 | grep -v grep
0159 
0160 
0161 set_dom1;
0162 
0163 echo "nap2 after boot"
0164 $PSCMD | grep nap2.sh
0165 
0166 $PSCMD | grep atmiclt37
0167 
0168 ################################################################################
0169 # Test resources before kill
0170 ################################################################################
0171 echo "Situation before downing..."
0172 $PSCMD
0173 
0174 
0175 echo "==== Details ===="
0176 
0177 echo "cpms"
0178 $PSCMD | grep cpmsrv
0179 
0180 echo "ndrxd"
0181 $PSCMD | grep ndrxd
0182 
0183 echo "nap.sh"
0184 $PSCMD | grep nap.sh
0185 
0186 echo "nap2.sh"
0187 $PSCMD | grep nap2.sh
0188 
0189 echo "atmiclt37"
0190 $PSCMD | grep atmiclt37
0191 
0192 echo "sleep"
0193 $PSCMD | grep sleep
0194 
0195 echo "==== Details, end ===="
0196 
0197 
0198 echo "dom1 client"
0199 
0200 xadmin pc
0201 
0202 #
0203 # We should have 4x sleepy procs 2x for each dom
0204 #
0205 CNT=`$PSCMD | grep nap.sh | grep -v grep | wc | awk '{print $1}'`
0206 
0207 PROC_COUNT="4"
0208 echo "$PSCMD procs: $CNT"
0209 if [[ "$CNT" -ne "$PROC_COUNT" ]]; then 
0210     echo "TESTERROR! $PROC_COUNT nap.sh not booted (according to $PSCMD )!"
0211     go_out 10
0212 fi
0213 
0214 $PSCMD | grep atmiclt37
0215 
0216 CNT=`$PSCMD | grep atmiclt37 | grep -v grep | wc | awk '{print $1}'`
0217 
0218 PROC_COUNT="8"
0219 echo "$PSCMD procs: $CNT"
0220 if [[ "$CNT" -ne "$PROC_COUNT" ]]; then 
0221     echo "TESTERROR! $PROC_COUNT atmiclt37 not booted (according to $PSCMD )!"
0222     go_out 11
0223 fi
0224 
0225 CNT=`$PSCMD | grep nap2.sh | grep -v grep | wc | awk '{print $1}'`
0226 
0227 PROC_COUNT="4"
0228 echo "$PSCMD procs: $CNT"
0229 if [[ "$CNT" -ne "$PROC_COUNT" ]]; then 
0230     echo "TESTERROR! $PROC_COUNT nap2.sh not booted (according to $PSCMD )!"
0231     go_out 11
0232 fi
0233 
0234 ################################################################################
0235 # Down the dom1
0236 ################################################################################
0237 
0238 echo "About to down dom1"
0239 xadmin pqa
0240 xadmin down -y
0241 
0242 echo "After dom1 down"
0243 $PSCMD
0244 #
0245 # The dom2 must not be killed, thus count their procs
0246 #
0247 CNT=`$PSCMD | grep nap.sh | grep -v grep | wc | awk '{print $1}'`
0248 PROC_COUNT="2"
0249 echo "$PSCMD procs: $CNT"
0250 if [[ "$CNT" -ne "$PROC_COUNT" ]]; then 
0251     echo "TESTERROR! $PROC_COUNT nap.sh not left (according to $PSCMD )!"
0252     go_out 12
0253 fi
0254 
0255 #
0256 # Children of the cpm clients must be killed too
0257 #
0258 CNT=`$PSCMD | grep nap2.sh | grep -v grep | wc | awk '{print $1}'`
0259 PROC_COUNT="2"
0260 echo "$PSCMD procs: $CNT"
0261 if [[ "$CNT" -ne "$PROC_COUNT" ]]; then 
0262     echo "TESTERROR! $PROC_COUNT nap2.sh not left (according to $PSCMD )!"
0263     go_out 12
0264 fi
0265 
0266 #
0267 # These how twice forked child... thus should have left 4
0268 #
0269 CNT=`$PSCMD | grep atmiclt37 | grep -v grep | wc | awk '{print $1}'`
0270 PROC_COUNT="4"
0271 echo "$PSCMD procs: $CNT"
0272 if [[ "$CNT" -ne "$PROC_COUNT" ]]; then 
0273     echo "TESTERROR! $PROC_COUNT atmiclt37 not left (according to $PSCMD )!"
0274     go_out 13
0275 fi
0276     
0277 #
0278 # Test the other resources of dom1 & dom2
0279 # Dom 1 queues must not exist
0280 #
0281 xadmin pqa
0282 CNT=`xadmin pqa | wc | awk '{print $1}'`
0283 echo "DOM1 Queues: $CNT"
0284 if [[ "$CNT" -ne "1" ]]; then 
0285     echo "TESTERROR! Dom1 all queues must be killed except xadmin's!"
0286     go_out 14
0287 fi
0288 
0289 CNT=`$PSCMD | grep ndrxd | grep -v grep | wc | awk '{print $1}'`
0290 
0291 echo "NDRXD daemons: $CNT"
0292 if [[ "$CNT" -ne "1" ]]; then 
0293     echo "TESTERROR! Only one copy of ndrxd must be left!"
0294     go_out 15
0295 fi
0296 
0297 CNT=`$PSCMD | grep atmisv37 | grep -v grep |wc | awk '{print $1}'`
0298 echo "atmisv37: $CNT"
0299 if [[ "$CNT" -ne "1" ]]; then 
0300     echo "TESTERROR! Only one copy of atmisv37 must be left!"
0301     go_out 16
0302 fi
0303 
0304 CNT=`$PSCMD | grep atmisv_2_37 | grep -v grep |wc | awk '{print $1}'`
0305 echo "atmisv_2_37 $CNT"
0306 if [[ "$CNT" -ne "1" ]]; then 
0307     echo "TESTERROR! Only one copy of atmisv_2_37 must be left!"
0308     go_out 17
0309 fi
0310 
0311 CNT=`$PSCMD | grep tprecover | grep -v grep | wc | awk '{print $1}'`
0312 echo "tprecover: $CNT"
0313 if [[ "$CNT" -ne "1" ]]; then 
0314     echo "TESTERROR! Only one copy of tprecover must be left!"
0315     go_out 18
0316 fi
0317 
0318 #
0319 # Test for shared memory to be removed
0320 # looks like we can test this only on linux
0321 #
0322 
0323 echo "Shared mem objects: "
0324 
0325 xadmin shms
0326 xadmin shms | wc | awk '{print $1}'
0327 SHMS=`xadmin shms | wc | awk '{print $1}'`
0328 
0329 echo "DOM1 Shared memories: $SHMS"
0330 
0331 if [ `xadmin poller` == "SystemV" ] || [ `xadmin poller` == "svapoll" ]; then
0332 
0333     if [[ "$SHMS" -ne "3" ]]; then 
0334         echo "TESTERROR! There must be 3 shared memory objs for dom1 after kill!"
0335         go_out 18
0336     fi
0337 else
0338 
0339     if [[ "$SHMS" -ne "1" ]]; then 
0340         echo "TESTERROR! There must be 1 shared memory for dom1 after kill!"
0341         go_out 18
0342     fi
0343 fi
0344 
0345 #
0346 # Test for system v semaphore to be removed...
0347 #
0348 echo "**** IPCS SEMAPHORE ****"
0349 xadmin svsemids
0350 echo "**** IPCS $NDRX_IPCKEY ****"
0351 xadmin svsemids -k | grep $NDRX_IPCKEY
0352 echo "**** IPCS END ****"
0353 
0354 CNT=`xadmin svsemids -k | grep $NDRX_IPCKEY | wc -l`
0355 echo "DOM1 Semaphores (guessed): $CNT"
0356 if [[ "$CNT" -ne "0" ]]; then 
0357     echo "TESTERROR! The semaphore with key [$NDRX_IPCKEY] must be removed!!"
0358     go_out 19
0359 fi
0360 
0361 ################################################################################
0362 # Down the dom2
0363 ################################################################################
0364 
0365 set_dom2;
0366 xadmin down -y
0367 echo "After dom2 down..."
0368 $PSCMD
0369 
0370 xadmin pqa -a
0371 CNT=`xadmin pqa -a | grep dom | wc | awk '{print $1}'`
0372 echo "DOM1 Queues: $CNT"
0373 if [[ "$CNT" -ne "1" ]]; then 
0374     echo "TESTERROR! Dom1 & 2 all queues must be removed except 1 for xadmin!"
0375     go_out 30
0376 fi
0377 
0378 CNT=`$PSCMD | grep atmisv37 | grep -v grep | wc | awk '{print $1}'`
0379 echo "Finally atmisv37: $CNT"
0380 if [[ "$CNT" -ne "0" ]]; then 
0381     echo "TESTERROR! All atmisv37 must be killed!"
0382     go_out 31
0383 fi
0384 
0385 CNT=`$PSCMD | grep atmisv_2_37 | grep -v grep | wc | awk '{print $1}'`
0386 echo "Finally atmisv_2_37 $CNT"
0387 if [[ "$CNT" -ne "0" ]]; then 
0388     echo "TESTERROR! All atmisv_2_37 must be killed!"
0389     go_out 32
0390 fi
0391 
0392 # Catch is there is test error!!!
0393 if [ "X`grep TESTERROR *.log`" != "X" ]; then
0394     echo "Test error detected!"
0395     RET=-2
0396 fi
0397 
0398 ################################################################################
0399 echo "Test udown"
0400 ################################################################################
0401 ./atmiclt37 &
0402 sleep 1
0403 xadmin killall atmiclt37
0404 echo "There must be some shared mem.."
0405 
0406 SHMS=`xadmin shms`
0407 
0408 echo "Before udown [$SHMS]"
0409 
0410 if [ "X$SHMS" == "X" ]; then
0411     echo "Test not ready.."
0412     go_out -100
0413 fi
0414 
0415 xadmin udown -y
0416 
0417 xadmin shms
0418 xadmin shms | wc | awk '{print $1}'
0419 SHMS=`xadmin shms | wc | awk '{print $1}'`
0420 
0421 echo "After udown [$SHMS]"
0422 
0423 # LCF is created again... as we run shms
0424 if [ "$SHMS" != "1" ]; then
0425     echo "udown failed to remove resources (still the LCF shall be leaved)"
0426     go_out -101
0427 fi
0428 
0429 go_out 0
0430 
0431 # vim: set ts=4 sw=4 et smartindent: