Back to home page

Enduro/X

 
 

    


0001 #!/bin/bash
0002 ##
0003 ## @brief Test buildserver, buildclient and buildtms - test launcher
0004 ##  needs to think what would happen if in the same group we run null switch
0005 ##  and then server will join to real tran.
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 TESTNAME="test071_buildtools"
0038 
0039 PWD=`pwd`
0040 if [ `echo $PWD | grep $TESTNAME ` ]; then
0041     # Do nothing 
0042     echo > /dev/null
0043 else
0044     # started from parent folder
0045     pushd .
0046     echo "Doing cd"
0047     cd $TESTNAME
0048 fi;
0049 
0050 . ../testenv.sh
0051 
0052 export TESTDIR="$NDRX_APPHOME/atmitest/$TESTNAME"
0053 export NDRX_ULOG=$TESTDIR
0054 export PATH=$PATH:$TESTDIR
0055 export NDRX_SILENT=Y
0056 
0057 # fallback to default compiler
0058 if [ "X$CC" == "X" ]; then
0059     export CC=cc
0060 fi
0061 
0062 export NDRX_TOUT=10
0063 
0064 #
0065 # Domain 1 - here client will live
0066 #
0067 set_dom1() {
0068     echo "Setting domain 1"
0069     . ../dom1.sh
0070     export NDRX_CONFIG=$TESTDIR/ndrxconfig-dom1.xml
0071     export NDRX_DMNLOG=$TESTDIR/ndrxd-dom1.log
0072     export NDRX_LOG=$TESTDIR/ndrx-dom1.log
0073     export NDRX_DEBUG_CONF=$TESTDIR/debug-dom1.conf
0074 
0075     NDRX_EXT=so
0076     if [ "$(uname)" == "Darwin" ]; then
0077         NDRX_EXT=dylib
0078     fi
0079 
0080     # Configure XA Driver
0081     # Driver library will be 
0082     # this will be default 1 group...
0083     export NDRX_XA_RES_ID=1
0084     export NDRX_XA_OPEN_STR=-
0085     export NDRX_XA_CLOSE_STR=$NDRX_XA_OPEN_STR
0086     export NDRX_XA_DRIVERLIB=../../xadrv/tms/libndrxxatmsx.$NDRX_EXT
0087     export NDRX_XA_RMLIB=-
0088 
0089     echo "Driver: $NDRX_XA_DRIVERLIB"
0090     echo "RM: $NDRX_XA_RMLIB"
0091 
0092     export NDRX_XA_LAZY_INIT=0
0093 
0094 }
0095 
0096 #
0097 # Generic exit function
0098 #
0099 function go_out {
0100     echo "Test exiting with: $1"
0101     
0102     set_dom1;
0103     xadmin stop -y
0104     xadmin down -y 2>&1 2>/dev/null
0105 
0106     # If some alive stuff left...
0107     xadmin killall atmiclt71
0108 
0109     popd 2>/dev/null
0110     exit $1
0111 }
0112 
0113 rm *.log 2>/dev/null
0114 rm ULOG* 2>/dev/null
0115 
0116 UNAME=`uname -s`
0117 
0118 
0119 function comp_version { echo "$@" | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }'; }
0120 #
0121 # Support #612 test c++ support
0122 #
0123 for TEST_COMP in "cc" "c++"; do
0124 
0125 #
0126 # if there was previous run...
0127 #
0128 xadmin stop -y
0129 xadmin down -y 2>&1 2>/dev/null
0130 
0131 rm -f tmstest atmi.sv71_dum atmi.sv71 atmi.sv71def atmi.sv71thr atmi.sv71nthr atmi.sv71err atmi.sv71err2 atmiclt71err atmiclt71 atmiclt71dflt atmiclt71_txn 2>/dev/null
0132 
0133 # must have flags
0134 COMPFLAGS=""
0135 
0136 if [ $TEST_COMP == "c++" ]; then
0137 
0138     if [ "$UNAME" != "Linux" ]; then
0139         echo "c++ Only available for linux (thus done)"
0140         go_out 0
0141     fi
0142 
0143     # detect compiler version
0144     if [ $(comp_version `gcc --version | awk '/gcc/ {print $(NF-1)}'`) -ge $(comp_version "4.3.4") ]; then
0145         COMPFLAGS="-Wno-write-strings"
0146     fi
0147 
0148     echo "Switching to C++"
0149     export CC=c++
0150 
0151 fi
0152 
0153 ###############################################################################
0154 echo "Configure environment..."
0155 ###############################################################################
0156 
0157 # Additional, application specific
0158 ADDFLAGS=""
0159 #
0160 # export the library path.
0161 #
0162 case $UNAME in
0163 
0164   AIX)
0165     # check compiler, we have a set of things required for each compiler to actually build the binary
0166     $CC -qversion 2>/dev/null
0167     RET=$?
0168     export OBJECT_MODE=64
0169 
0170     if [ "X$RET" == "X0" ]; then
0171         echo "Xlc compiler..."
0172         COMPFLAGS="-brtl"
0173         ADDFLAGS="-qtls -q64"
0174     else
0175         echo "Default to gcc..."
0176         COMPFLAGS="-Wl,-brtl -maix64"
0177     fi
0178 
0179     ;;
0180   SunOS)
0181         COMPFLAGS="-m64"
0182     ;;
0183 
0184   *)
0185     # default..
0186     ;;
0187 esac
0188 
0189 # Support sanitizer
0190 if [ "X`xadmin pmode | grep '#define NDRX_SANITIZE'`" != "X" ]; then
0191     COMPFLAGS="$COMPFLAGS -fsanitize=address"
0192 fi
0193 
0194 ###############################################################################
0195 echo "Firstly lets build the processes"
0196 ###############################################################################
0197 
0198 export NDRX_SILENT=Y
0199 export NDRX_DEBUG_CONF=$TESTDIR/debug-dom1.conf
0200 export NDRX_HOME=.
0201 export PATH=$PATH:$PWD/../../buildtools
0202 export CFLAGS="-I../../include -L../../libatmi -L../../libubf -L../../tmsrv -L../../libatmisrv -L../../libexthpool -L../../libnstd $COMPFLAGS"
0203 
0204 
0205 echo ""
0206 echo "************************************************************************"
0207 echo "Building tms... (CC: $CC)"
0208 echo "************************************************************************"
0209 buildtms -o tmstest -rTestSw -v
0210 
0211 RET=$?
0212 
0213 if [ "X$RET" != "X0" ]; then
0214     echo "Failed to build tmstest: $RET"
0215     go_out 1
0216 fi
0217 
0218 echo "Build server dummy..."
0219 buildserver -o atmi.sv71_dum -rTestSw -v -f atmisv71_dum.c
0220 
0221 RET=$?
0222 
0223 if [ "X$RET" != "X0" ]; then
0224     echo "Failed to build atmi.sv71_dum: $RET"
0225     go_out 2
0226 fi
0227 
0228 
0229 echo ""
0230 echo "************************************************************************"
0231 echo "Build server..."
0232 echo "************************************************************************"
0233 
0234 buildserver -o atmi.sv71 -rTestSw -a atmisv71_1.c -l atmisv71_2.c -v -f "$ADDFLAGS" \
0235     -s A,B,C:TESTSV -sECHOSV -s:TESTSV -sZ:ECHOSV -f atmisv71_3.c -l atmisv71_4.c \
0236     -s @advertise_file.txt -s:DUMFUNC
0237 
0238 RET=$?
0239 
0240 if [ "X$RET" != "X0" ]; then
0241     echo "Failed to build atmi.sv71: $RET"
0242     go_out 2
0243 fi
0244 
0245 echo ""
0246 echo "************************************************************************"
0247 echo "Build server, default tpsrvinit(), default tpsrvdone()..."
0248 echo "************************************************************************"
0249 
0250 buildserver -o atmi.sv71def -rTestSw -v -f "$ADDFLAGS" -sXX:ECHOSV -f atmisv71_4.c
0251 
0252 RET=$?
0253 
0254 if [ "X$RET" != "X0" ]; then
0255     echo "Failed to build atmi.sv71def: $RET"
0256     go_out 2
0257 fi
0258 
0259 echo ""
0260 echo "************************************************************************"
0261 echo "Build server, default tpsrvinit(), default tpsrvdone()..., threaded"
0262 echo "************************************************************************"
0263 
0264 buildserver -o atmi.sv71thr -rTestSw -t -v -f "$ADDFLAGS" -sWTHR:ECHOSV -f atmisv71_4.c
0265 
0266 RET=$?
0267 
0268 if [ "X$RET" != "X0" ]; then
0269     echo "Failed to build atmi.sv71thr: $RET"
0270     go_out 2
0271 fi
0272 
0273 echo ""
0274 echo "************************************************************************"
0275 echo "Build server, default tpsrvinit(), default tpsrvdone()..., non-threaded"
0276 echo "************************************************************************"
0277 
0278 buildserver -o atmi.sv71nthr -rTestSw -v -f "$ADDFLAGS" -sNTHR:ECHOSV -f atmisv71_4.c
0279 
0280 RET=$?
0281 
0282 if [ "X$RET" != "X0" ]; then
0283     echo "Failed to build atmi.sv71nthr: $RET"
0284     go_out 2
0285 fi
0286 
0287 echo ""
0288 echo "************************************************************************"
0289 echo "Build server... (compile fail)"
0290 echo "************************************************************************"
0291 buildserver -o atmi.sv71err -rTestSw -f atmisv71_X.c -l atmisv71_2.c -v -f "$ADDFLAGS" \
0292     -s A,B,C:TESTSV -sECHOSV -s:TESTSV -sZ:ECHOSV -f atmisv71_3.c -l atmisv71_4.c
0293 
0294 RET=$?
0295 
0296 if [ "X$RET" == "X0" ]; then
0297     echo "atmi.sv71err shall fail (no source): $RET"
0298     go_out 2
0299 fi
0300 
0301 
0302 echo ""
0303 echo "************************************************************************"
0304 echo "Build server... (invalid compiler)"
0305 echo "************************************************************************"
0306 CC_SAVED=$CC
0307 export CC=no_such_compiler
0308 buildserver -o atmi.sv71err2 -rTestSw -f atmisv71_1.c -l atmisv71_2.c -v -f "$ADDFLAGS" \
0309     -s A,B,C:TESTSV -sECHOSV -s:TESTSV -sZ:ECHOSV -f atmisv71_3.c -l atmisv71_4.c
0310 
0311 RET=$?
0312 
0313 if [ "X$RET" == "X0" ]; then
0314     echo "atmi.sv71err2 shall fail (no compiler): $RET"
0315     go_out 2
0316 fi
0317 
0318 export CC=$CC_SAVED
0319 export CFLAGS=""
0320 unset NDRX_HOME
0321 # test the other option...
0322 export NDRX_RMFILE=./udataobj/RM
0323 
0324 echo ""
0325 echo "************************************************************************"
0326 echo "Build client..., No switch..."
0327 echo "************************************************************************"
0328 buildclient -o atmiclt71err -rerrorsw -a atmiclt71_1.c -l atmiclt71_2.c -v -f "$COMPFLAGS $ADDFLAGS" \
0329     -l atmiclt71_3.c -f atmiclt71_4.c \
0330     -f "-I../../include -L../../libatmi -L../../libubf -L../../tmsrv -L../../libatmisrv -L../../libnstd"
0331 RET=$?
0332 
0333 if [ "X$RET" == "X0" ]; then
0334     echo "Build atmiclt71err shall fail, but was OK"
0335     go_out 2
0336 fi
0337 
0338 echo ""
0339 echo "************************************************************************"
0340 echo "Build client..., Build OK"
0341 echo "************************************************************************"
0342 buildclient -o atmiclt71 -rnullsw -f atmiclt71_1.c -l atmiclt71_2.c -v -f "$COMPFLAGS $ADDFLAGS" \
0343     -l atmiclt71_3.c -f atmiclt71_4.c \
0344     -f "-I../../include -L../../libatmi -L../../libubf -L../../libatmiclt -L../../libnstd"
0345 RET=$?
0346 
0347 if [ "X$RET" != "X0" ]; then
0348     echo "Failed to build atmiclt71: $RET"
0349     go_out 2
0350 fi
0351 
0352 echo ""
0353 echo "************************************************************************"
0354 echo "Build client default sw..., Build OK"
0355 echo "************************************************************************"
0356 buildclient -o atmiclt71dflt -f atmiclt71_1.c -l atmiclt71_2.c -v -f "$COMPFLAGS $ADDFLAGS" \
0357     -l atmiclt71_3.c -f atmiclt71_4.c \
0358     -f "-I../../include -L../../libatmi -L../../libubf -L../../libnstd -L ../../libatmiclt"
0359 RET=$?
0360 
0361 if [ "X$RET" != "X0" ]; then
0362     echo "Failed to build atmiclt71: $RET"
0363     go_out 2
0364 fi
0365 
0366 echo ""
0367 echo "************************************************************************"
0368 echo "Build client, working switch, Build OK"
0369 echo "************************************************************************"
0370 buildclient -o atmiclt71_txn -a atmiclt71_txn.c -v -r TestSw -f "$COMPFLAGS $ADDFLAGS" \
0371     -f "-I../../include -L../../libatmi -L../../libubf -L../../libnstd -L ../../libatmiclt"
0372 RET=$?
0373 
0374 if [ "X$RET" != "X0" ]; then
0375     echo "Failed to build atmiclt71_txn: $RET"
0376     go_out 2
0377 fi
0378 
0379 ###############################################################################
0380 echo "Now execute them..."
0381 ###############################################################################
0382 
0383 SETLIBPATH="$PWD/../../libatmi:$PWD/../../libubf:$PWD/../../tmsrv:$PWD/../../libatmisrv:$PWD/../../libnstd:$PWD/../../libatmiclt:$PWD/../test021_xafull:$PWD/../../libps:$PWD/../../libpsstdlib"
0384 
0385 #
0386 # export the library path.
0387 #
0388 case $UNAME in
0389 
0390   Darwin)
0391     export DYLD_LIBRARY_PATH=$SETLIBPATH
0392     ;;
0393 
0394   AIX)
0395     #export LIBPATH=$LIBPATH:$SETLIBPATH?
0396     # check compiler, we have a set of things required for each compiler to actually build the binary
0397     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SETLIBPATH
0398     ;;
0399 
0400   *)
0401     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SETLIBPATH
0402     echo "LIBPATH: [$LD_LIBRARY_PATH]"
0403     ;;
0404 esac
0405 
0406 
0407 # prepare folders
0408 rm -rf $TESTDIR/RM1 2>/dev/null
0409 rm -rf $TESTDIR/RM2 2>/dev/null
0410 
0411 #
0412 # Note RM1 is NULL group
0413 # RM2 is test switch
0414 #
0415 
0416 mkdir $TESTDIR/RM1
0417 mkdir $TESTDIR/RM2
0418 
0419 mkdir $TESTDIR/RM2/active
0420 mkdir $TESTDIR/RM2/prepared
0421 mkdir $TESTDIR/RM2/committed
0422 mkdir $TESTDIR/RM2/aborted
0423 export NDRX_TEST_RM_DIR=$TESTDIR/RM2
0424 
0425 set_dom1;
0426 xadmin down -y
0427 xadmin start -y || go_out 1
0428 
0429 RET=0
0430 
0431 xadmin psc
0432 xadmin ppm
0433 
0434 CNT=`xadmin psc | grep ECHO2SV | wc | awk '{print $1}'`
0435 if [ $CNT -ne 1 ]; then
0436     echo "Invalid ECHO2SV count!: $CNT"
0437     go_out -10
0438 fi
0439 
0440 CNT=`xadmin psc | grep FUNCALIAS | wc | awk '{print $1}'`
0441 if [ $CNT -ne 1 ]; then
0442     echo "Invalid FUNCALIAS count!: $CNT"
0443     go_out -11
0444 fi
0445 
0446 echo Run off binaries...""
0447 
0448 (./atmiclt71 2>&1) > ./atmiclt-dom1.log
0449 RET=$?
0450 
0451 echo "Execute atmiclt71..."
0452 if [[ "X$RET" != "X0" ]]; then
0453     go_out $RET
0454 fi
0455 
0456 echo "Execute atmiclt71dflt..."
0457 (./atmiclt71dflt 2>&1) > ./atmiclt-dom1_dlft.log
0458 RET=$?
0459 
0460 if [[ "X$RET" != "X0" ]]; then
0461     go_out $RET
0462 fi
0463 
0464 echo "Execute atmiclt71_txn..."
0465 
0466 # start in 2nd group
0467 (NDRX_XA_RES_ID=2 ./atmiclt71_txn 2>&1) > ./atmiclt71_txn.log
0468 RET=$?
0469 
0470 if [[ "X$RET" != "X0" ]]; then
0471     echo "Failed to run atmiclt71_txn: $RET"
0472     go_out $RET
0473 fi
0474 
0475 echo "Checking the committed record count..."
0476 CNT=`ls -1 RM2/committed/ | wc | awk '{print $1}'`
0477 
0478 if [ $CNT -ne 1633 ]; then
0479     echo "1633 transactions must be committed, but got: $CNT"
0480     go_out -10
0481 fi
0482 
0483 # 33 of them shall be clients...
0484 CNT=`grep 'CLT' RM2/committed/* | wc | awk '{print $1}'`
0485 
0486 if [ $CNT -ne 33 ]; then
0487     echo "CLT 33 not found: $CNT"
0488     go_out -1
0489 fi
0490 
0491 if [ -f ./RM2/TRN-* ]; then
0492     echo "Transaction must be completed!"
0493     go_out -11
0494 fi
0495 
0496 
0497 #
0498 # that that TX interface was processed correctly as specification says
0499 # open and close.
0500 #
0501 xadmin stop -s atmi.sv71def
0502 
0503 
0504 # the api must be open
0505 TXRES=`grep "tx_open: TX_OK" atmi.sv71def-dom1.log`
0506 
0507 if [ "X$TXRES" == "X" ]; then
0508     echo "'tx_open: TX_OK' not found in atmi.sv71def-dom1.log"
0509     go_out -12
0510 fi
0511 
0512 # the api must be closed
0513 TXRES=`grep "tx_close: TX_OK" atmi.sv71def-dom1.log`
0514 
0515 if [ "X$TXRES" == "X" ]; then
0516     echo "'tx_close: TX_OK' not found in atmi.sv71def-dom1.log"
0517     go_out -12
0518 fi
0519 
0520 # Check that threaded server services are booted
0521 CNT=`xadmin psc | grep WTHR| wc | awk '{print $1}'`
0522 if [ $CNT -ne 1 ]; then
0523     echo "Invalid WTHR (threaded server count) shall be 1!: $CNT"
0524     go_out -13
0525 fi
0526 
0527 # Server shall be booted in single-thread mode
0528 CNT=`xadmin psc | grep NTHR| wc | awk '{print $1}'`
0529 if [ $CNT -ne 1 ]; then
0530     echo "Invalid NTHR (non-threaded server count) shall be 1!: $CNT"
0531     go_out -13
0532 fi
0533 
0534 # check ulog contains the msg...
0535 # Check: Buildserver thread option says single-threaded, but MINDISPATCHTHREADS=5 MAXDISPATCHTHREADS=5
0536 if [ "X`grep 'falling back to single thread mode' ULOG*`" == "X" ]; then
0537     echo "Missing single-thread warning!"
0538     go_out -14
0539 fi
0540 
0541 # Catch is there is test error!!!
0542 if [ "X`grep TESTERROR *.log`" != "X" ]; then
0543     echo "Test error detected!"
0544     go_out -20
0545 fi
0546 
0547 
0548 done
0549 
0550 go_out 0
0551 
0552 # vim: set ts=4 sw=4 et smartindent: