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

echo "##############################################################"
echo "###                   RP0 card sanity                      ###"
echo "##############################################################"
echo "Running Sanity on RP0"
echo "Checking if it's ok to start the sanity...."

keeplooping=1;
loopcnt=0;

while [[ $keeplooping -eq 1 ]]; do
    SYSMGR_SH=`sysmgr_show -b | awk 'BEGIN {level=0} /s ..[1234567890]/ { if ($3 > level) {level = $3}} END {if (level >= 999) {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
        echo "The node should be up, start running the sanity scripts..."
        break;
    else
        sleep 10;
        if [ $loopcnt -eq 120 ]; then
            echo "Script timeout, node is not coming up for a long time..."
            exit;
        fi
        let "loopcnt += 1"
    fi
done

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

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
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 "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking highest boot level...."
SYSMGR_SH=`sysmgr_show -b | awk 'BEGIN {level=0} /s ..[1234567890]/ { if ($3 > level) {level = $3}} END {if (level >= 999) {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 "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking PM CMP data base: number of nodes...."
NUM_NODE=`show_cmp -i pm | grep Object | wc -l`
if [ $NUM_NODE -ge 2 ]; then 
    echo "Number of nodes is 2 ($NUM_NODE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "not enough nodes are up ($NUM_NODE) - FAILURE"
fi

let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking SDR_invmgr CMP data base: number of nodes...."
NUM_NODE=`show_cmp -i inv | grep Object | wc -l`
if [ $NUM_NODE -ge 2 ]; then 
    echo "Number of nodes is 2 ($NUM_NODE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "not enough nodes are up ($NUM_NODE) - FAILURE"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking PM CMP data base:  node type...."
NUM_OF_RP=`show_cmp -i pm | grep ": RP" | wc -l`
if [ $NUM_OF_RP -eq 2 ]; then 
    echo "Number of RP is 2 ($NUM_OF_RP) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of RP mismatch ($NUM_OF_RP) - FAILURE"
fi

let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking SDR_invmgr CMP data base:  node type...."
NUM_OF_RP=`show_cmp -i inv | grep ": RP" | wc -l`
if [ $NUM_OF_RP -eq 2 ]; then 
    echo "Number of RP is 2 ($NUM_OF_RP) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of RP mismatch ($NUM_OF_RP) - FAILURE"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking PM CMP data base: Software state...."
NUM_OF_FINAL_STATE=`show_cmp -i pm | grep "^[SW]" | grep FINAL | wc -l`
if [ $NUM_OF_FINAL_STATE -eq  2 ]; then 
    echo "Nodes are in FINAL band ($NUM_OF_FINAL_STATE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Nodes are not in FANAL band ($NUM_OF_FINAL_STATE) - FAILURE"
fi


let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking SDR_invmgr CMP data base: Software state...."
NUM_OF_FINAL_STATE=`show_cmp -i inv | grep "^[SW]" | grep FINAL | wc -l`
if [ $NUM_OF_FINAL_STATE -eq  2 ]; then
    echo "All nodes are in FINAL band ($NUM_OF_FINAL_STATE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Nodes are not in FANAL band ($NUM_OF_FINAL_STATE) - FAILURE"
fi
#------------------------------------------------------------


echo "##############################################################"
echo "###                   RP1 card sanity                      ###"
echo "##############################################################"
echo "Running Sanity on RP1"
echo "Checking if it's ok to start the sanity...."

keeplooping=1;
loopcnt=0;

while [[ $keeplooping -eq 1 ]]; do
    SYSMGR_SH=`sysmgr_show -b -n 8448 | awk 'BEGIN {level=0} /s ..[1234567890]/ { if ($3 > level) {level = $3}} END {if (level >= 999) {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
        echo "The node should be up, start running the sanity scripts..."
        break;
    else
        sleep 10;
        if [ $loopcnt -eq 120 ]; then
            echo "Script timeout, node is not coming up for a long time..."
            exit;
        fi
        let "loopcnt += 1"
    fi
done

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
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 "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking highest boot level...."
SYSMGR_SH=`sysmgr_show -b -n 8448 | awk 'BEGIN {level=0} /s ..[1234567890]/ { if ($3 > level) {level = $3}} END {if (level >= 999) {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 "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking PM CMP data base: number of nodes...."
NUM_NODE=`show_cmp -i pm -N 8448 | grep Object | wc -l`
if [ $NUM_NODE -ge 2 ]; then 
    echo "Number of nodes is 2 ($NUM_NODE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "not enough nodes are up ($NUM_NODE) - FAILURE"
fi

let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking SDR_invmgr CMP data base: number of nodes...."
NUM_NODE=`show_cmp -i inv -N 8448 | grep Object | wc -l`
if [ $NUM_NODE -ge 2 ]; then 
    echo "Number of nodes is 2 ($NUM_NODE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "not enough nodes are up ($NUM_NODE) - FAILURE"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking PM CMP data base:  node type...."
NUM_OF_RP=`show_cmp -i pm -N 8448 | grep ": RP" | wc -l`
if [ $NUM_OF_RP -eq 2 ]; then 
    echo "Number of RP is 2 ($NUM_OF_RP) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of RP mismatch ($NUM_OF_RP) - FAILURE"
fi

let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking SDR_invmgr CMP data base:  node type...."
NUM_OF_RP=`show_cmp -i inv -N 8448 | grep ": RP" | wc -l`
if [ $NUM_OF_RP -eq 2 ]; then 
    echo "Number of RP is 2 ($NUM_OF_RP) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of RP mismatch ($NUM_OF_RP) - FAILURE"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking PM CMP data base: Software state...."
NUM_OF_FINAL_STATE=`show_cmp -i pm -N 8448 | grep "^[SW]" | grep FINAL | wc -l`
if [ $NUM_OF_FINAL_STATE -eq  2 ]; then 
    echo "Nodes are in FINAL band ($NUM_OF_FINAL_STATE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Nodes are not in FANAL band ($NUM_OF_FINAL_STATE) - FAILURE"
fi


let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking SDR_invmgr CMP data base: Software state...."
NUM_OF_FINAL_STATE=`show_cmp -i inv -N 8448 | grep "^[SW]" | grep FINAL | wc -l`
if [ $NUM_OF_FINAL_STATE -eq  2 ]; then
    echo "All nodes are in FINAL band ($NUM_OF_FINAL_STATE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Nodes are not in FINAL band ($NUM_OF_FINAL_STATE) - FAILURE"
fi
#------------------------------------------------------------


#############################
### Show red output check ###
#############################

# sleep 300;
_loop=1;
_loopcnt=0;
while [[ $_loop -eq 1 ]]; do
    RED_STAT_CHK=`redcon_show | grep "Standby node in 0/RP1/CPU0 is ready" | wc -l`
    if [ $RED_STAT_CHK -eq  1 ]; then 
        echo "### Start Checking show red output..."
        break;
    else
        sleep 10;
        if [ $_loopcnt -eq 60 ]; then
            echo "Script timeout, standby node is not ready for a long time..."
            exit;
        fi
        let "_loopcnt += 1"
    fi
done


#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking show redundancy output...."
ACTIVE_NODE_CHK=`redcon_show | grep "Node 0/RP0/CPU0 is in ACTIVE role" | wc -l`
if [ $ACTIVE_NODE_CHK -eq  1 ]; then 
    echo "0/RP0/CPU0 is active role - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Invalid active node - FAILURE"
fi

let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking show redundancy output...."
SBY_NODE_CHK=`redcon_show | grep "Partner node (0/RP1/CPU0) is in STANDBY role" | wc -l`
if [ $SBY_NODE_CHK -eq  1 ]; then 
    echo "0/RP1/CPU0 is standby role - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Invalid standby node - FAILURE"
fi



let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking show redundancy output...."
RED_STAT_CHK=`redcon_show | grep "Standby node in 0/RP1/CPU0 is ready" | wc -l`
if [ $RED_STAT_CHK -eq  1 ]; then 
    echo "standby is ready - SUCCESS"
    let "SUCCESS += 1"
else
    echo "standby is not ready - FAILURE"
fi

let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Checking show redundancy output...."
RED_STAT_CHK=`redcon_show | grep "Standby node in 0/RP1/CPU0 is NSR-ready" | wc -l`
if [ $RED_STAT_CHK -eq  1 ]; then 
    echo "standby is NSR-ready - SUCCESS"
    let "SUCCESS += 1"
else
    echo "standby is not NSR-ready - FAILURE"
fi
#------------------------------------------------------------

echo "******************************************************"
echo " Total Test Cases: $TOTAL_TESTS Passed: $SUCCESS Failed: $(($TOTAL_TESTS - $SUCCESS))" 
echo "******************************************************"
