Changeset 19 for trunk/test/testrun_2.sh


Ignore:
Timestamp:
Feb 12, 2006, 10:49:56 PM (19 years ago)
Author:
rainer
Message:

Rewrite of test suite, checksum for growing logs, fix for minor bug with dead client detection.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/testrun_2.sh

    r1 r19  
    11#! /bin/sh
    22
    3 
    4 # The following two are the ANSI sequences for start and end embolden
    5 case $TERM in
    6 vt*|ansi*|con*|xterm*|linux*|screen*)
    7   S=[1m
    8   E=[m
    9   ;;
    10 *)
    11   S=
    12   E=
    13   ;;
    14 esac
    15 
    16 PW_DIR=`pwd`
    17 
    18 if test x$UID != x; then
    19   TRUST="--with-trusted=0,2,$UID"
    20 else
    21   TRUST="--with-trusted=0,2"
    22 fi
    23 
    24 echo; echo "${S}__ STARTING TEST RUN CLIENT/SERVER __${E}"; echo;
    25 echo Working directory: $PW_DIR
    26 
    27 MAKE=`which gmake`
    28 if test "x$?" = x1 ; then
    29     MAKE="make -s"
    30 else
    31     MAKE=`which gmake | sed -e "s%\([a-z:]\) .*%\1%g"`
    32     if test "x$MAKE" = x; then
    33         MAKE="make -s"
    34     elif test "x$MAKE" = xno; then
    35         MAKE="make -s"
    36     else
    37         if test "x$MAKE" = "xwhich:"; then
    38                 MAKE="make -s"
    39         else
    40                 MAKE="gmake -s"
    41                 gmake -v >/dev/null 2>&1 || MAKE="make -s"
    42         fi
    43     fi
    44 fi
    45 
    46 echo MAKE is $MAKE
    47 echo
    48 
    49 # --with-database=postgresql
    50 # export MYLIB=-L/usr/local/pgsql/lib
    51 # export MYINC=-I/usr/local/pgsql/include
    52 # export LD_LIBRARY_PATH=/usr/local/pgsql/lib
    53 
    54 # --with-database=mysql
    55 # export MYLIB=-L/usr/local/mysql/lib
    56 # export MYINC=-I/usr/local/mysql/include
    57 # export LD_LIBRARY_PATH=/usr/local/mysql/lib
    58 
    59 testrun2 ()
     3LOGFILE="$PW_DIR/.samhain_log"; export LOGFILE
     4RCFILE="$PW_DIR/testrc_2";  export RCFILE
     5
     6
     7do_test_1 () {
     8
     9        [ -z "$verbose" ] || {
     10            echo;
     11            echo "${S}Start Server${E}: ./yule -l info -p none &";
     12            echo;
     13        }
     14        ./yule -l info -p none >/dev/null 2>&1 &
     15        PROC_Y=$!
     16        sleep 5
     17
     18        [ -z "$verbose" ] || {
     19            echo;
     20            echo "${S}Start Client${E}: ./samhain.new -l none -p none -e info -t check";
     21            echo;
     22        }
     23
     24        ./samhain.new -t check -p none -l none -e info --bind-address=127.0.0.1 >/dev/null 2>&1
     25        if test x$? = x0; then
     26            [ -z "$verbose" ] || log_msg_ok    "samhain.new -t check";
     27        else
     28            [ -z "$quiet" ]   && log_msg_fail  "samhain.new -t check";
     29            kill $PROC_Y
     30            return 1
     31        fi
     32
     33        kill $PROC_Y
     34        sleep 5
     35
     36        egrep "START(>|\").*Yule(>|\")" $LOGFILE >/dev/null 2>&1
     37        if [ $? -ne 0 ]; then
     38            [ -z "$verbose" ] || log_msg_fail "Server start";
     39            return 1
     40        fi
     41        egrep "NEW CLIENT" $LOGFILE >/dev/null 2>&1
     42        if [ $? -ne 0 ]; then
     43            [ -z "$verbose" ] || log_msg_fail "Client connect";
     44            return 1
     45        fi
     46        egrep "remote_host.*Checking.*/bin" $LOGFILE >/dev/null 2>&1
     47        if [ $? -ne 0 ]; then
     48            [ -z "$verbose" ] || log_msg_fail "Client file check";
     49            return 1
     50        fi
     51        egrep "remote_host.*EXIT.*Samhain" $LOGFILE >/dev/null 2>&1
     52        if [ $? -ne 0 ]; then
     53            [ -z "$verbose" ] || log_msg_fail "Client exit";
     54            return 1
     55        fi
     56        egrep "EXIT.*Yule.*SIGTERM" $LOGFILE >/dev/null 2>&1
     57        if [ $? -ne 0 ]; then
     58            [ -z "$verbose" ] || log_msg_fail "Server exit";
     59            return 1
     60        fi
     61       
     62
     63        return 0
     64}
     65
     66do_test_2 () {
     67
     68        ORIGINAL="UseSeparateLogs=no"
     69        REPLACEMENT="UseSeparateLogs=yes"
     70        ex $RCFILE <<EOF
     71:%s/$ORIGINAL/$REPLACEMENT/g
     72:wq
     73EOF
     74# :%s is the "ex" substitution command.
     75# :wq is write-and-quit.
     76        [ -z "$verbose" ] || {
     77            echo;
     78            echo "${S}Start Server${E}: ./yule -l info -p none &";
     79            echo;
     80        }
     81
     82        rm -f $LOGFILE
     83
     84        ./yule -l info -p none >/dev/null 2>&1 &
     85        PROC_Y=$!
     86        sleep 5
     87
     88        [ -z "$verbose" ] || {
     89            echo;
     90            echo "${S}Start Client${E}: ./samhain.new -l none -p none -e info -t check";
     91            echo;
     92        }
     93
     94        ./samhain.new -t check -p none -l none -e info --bind-address=127.0.0.1 >/dev/null 2>&1
     95        if test x$? = x0; then
     96            [ -z "$verbose" ] || log_msg_ok    "samhain.new -t check";
     97        else
     98            [ -z "$quiet" ]   && log_msg_fail  "samhain.new -t check";
     99            kill $PROC_Y
     100            return 1
     101        fi
     102
     103        kill $PROC_Y
     104        sleep 5
     105
     106        if [ -f ${LOGFILE}.${SH_LOCALHOST} ]; then
     107            remhost=${SH_LOCALHOST}
     108        else
     109            remhost=`echo $SH_LOCALHOST | sed 's,\..*,,'`
     110        fi
     111        if [ -f ${LOGFILE}.${remhost} ]; then
     112            CLIENTLOG="${LOGFILE}.${remhost}"
     113        else
     114            CLIENTLOG=`ls -1 ${LOGFILE}.* | tail -n 1`
     115        fi
     116
     117        egrep "START(>|\").*Yule(>|\")" $LOGFILE >/dev/null 2>&1
     118        if [ $? -ne 0 ]; then
     119            [ -z "$verbose" ] || log_msg_fail "Server start";
     120            return 1
     121        fi
     122        egrep "NEW CLIENT" $LOGFILE >/dev/null 2>&1
     123        if [ $? -ne 0 ]; then
     124            [ -z "$verbose" ] || log_msg_fail "Client connect";
     125            return 1
     126        fi
     127        egrep "remote_host.*Checking.*/bin" ${CLIENTLOG} >/dev/null 2>&1
     128        if [ $? -ne 0 ]; then
     129            [ -z "$verbose" ] || log_msg_fail "Client file check";
     130            return 1
     131        fi
     132        egrep "remote_host.*EXIT.*Samhain" ${CLIENTLOG} >/dev/null 2>&1
     133        if [ $? -ne 0 ]; then
     134            [ -z "$verbose" ] || log_msg_fail "Client exit";
     135            return 1
     136        fi
     137        egrep "EXIT.*Yule.*SIGTERM" $LOGFILE >/dev/null 2>&1
     138        if [ $? -ne 0 ]; then
     139            [ -z "$verbose" ] || log_msg_fail "Server exit";
     140            return 1
     141        fi
     142       
     143        rm -f ${LOGFILE}.${remhost}
     144        return 0
     145}
     146
     147do_test_3 () {
     148
     149        ORIGINAL_1="ExportSeverity=none"
     150        REPLACEMENT_1="ExportSeverity=mark"
     151        ORIGINAL_2="UseSeparateLogs=yes"
     152        REPLACEMENT_2="UseSeparateLogs=no"
     153        ORIGINAL_3="LogSeverity=none"
     154        REPLACEMENT_3="LogSeverity=debug"
     155        ORIGINAL_4="# SetClientTimeLimit=1800"
     156        REPLACEMENT_4="SetClientTimeLimit=20"
     157        ex $RCFILE <<EOF
     158:%s/${ORIGINAL_1}/${REPLACEMENT_1}/g
     159:%s/${ORIGINAL_2}/${REPLACEMENT_2}/g
     160:%s/${ORIGINAL_3}/${REPLACEMENT_3}/g
     161:%s/${ORIGINAL_4}/${REPLACEMENT_4}/g
     162:wq
     163EOF
     164# :%s is the "ex" substitution command.
     165# :wq is write-and-quit.
     166        [ -z "$verbose" ] || {
     167            echo;
     168            echo "${S}Start Server${E}: ./yule -p none &";
     169            echo;
     170        }
     171
     172        rm -f $LOGFILE
     173
     174        ./yule -p none >/dev/null 2>&1 &
     175        PROC_Y=$!
     176        sleep 5
     177
     178        [ -z "$verbose" ] || {
     179            echo;
     180            echo "${S}Start Client${E}: ./samhain.new -l none -p none -t check";
     181            echo;
     182        }
     183
     184        ./samhain.new -t check -p none -l none --forever --bind-address=127.0.0.1 >/dev/null 2>&1 &
     185        if test x$? = x0; then
     186            PROC_S=$!
     187            # echo "PID is ${PROC_S}"
     188            [ -z "$verbose" ] || log_msg_ok    "samhain.new -t check";
     189            sleep 5
     190            # Redirect the shells (un-)helpful job monitoring messages.
     191            # The 'disown' buildin is not portable.
     192            { kill -9 ${PROC_S}; sleep 40; } >/dev/null 2>&1
     193        else
     194            [ -z "$quiet" ]   && log_msg_fail  "samhain.new -t check";
     195            kill $PROC_Y
     196            return 1
     197        fi
     198
     199        if [ -t 0 ]; then
     200            # enable monitor mode again if interactive
     201            set -m
     202        fi
     203
     204
     205        kill $PROC_Y
     206        sleep 5
     207
     208        egrep "START(>|\").*Yule(>|\")" $LOGFILE >/dev/null 2>&1
     209        if [ $? -ne 0 ]; then
     210            [ -z "$verbose" ] || log_msg_fail "Server start";
     211            return 1
     212        fi
     213        egrep "NEW CLIENT" $LOGFILE >/dev/null 2>&1
     214        if [ $? -ne 0 ]; then
     215            [ -z "$verbose" ] || log_msg_fail "Client connect";
     216            return 1
     217        fi
     218        egrep "remote_host.*File check completed.*" ${LOGFILE} >/dev/null 2>&1
     219        if [ $? -ne 0 ]; then
     220            [ -z "$verbose" ] || log_msg_fail "Client file check";
     221            return 1
     222        fi
     223        egrep "Time limit exceeded" ${LOGFILE} >/dev/null 2>&1
     224        if [ $? -ne 0 ]; then
     225            [ -z "$verbose" ] || log_msg_fail "Client dead detection";
     226            return 1
     227        fi
     228        egrep "EXIT.*Yule.*SIGTERM" $LOGFILE >/dev/null 2>&1
     229        if [ $? -ne 0 ]; then
     230            [ -z "$verbose" ] || log_msg_fail "Server exit";
     231            return 1
     232        fi
     233       
     234        rm -f ${LOGFILE}.${remhost}
     235        return 0
     236}
     237
     238testrun2_internal ()
    60239{
    61         #
    62         # test standalone compilation
    63         #
    64         echo "${S}Building client and server${E}"; echo;
     240        [ -z "$verbose" ] || {
     241            echo;
     242            echo Working directory: $PW_DIR; echo MAKE is $MAKE;
     243            echo;
     244        }
     245        #
     246        #
     247        [ -z "$verbose" ] || { echo; echo "${S}Building client and server${E}"; echo; }
    65248        #
    66249        if test -r "Makefile"; then
     
    68251        fi
    69252        #
    70         ${TOP_SRCDIR}/configure --quiet  $TRUST --enable-network=client  --enable-xml-log --enable-login-watch --prefix=$PW_DIR --localstatedir=$PW_DIR --with-config-file=$PW_DIR/testrc_2  --with-log-file=$PW_DIR/.samhain_log --with-pid-file=$PW_DIR/.samhain_lock --with-data-file=$PW_DIR/.samhain_file --enable-encrypt=2
    71         #
    72         if test x$? = x0; then
    73                 echo "configure completed, exit status 0"; echo;
    74                 $MAKE  > /dev/null
     253        ${TOP_SRCDIR}/configure --quiet  $TRUST --enable-debug --enable-network=client  --enable-xml-log --enable-login-watch --prefix=$PW_DIR --localstatedir=$PW_DIR --with-config-file=$RCFILE  --with-log-file=$LOGFILE --with-pid-file=$PW_DIR/.samhain_lock --with-data-file=$PW_DIR/.samhain_file --enable-encrypt=2
     254        #
     255        if test x$? = x0; then
     256                [ -z "$verbose" ] ||     log_msg_ok "configure...";
     257                $MAKE  > /dev/null 2>>test_log
    75258                if test x$? = x0; then
    76                     echo "$MAKE completed, exit status $?"; echo;
     259                    [ -z "$verbose" ] || log_msg_ok "make...";
    77260                else
    78                     echo "${S}ERROR:${E} make failed, exit status $?"; echo;
    79                     exit
     261                    [ -z "$quiet" ] &&   log_msg_fail "make...";
     262                    return 1
    80263                fi
    81264
    82265        else
    83                 echo "${S}ERROR:${E} configure failed, exit status $?"; echo;
    84                 exit
     266                [ -z "$quiet" ] &&       log_msg_fail "configure...";
     267                return 1
    85268        fi
    86269
    87270        # save binary and build server
    88271        #
    89         cp samhain samhain.build
    90         make clean
    91 
    92         ${TOP_SRCDIR}/configure --quiet  $TRUST --enable-debug --enable-network=server  --enable-xml-log --enable-login-watch --prefix=$PW_DIR --localstatedir=$PW_DIR --with-config-file=$PW_DIR/testrc_2  --with-log-file=$PW_DIR/.samhain_log --with-pid-file=$PW_DIR/.samhain_lock --with-data-file=$PW_DIR/.samhain_file --enable-identity=rainer --enable-encrypt=2
    93         #
    94         if test x$? = x0; then
    95                 echo "configure completed, exit status 0"; echo;
    96                 $MAKE  > /dev/null
     272        cp samhain samhain.build || return 1
     273        make clean >/dev/null || return 1
     274
     275        ${TOP_SRCDIR}/configure --quiet  $TRUST --enable-debug --enable-network=server  --enable-xml-log --enable-login-watch --prefix=$PW_DIR --localstatedir=$PW_DIR --with-config-file=$RCFILE  --with-log-file=$LOGFILE --with-pid-file=$PW_DIR/.samhain_lock --with-data-file=$PW_DIR/.samhain_file --enable-identity=rainer --enable-encrypt=2
     276        #
     277        if test x$? = x0; then
     278                [ -z "$verbose" ] ||     log_msg_ok "configure...";
     279                $MAKE  > /dev/null 2>>test_log
    97280                if test x$? = x0; then
    98                     echo "$MAKE completed, exit status $?"; echo;
     281                    [ -z "$verbose" ] || log_msg_ok "make...";
    99282                else
    100                     echo "${S}ERROR:${E} make failed, exit status $?"; echo;
    101                     exit
     283                    [ -z "$quiet" ] &&   log_msg_fail "make...";
     284                    return 1
    102285                fi
    103286
    104287        else
    105                 echo "${S}ERROR:${E} configure failed, exit status $?"; echo;
    106                 exit
    107         fi
     288                [ -z "$quiet" ] &&       log_msg_fail "configure...";
     289                return 1
     290        fi
     291
    108292
    109293        #####################################################################
    110294        #
    111295        #
    112         echo "${S}Initialize database${E}"; echo;
    113 
    114296        rm -f ./.samhain_file
    115297        rm -f ./.samhain_log
     
    118300        cp ${SCRIPTDIR}/testrc_2.in testrc_2
    119301
    120         echo "./samhain.build -t init"
    121         ./samhain.build -t init
    122 
    123         SHINI=$?
     302        ./samhain.build -t init -p none
     303
     304        if test x$? = x0; then
     305            [ -z "$verbose" ] || log_msg_ok    "init...";
     306        else
     307            [ -z "$quiet" ]   && log_msg_fail  "init...";
     308            return 1
     309        fi
    124310
    125311        # Create a password
     
    127313        SHPW=`./yule -G`
    128314        if test x"$SHPW" = x; then
    129             echo "password not generated -- aborting"
    130             exit 1
     315            [ -z "$quiet" ]   && log_msg_fail "password not generated -- aborting"
     316            return 1
    131317        fi
    132318
    133319        # Set in client
    134320
    135         echo "./samhain_setpwd samhain.build new $SHPW"
    136         ./samhain_setpwd samhain.build new $SHPW
    137 
    138         mv samhain.build.new  samhain.new
     321        ./samhain_setpwd samhain.build new $SHPW >/dev/null
     322
     323        if test x$? = x0; then
     324            [ -z "$verbose" ] || log_msg_ok    "./samhain_setpwd samhain.build new $SHPW";
     325        else
     326            [ -z "$quiet" ]   && log_msg_fail  "./samhain_setpwd samhain.build new $SHPW";
     327            return 1
     328        fi
     329
     330        mv samhain.build.new  samhain.new || return 1
    139331
    140332        rm -f ./.samhain_log.*
     
    143335        SHCLT=`./yule -P $SHPW | sed s%HOSTNAME%${SH_LOCALHOST}%`
    144336
     337        if test x$? = x0; then
     338            [ -z "$verbose" ] || log_msg_ok    "yule -P $SHPW";
     339        else
     340            [ -z "$quiet" ]   && log_msg_fail  "yule -P $SHPW";
     341            return 1
     342        fi
     343
    145344        echo $SHCLT >> testrc_2
    146345
    147         if test x$SHINI = x0; then
    148                 echo; echo "${S}Start Server${E}: ./yule  &"; echo;
    149                 ./yule -l info &
    150                 PROC_Y=$!
    151                 sleep 5
    152 
    153                 echo; echo "${S}Start Client${E}: ./samhain.new -l none -p none -e info -t check";
    154 
    155                 ./samhain.new -t check -p none -l none -e info
    156                 if test x$? = x0; then
    157                     echo "${S}check completed${E}"
    158                 else
    159                     echo "${S}ERROR:${E} -- check -- failed, exit status $?"
    160                     echo
    161                     kill $PROC_Y
    162                     exit
    163                 fi
    164 
    165                 kill $PROC_Y
    166                 sleep 5
    167         else
    168                 echo "${S}ERROR:${E} -- init -- failed, exit status $SHINI";
    169                 echo;
    170                 exit
    171         fi
    172            
    173 }
    174 
    175     if test x$1 = x; then
    176         echo
    177         echo "Please provide the local hostname as argument."
    178         echo
    179         exit 8
     346        do_test_1
     347        if [ $? -eq 0 ]; then
     348            [ -z "$quiet" ] && log_ok   1 ${MAXTEST} "Client logging";
     349        else
     350            [ -z "$quiet" ] && log_fail 1 ${MAXTEST} "Client logging";
     351        fi
     352
     353        do_test_2
     354        if [ $? -eq 0 ]; then
     355            [ -z "$quiet" ] && log_ok   2 ${MAXTEST} "Client logging, seperate logfiles";
     356        else
     357            [ -z "$quiet" ] && log_fail 2 ${MAXTEST} "Client logging, seperate logfiles";
     358        fi
     359
     360        do_test_3
     361        if [ $? -eq 0 ]; then
     362            [ -z "$quiet" ] && log_ok   3 ${MAXTEST} "Dead client detection";
     363        else
     364            [ -z "$quiet" ] && log_fail 3 ${MAXTEST} "Dead client detection";
     365        fi
     366
     367        return $?
     368}
     369
     370MAXTEST=3; export MAXTEST
     371
     372testrun2 ()
     373{
     374    log_start "RUN CLIENT/SERVER"
     375
     376    if [ x"$1" = x ]; then
     377        [ -z "$quiet" ] && log_msg_fail "Missing hostname"
    180378    fi
    181 
     379    #
    182380    SH_LOCALHOST=$1; export SH_LOCALHOST
    183 
    184     testrun2
    185 
    186 
    187 echo; echo "${S}__ END TEST RUN CLIENT/SERVER __${E}"; echo;
    188 
    189 exit
    190 
     381    #
     382    testrun2_internal
     383    #
     384    log_end "RUN CLIENT/SERVER"
     385
     386    return 0
     387}
     388
Note: See TracChangeset for help on using the changeset viewer.