Back to home page

Enduro/X

 
 

    


0001 #!/bin/bash
0002 ##
0003 ## @brief @(#) Test028 - clusterised version
0004 ##
0005 ## @file run-dom.sh
0006 ##
0007 ## -----------------------------------------------------------------------------
0008 ## Enduro/X Middleware Platform for Distributed Transaction Processing
0009 ## Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0010 ## Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0011 ## This software is released under one of the following licenses:
0012 ## AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0013 ## See LICENSE file for full text.
0014 ## -----------------------------------------------------------------------------
0015 ## AGPL license:
0016 ##
0017 ## This program is free software; you can redistribute it and/or modify it under
0018 ## the terms of the GNU Affero General Public License, version 3 as published
0019 ## by the Free Software Foundation;
0020 ##
0021 ## This program is distributed in the hope that it will be useful, but WITHOUT ANY
0022 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0023 ## PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0024 ## for more details.
0025 ##
0026 ## You should have received a copy of the GNU Affero General Public License along 
0027 ## with this program; if not, write to the Free Software Foundation, Inc.,
0028 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0029 ##
0030 ## -----------------------------------------------------------------------------
0031 ## A commercial use license is available from Mavimax, Ltd
0032 ## contact@mavimax.com
0033 ## -----------------------------------------------------------------------------
0034 ##
0035 
0036 export TESTNO="028"
0037 export TESTNAME_SHORT="tmq"
0038 export TESTNAME="test${TESTNO}_${TESTNAME_SHORT}"
0039 
0040 PWD=`pwd`
0041 if [ `echo $PWD | grep $TESTNAME ` ]; then
0042         # Do nothing 
0043         echo > /dev/null
0044 else
0045         # started from parent folder
0046         pushd .
0047         echo "Doing cd"
0048         cd $TESTNAME
0049 fi;
0050 
0051 . ../testenv.sh
0052 
0053 export TESTDIR="$NDRX_APPHOME/atmitest/$TESTNAME"
0054 export PATH=$PATH:$TESTDIR
0055 # Override timeout!
0056 export NDRX_TOUT=90
0057 export NDRX_LIBEXT="so"
0058 export NDRX_ULOG=$TESTDIR
0059 
0060 #
0061 # Domain 1 - here client will live
0062 #
0063 function set_dom1 {
0064     echo "Setting domain 1"
0065     . ../dom1.sh
0066     export NDRX_CONFIG=$TESTDIR/ndrxconfig-dom1.xml
0067     export NDRX_DMNLOG=$TESTDIR/ndrxd-dom1.log
0068     export NDRX_LOG=$TESTDIR/ndrx-dom1.log
0069     export NDRX_DEBUG_CONF=$TESTDIR/debug-dom1.conf
0070 
0071 # XA config, mandatory for TMQ:
0072     export NDRX_XA_RES_ID=1
0073     export NDRX_XA_OPEN_STR="datadir=./QSPACE1,qspace=MYSPACE"
0074     export NDRX_XA_CLOSE_STR=$NDRX_XA_OPEN_STR
0075 # Used from parent
0076     export NDRX_XA_DRIVERLIB=$NDRX_XA_DRIVERLIB_FILENAME
0077 
0078     export NDRX_XA_RMLIB=libndrxxaqdisk.so
0079 if [ "$(uname)" == "Darwin" ]; then
0080     export NDRX_XA_RMLIB=libndrxxaqdisk.dylib
0081     export NDRX_LIBEXT="dylib"
0082 fi
0083     export NDRX_XA_LAZY_INIT=0
0084 }
0085 
0086 #
0087 # Generic exit function
0088 #
0089 function go_out {
0090     echo "Test exiting with: $1"
0091     
0092     set_dom1;
0093     xadmin stop -y
0094     xadmin down -y
0095 
0096     # If some alive stuff left...
0097     xadmin killall atmiclt28
0098 
0099     popd 2>/dev/null
0100     exit $1
0101 }
0102 
0103 
0104 function clean_logs {
0105     # clean-up the logs for debbuging at the error.
0106     for f in `ls *.log`; do
0107          echo > $f
0108     done
0109 }
0110 #
0111 # Test Q space for empty condition
0112 #
0113 function test_empty_qspace {
0114         echo "Testing Qspace empty"
0115     
0116         COUNT=`find ./QSPACE1 -type f | wc | awk '{print $1}'`
0117 
0118         if [[ "X$COUNT" != "X0" ]]; then
0119                 echo "QSPACE1 MUST BE EMPTY AFTER TEST!!!!"
0120                 go_out 2
0121         fi
0122 
0123     #clean_logs;
0124 }
0125 
0126 #rm *dom*.log
0127 
0128 # Where to store TM logs
0129 rm -rf ./RM1
0130 mkdir RM1
0131 
0132 rm -rf ./RM2
0133 mkdir RM2
0134 
0135 # Where to store Q messages (QSPACE1)
0136 rm -rf ./QSPACE1
0137 mkdir QSPACE1
0138 
0139 cp q.conf.tpl q.conf
0140 
0141 clean_logs;
0142 rm *.log >/dev/null
0143 
0144 set_dom1;
0145 # clean up anything left from prevoius tests...
0146 xadmin down -y
0147 # let ndrxd to finish
0148 sleep 2
0149 xadmin start -y || go_out 1
0150 
0151 # Go to domain 1
0152 set_dom1;
0153 
0154 # Run the client test...
0155 xadmin psc
0156 xadmin psvc
0157 xadmin ppm
0158 
0159 set | grep NDRX
0160 
0161 echo "Running: basic test (enq + deq)"
0162 (./atmiclt28 basic 2>&1) > ./atmiclt-dom1.log
0163 RET=$?
0164 
0165 if [[ "X$RET" != "X0" ]]; then
0166     go_out $RET
0167 fi
0168 
0169 test_empty_qspace;
0170 
0171 echo "Running: Future FIFO/LIFO AUTO (TPQTIME_ABS & TPQTIME_REL) tests"
0172 (./atmiclt28 futauto 2>&1) >> ./atmiclt-dom1.log
0173 RET=$?
0174 
0175 if [[ "X$RET" != "X0" ]]; then
0176     go_out $RET
0177 fi
0178 
0179 test_empty_qspace;
0180 
0181 # callback generated test errors...
0182 if [ "X`grep TESTERROR *.log`" != "X" ]; then
0183         echo "Test error detected!"
0184         goto_out -1
0185 fi
0186 
0187 echo "Running: enqueue"
0188 (./atmiclt28 enq 2>&1) > ./atmiclt-dom1.log
0189 RET=$?
0190 
0191 if [[ "X$RET" != "X0" ]]; then
0192     go_out $RET
0193 fi
0194 
0195 #find ./QSPACE1 -type f
0196 
0197 echo ">>> Listing b4"
0198 ls -l QSPACE1/committed
0199 ls -l QSPACE1/committed | wc
0200 
0201 xadmin stop -y
0202 # let ndrxd to finish
0203 sleep 2
0204 xadmin start -y || go_out 1
0205 clean_logs;
0206 
0207 
0208 echo ">>> Listing after"
0209 ls -l QSPACE1/committed
0210 ls -l QSPACE1/committed | wc
0211 ################################################################################
0212 #
0213 # CLI TESTS
0214 #
0215 ################################################################################
0216 #reload config
0217 
0218 echo "Testing [xadmin mqrc]"
0219 
0220 echo "BINQ2,svcnm=-,autoq=n,tries=10,waitinit=1,waitretry=1,waitretryinc=0,waitretrymax=1,mode=fifo" >> q.conf
0221 xadmin mqrc
0222 RET=$?
0223 
0224 if [[ "X$RET" != "X0" ]]; then
0225     go_out $RET
0226 fi
0227 
0228 if [ "X`xadmin mqlc | grep BINQ2 | grep fifo`" ==  "X" ]; then
0229     echo "Missing BINQ2 not defined!"
0230     go_out 1
0231 fi
0232 
0233 
0234 # List q config
0235 xadmin mqlc
0236 
0237 echo "Testing [xadmin mqlc]"
0238 #
0239 # Test the config, we shall see "LTESTA" with lifo mode...
0240 #
0241 if [ "X`xadmin mqlc | grep LTESTA | grep lifo`" ==  "X" ]; then
0242     echo "Missing LTESTA lifo Q"
0243     go_out 1
0244 fi
0245 
0246 # List the queues (should be something..)
0247 xadmin mqlq
0248 
0249 echo "Testing [xadmin mqlq]"
0250 if [ "X`xadmin mqlq | grep TESTB | grep 300`" ==  "X" ]; then
0251     echo "Missing TESTB and 300"
0252     go_out 1
0253 fi
0254 
0255 # List messages in q
0256 xadmin mqlm -s MYSPACE -q TESTC 
0257 
0258 #Dump the first message to stdout:
0259 
0260 echo "Testing [xadmin mqlm]"
0261 
0262 MSGID=`xadmin mqlm -s MYSPACE -q TESTC  | tail -1  | awk '{print($3)}'`
0263 
0264 if [ "X$MSGID" ==  "X" ]; then
0265     echo "Missing message mqlm"
0266     go_out 1
0267 fi
0268 
0269 echo "Dumping message [$MSGID]"
0270 xadmin mqdm -n 1 -i 100 -m $MSGID
0271 
0272 echo "Testing [xadmin mqdm] UBF buffer"
0273 
0274 if [ "X`xadmin mqdm -n 1 -i 100 -m $MSGID | grep 'TEST HELLO'`" ==  "X" ]; then
0275     echo "Missing 'TEST HELLO' in mqdm"
0276     go_out 1
0277 fi
0278 
0279 #
0280 # Carray tests..
0281 #
0282 
0283 echo "Adding carray message to BINQ"
0284 (./atmiclt28 carr 2>&1) >> ./atmiclt-dom1.log
0285 RET=$?
0286 
0287 if [[ "X$RET" != "X0" ]]; then
0288     go_out $RET
0289 fi
0290 
0291 xadmin mqlm -s MYSPACE -q BINQ
0292 
0293 MSGID=`xadmin mqlm -s MYSPACE -q BINQ  | tail -1  | awk '{print($3)}'`
0294 
0295 echo "Testing [xadmin mqdm] CARRY buffer - $MSGID"
0296 xadmin mqdm -n 1 -i 100 -m $MSGID
0297 
0298 # Test the dump output in shell
0299 if [ "X`xadmin mqdm -n 1 -i 100 -m $MSGID | grep '00 01 02 03 04 05 06 07'`" ==  "X" ]; then
0300     echo "Missing '00 01 02 03 04 05 06 07' in mqdm for CARRAY"
0301     go_out 1
0302 fi
0303 
0304 echo "Testing [xadmin mqrm]"
0305 
0306 xadmin mqrm -n 1 -i 100 -m $MSGID
0307 
0308 echo "****************************************"
0309 xadmin mqlm -s MYSPACE -q BINQ
0310 echo "****************************************"
0311 
0312 xadmin mqlm -s MYSPACE -q BINQ | wc
0313 
0314 if [ "X`xadmin mqlm -s MYSPACE -q BINQ | wc | awk '{print($1)}'`" !=  "X0" ]; then
0315     echo "Message not removed from BINQ"
0316     go_out 1
0317 fi
0318 
0319 echo "Testing [xadmin mqch]"
0320 xadmin mqch -n 1 -i 100 -q MEMQ,svcnm=-,autoq=n,tries=10,waitinit=1,waitretry=1,waitretryinc=0,waitretrymax=1
0321 xadmin mqlc
0322 
0323 # List q config
0324 
0325 if [ "X`xadmin mqlc | grep MEMQ`" ==  "X" ]; then
0326     echo "Missing 'MEMQ' in mqch output"
0327     go_out 1
0328 fi
0329 
0330 echo "Testing [xadmin mqmv]"
0331 
0332 echo "Adding carray message to BINQ"
0333 (./atmiclt28 carr 2>&1) >> ./atmiclt-dom1.log
0334 if [[ "X$RET" != "X0" ]]; then
0335     go_out $RET
0336 fi
0337 
0338 echo "Move the message to another Q"
0339 MSGID=`xadmin mqlm -s MYSPACE -q BINQ  | tail -1  | awk '{print($3)}'`
0340 
0341 xadmin mqmv -n 1 -i 100 -m $MSGID -s MYSPACE -q BINQ2
0342 
0343 MSGID=`xadmin mqlm -s MYSPACE -q BINQ2  | tail -1  | awk '{print($3)}'`
0344 
0345 xadmin mqdm -n 1 -i 100 -m $MSGID
0346 
0347 if [ "X`xadmin mqdm -n 1 -i 100 -m $MSGID | grep '00 01 02 03 04 05 06 07'`" ==  "X" ]; then
0348     echo "Missing '00 01 02 03 04 05 06 07' in mqdm for CARRAY"
0349     go_out 1
0350 fi
0351 
0352 if [ "X`xadmin mqdm -n 1 -i 100 -m $MSGID | grep 'TESTREPLY'`" ==  "X" ]; then
0353     echo "Missing 'TESTREPLY' in mqdm for mqmv"
0354     go_out 1
0355 fi
0356 
0357 if [ "X`xadmin mqdm -n 1 -i 100 -m $MSGID | grep 'TESTFAIL'`" ==  "X" ]; then
0358     echo "Missing 'TESTFAIL' in mqdm for mqmv"
0359     go_out 1
0360 fi
0361 
0362 # remove off the message...
0363 xadmin mqrm -n 1 -i 100 -m $MSGID
0364 
0365 ################################################################################
0366 #
0367 # Continue with system tests...
0368 #
0369 ################################################################################
0370 
0371 echo "Running: dequeue (abort)"
0372 (./atmiclt28 deqa 2>&1) >> ./atmiclt-dom1.log
0373 RET=$?
0374 
0375 if [[ "X$RET" != "X0" ]]; then
0376     go_out $RET
0377 fi
0378 
0379 sleep 10
0380 
0381 clean_logs;
0382 
0383 echo "Running: dequeue (commit)"
0384 (./atmiclt28 deqc 2>&1) >> ./atmiclt-dom1.log
0385 RET=$?
0386 
0387 if [[ "X$RET" != "X0" ]]; then
0388     go_out $RET
0389 fi
0390 
0391 test_empty_qspace;
0392 
0393 echo "Running: dequeue - empty"
0394 (./atmiclt28 deqe 2>&1) >> ./atmiclt-dom1.log
0395 RET=$?
0396 
0397 if [[ "X$RET" != "X0" ]]; then
0398     go_out $RET
0399 fi
0400 
0401 test_empty_qspace;
0402 
0403 echo "Running: dequeue - empty (no abort)"
0404 (./atmiclt28 noabort 2>&1) >> ./atmiclt-dom1.log
0405 RET=$?
0406 
0407 if [[ "X$RET" != "X0" ]]; then
0408     go_out $RET
0409 fi
0410 
0411 test_empty_qspace;
0412 
0413 echo "Running: msgid tests"
0414 (./atmiclt28 msgid 2>&1) >> ./atmiclt-dom1.log
0415 RET=$?
0416 
0417 if [[ "X$RET" != "X0" ]]; then
0418     go_out $RET
0419 fi
0420 
0421 test_empty_qspace;
0422 
0423 echo "Running: cortran tests"
0424 (./atmiclt28 cortran 2>&1) >> ./atmiclt-dom1.log
0425 RET=$?
0426 
0427 if [[ "X$RET" != "X0" ]]; then
0428     go_out $RET
0429 fi
0430 
0431 test_empty_qspace;
0432 
0433 echo "Running: corauto tests"
0434 (./atmiclt28 corauto 2>&1) >> ./atmiclt-dom1.log
0435 RET=$?
0436 
0437 if [[ "X$RET" != "X0" ]]; then
0438     go_out $RET
0439 fi
0440 
0441 test_empty_qspace;
0442 
0443 echo "Running: deqdefault tests"
0444 (./atmiclt28 deqdefault 2>&1) >> ./atmiclt-dom1.log
0445 RET=$?
0446 
0447 if [[ "X$RET" != "X0" ]]; then
0448     go_out $RET
0449 fi
0450 
0451 test_empty_qspace;
0452 
0453 echo "Running: corlifo tests"
0454 (./atmiclt28 corlifo 2>&1) >> ./atmiclt-dom1.log
0455 RET=$?
0456 
0457 if [[ "X$RET" != "X0" ]]; then
0458     go_out $RET
0459 fi
0460 
0461 test_empty_qspace;
0462 
0463 echo "Running: corfifo tests"
0464 (./atmiclt28 corfifo 2>&1) >> ./atmiclt-dom1.log
0465 RET=$?
0466 
0467 if [[ "X$RET" != "X0" ]]; then
0468     go_out $RET
0469 fi
0470 
0471 test_empty_qspace;
0472 
0473 # do not use replyq.
0474 echo "Running: Auto queue ok"
0475 (./atmiclt28 autoqnr 2>&1) >> ./atmiclt-dom1.log
0476 RET=$?
0477 
0478 if [[ "X$RET" != "X0" ]]; then
0479     go_out $RET
0480 fi
0481 
0482 test_empty_qspace;
0483 
0484 echo "Running: Auto queue ok + reply q"
0485 (./atmiclt28 autoqok 2>&1) >> ./atmiclt-dom1.log
0486 RET=$?
0487 
0488 if [[ "X$RET" != "X0" ]]; then
0489     go_out $RET
0490 fi
0491 
0492 test_empty_qspace;
0493 
0494 echo "Running: Auto queue dead"
0495 (./atmiclt28 autodeadq 2>&1) >> ./atmiclt-dom1.log
0496 RET=$?
0497 
0498 if [[ "X$RET" != "X0" ]]; then
0499     go_out $RET
0500 fi
0501 
0502 test_empty_qspace;
0503 
0504 echo "Running: random fail for auto"
0505 (./atmiclt28 rndfail 2>&1) >> ./atmiclt-dom1.log
0506 RET=$?
0507 
0508 if [[ "X$RET" != "X0" ]]; then
0509     go_out $RET
0510 fi
0511 
0512 test_empty_qspace;
0513 
0514 echo "LIFO tests..."
0515 
0516 echo "Running: enqueue (LIFO)"
0517 (./atmiclt28 lenq 2>&1) > ./atmiclt-dom1.log
0518 RET=$?
0519 
0520 if [[ "X$RET" != "X0" ]]; then
0521     go_out $RET
0522 fi
0523 
0524 echo ">>> Before restart:"
0525 xadmin mqlc
0526 xadmin mqlq
0527 
0528 echo ">>>> Listing"
0529 ls -l QSPACE1/committed
0530 ls -l QSPACE1/committed | wc
0531 
0532 echo ">>>> LTESTA"
0533 xadmin mqlm -s MYSPACE -q LTESTA
0534 echo ">>>> LTESTB"
0535 xadmin mqlm -s MYSPACE -q LTESTB
0536 echo ">>>> LTESTC"
0537 xadmin mqlm -s MYSPACE -q LTESTC
0538 
0539 xadmin stop -y
0540 sleep 2
0541 xadmin start -y || go_out 1
0542 clean_logs;
0543 
0544 echo ">>> After restart:"
0545 xadmin mqlc
0546 xadmin mqlq
0547 
0548 echo ">>>> Listing"
0549 ls -l QSPACE1/committed
0550 ls -l QSPACE1/committed | wc
0551 
0552 echo ">>>> LTESTA"
0553 xadmin mqlm -s MYSPACE -q LTESTA
0554 echo ">>>> LTESTB"
0555 xadmin mqlm -s MYSPACE -q LTESTB
0556 echo ">>>> LTESTC"
0557 xadmin mqlm -s MYSPACE -q LTESTC
0558 
0559 # Seems like head -1 generates SIGPIPE, as after read of first line it closes the
0560 # or terminates, which triggers xadmin to die, and tmqueue would generate
0561 # TPETIME for tpsend(), as Q is full.
0562 #FIRST=`xadmin mqlm -s MYSPACE -q LTESTA  | head -1  | awk '{print($3)}'`
0563 #echo "First message in Q"
0564 #xadmin mqdm -n 1 -i 100 -m $FIRST
0565 
0566 
0567 LAST=`xadmin mqlm -s MYSPACE -q LTESTA  | tail -1  | awk '{print($3)}'`
0568 
0569 echo "Last message in Q"
0570 xadmin mqdm -n 1 -i 100 -m $LAST
0571 
0572 echo "Running: dequeue (abort) (LIFO)"
0573 (./atmiclt28 ldeqa 2>&1) >> ./atmiclt-dom1.log
0574 RET=$?
0575 
0576 if [[ "X$RET" != "X0" ]]; then
0577     go_out $RET
0578 fi
0579 
0580 sleep 10
0581 
0582 echo "Running: dequeue (commit) (LIFO)"
0583 (./atmiclt28 ldeqc 2>&1) >> ./atmiclt-dom1.log
0584 RET=$?
0585 
0586 if [[ "X$RET" != "X0" ]]; then
0587     go_out $RET
0588 fi
0589 
0590 test_empty_qspace;
0591 
0592 echo "Running: future FIFO (TPQTIME_ABS & TPQTIME_REL) tests"
0593 (./atmiclt28 futfifotrans 2>&1) >> ./atmiclt-dom1.log
0594 RET=$?
0595 
0596 if [[ "X$RET" != "X0" ]]; then
0597     go_out $RET
0598 fi
0599 
0600 test_empty_qspace;
0601 
0602 echo "Running: future LIFO (TPQTIME_ABS & TPQTIME_REL) tests"
0603 (./atmiclt28 futlifotrans 2>&1) >> ./atmiclt-dom1.log
0604 RET=$?
0605 
0606 if [[ "X$RET" != "X0" ]]; then
0607     go_out $RET
0608 fi
0609 
0610 test_empty_qspace;
0611 
0612 echo "Running: future corrid FIFO tests"
0613 (./atmiclt28 futcorfifotrans 2>&1) >> ./atmiclt-dom1.log
0614 RET=$?
0615 
0616 if [[ "X$RET" != "X0" ]]; then
0617     go_out $RET
0618 fi
0619 
0620 test_empty_qspace;
0621 
0622 echo "Running: future corrid LIFO tests"
0623 (./atmiclt28 futcorlifotrans 2>&1) >> ./atmiclt-dom1.log
0624 RET=$?
0625 
0626 if [[ "X$RET" != "X0" ]]; then
0627     go_out $RET
0628 fi
0629 
0630 test_empty_qspace;
0631 
0632 # Catch is there is test error!!!
0633 if [ "X`grep TESTERROR *.log`" != "X" ]; then
0634         echo "Test error detected!"
0635         RET=-2
0636 fi
0637 
0638 if [ "X`grep TPETIME *.log`" != "X" ]; then
0639         echo "There must be no timeouts during tests!"
0640         RET=-2
0641 fi
0642 
0643 
0644 
0645 go_out $RET
0646 
0647 # vim: set ts=4 sw=4 et smartindent: