#
#------------------------------------------------------------------
# Copyright (c) 2011-2014 by Cisco Systems, Inc.
#------------------------------------------------------------------
#------------------------------------------------------------
# simple script to execute all of our baseline UT tests.
#------------------------------------------------------------
#

#start the success and total counters
TOTAL_TESTS=0
SUCCESS=0

#start a couple servers
echo "Starting UT servers..."
lw_ut1_v2 -s &
lw_ut3_v2 -s &
lw_ut18_v2 -s &
lwt -p &
#lw_ut11 -s &
#lw_ut9_v2 -s &
echo "Done starting UT servers. Going to sleep for 10 seconds."
sleep 10

#start the tests
#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "starting the UT clients."
echo "executing lw_ut1_v2 -c (basic ping across processes)"
if lw_ut1_v2 -c; then 
    let "SUCCESS += 1"
    echo "lw_ut1_v2 -c SUCCESS"
else
    echo "lw_ut1_v2 -c FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "executing lw_ut3_v2 -c (multiple threads test a server with async and sync)"
if lw_ut3_v2 -c; then 
    let "SUCCESS += 1"
    echo "lw_ut3_v2 -c SUCCESS"
else
    echo "lw_ut3_v2 -c FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "executing lw_ut18_v2 -c -t 5 -o 128 (multiple threads test a server with async and sync)"
if lw_ut18_v2 -c -t 5 -o 128; then 
    let "SUCCESS += 1"
    echo "lw_ut18_v2 -c -t 5 -o 128 SUCCESS"
else
    echo "lw_ut18_v2 -c -t 5 -o 128 FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
sleep 20 && lw_ut1_v2_citc -x -p /cisco/ut1_citc &
echo "executing lw_ut1_v2_citc -s (basic ping within a process)"
if lw_ut1_v2_citc -s -p /cisco/ut1_citc; then 
    let "SUCCESS += 1"
    echo "lw_ut1_v2_citc -s SUCCESS"
else
    echo "lw_ut1_v2_citc -s FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
sleep 20 && lw_ut1_v2_access -x -p /cisco/ut1_access &
echo "executing lw_ut1_v2_access -s (basic ping, tests access APIs)"
if lw_ut1_v2_access -s -p /cisco/ut1_access; then 
    echo "lw_ut1_v2_access -s SUCCESS"
    let "SUCCESS += 1"
else
    echo "lw_ut1_v2_access -s FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
sleep 20 && lw_ut1_v2_citc_rw -x -p /cisco/ut1_rw &
echo "executing lw_ut1_v2_citc_rw -s (basic ping, tests read + write APIs)"
if lw_ut1_v2_citc_rw -s -p /cisco/ut1_rw; then 
    echo "lw_ut1_v2_citc_rw -s SUCCESS"
    let "SUCCESS += 1"
else
    echo "lw_ut1_v2_citc_rw -s FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
sleep 40 && lw_ut1_v2_citc_time -x -p /cisco/ut1_time &
echo "executing lw_ut1_v2_citc_time -s (basic ping, with a deliberate timeout)"
if lw_ut1_v2_citc_time -s -p /cisco/ut1_time; then 
    echo "lw_ut1_v2_citc_time -s SUCCESS"
    let "SUCCESS += 1"
else
    echo "lw_ut1_v2_citc_time -s FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "executing lw_ut16_v2 -s (multiple threads bombard a server with msg_sends, within a process)"
if lw_ut16_v2 -s; then 
    echo "lw_ut16_v2 -s SUCCESS"
    let "SUCCESS += 1"
else
    echo "lw_ut16_v2 -s FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "executing lw_ut16_v2 -a (multiple threads bombard a server with msg_send_async, within a process)"
if lw_ut16_v2 -s -a; then 
    echo "lw_ut16_v2 -a SUCCESS"
    let "SUCCESS += 1"
else
    echo "lw_ut16_v2 -a FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
#let "TOTAL_TESTS += 1"
#echo "executing lw_ut11 -c (send a close request to a channel)"
#if lw_ut11 -c ; then 
#    echo "lw_ut11 -c SUCCESS"
#    let "SUCCESS += 1"
#else
#    echo "lw_ut11 -c FAILED"
#fi
#------------------------------------------------------------

#------------------------------------------------------------
#let "TOTAL_TESTS += 1"
#echo "executing lw_ut9_v2 -c (send a close request to a channel)"
#if lw_ut9_v2 -c ; then 
#    echo "lw_ut9_v2 -c SUCCESS"
#    let "SUCCESS += 1"
#else
#    echo "lw_ut9_v2 -c FAILED"
#fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "executing lw_ut14_v2 -s -c -b -n 10 -T 0 (multiple threads bombard a threadpool server, within a process)"
if lw_ut14_v2 -s -c -b -n 10 -T 0 -r; then 
    echo "lw_ut14 -s -c -b -n 10 -T 0 -r SUCCESS"
    let "SUCCESS += 1"
else
    echo "lw_ut14 -s -c -n 10 -T 0 FAILED"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "Checking how many processes are running...."
PROCSRUN=`ps -ef | wc -l`
if [ $PROCSRUN -ge 149 ]; then 
    echo "procs running is at least 150 ($PROCSRUN) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "not enough procs are running ($PROCSRUN) - FAILURE"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "Checking highest boot level...."
SYSMGR_SH=`sysmgr_show -b | awk 'BEGIN {level=0} /s ..[1234567890]/ { if ($3 > level) {level = $3}} END {if (level >= 90) {printf("highest level: %d SUCCESS\n", level)} else {printf("highest level: %d FAILURE\n", level)}}'`
if [ `echo $SYSMGR_SH | grep SUCCESS | wc -l` \> 0 ]; then
    let "SUCCESS += 1"
fi
echo $SYSMGR_SH
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "making sure all sysdb processes are running..."
SYSDB_PROCS_RUNNING=`ps -ef | grep sysdb | egrep -v grep | wc -l`
if [ $SYSDB_PROCS_RUNNING -ge 3 ]; then
    echo "enough are running ($SYSDB_PROCS_RUNNING) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "not enough are running ($SYSDB_PROCS_RUNNING) - FAILURE"
fi
#------------------------------------------------------------

#------------------------------------------------------------
#let "TOTAL_TESTS += 1"
#echo "Making sure 4 admin plane sysdb groups are present..."
#GSP_SH_A=`gsp_show -a | grep sysdb | wc -l`
#if [ $GSP_SH_A -ge 3 ]; then
#    echo "4 admin plane sysdb groups are present- SUCCESS"
#    let "SUCCESS += 1"
#else
#    echo "not enough admin plane sysdb groups are present- FAILURE"
#fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "Making sure msg flow is happening through gsp_show_api_stats..."
GSP_SH=`gsp_show_api_stats | grep Recv | awk 'BEGIN {failure=0} {if ($3 == 0) {printf("%s has ZERO received- FAILURE\n", $1); failure=failure+1}} END {if (failure==0) {printf("msg flow is happening- SUCCESS\n")}}'`
if [ `echo $GSP_SH | grep SUCCESS | wc -l` \> 0 ]; then
    let "SUCCESS += 1"
fi
echo $GSP_SH
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "Making sure LR sydb groups are up..."
SYSDB_LR_GROUPS=`gsp_show -l | grep sysdb | wc -l`
if [ $SYSDB_LR_GROUPS -ge 5 ]; then
    echo "enough sysdb groups are up ($SYSDB_LR_GROUPS) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "not enough sysdb groups are up ($SYSDB_LR_GROUPS) - FAILURE"
fi    
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "testing msg_read_test..."
if msg_read_test; then 
    echo "msg_read_test passed - SUCCESS"
    let "SUCCESS += 1"
else
    echo "msg_read_test - FAILURE"
fi    
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "testing multi_thread_conn..."
if msg_read_test; then 
    echo "multi_thread_conn passed - SUCCESS"
    let "SUCCESS += 1"
else
    echo "multi_thread_conn - FAILURE"
fi    
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "testing lwt..."
if lwt -s 1024 -t -g disc; then 
    echo "lwt passed - SUCCESS"
    let "SUCCESS += 1"
else
    echo "lwt - FAILURE"
fi    
#------------------------------------------------------------

echo "************************"
echo "$SUCCESS of $TOTAL_TESTS PASS"
echo "************************"
