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

echo "#############################################################"
echo "###                   RP card sanity                      ###"
echo "#############################################################"
echo "Running Sanity on RP"
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 card | grep RP | wc -l`
if [ $NUM_OF_RP -eq 1 ]; then 
    echo "Number of RP is 1 ($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 ==============="
NUM_OF_LC=`show_cmp -i pm | grep card | grep LC | wc -l`
if [ $NUM_OF_LC -gt 0 ]; then 
    echo "Number of LC is 1 ($NUM_OF_LC) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of LC mismatch ($NUM_OF_LC) - 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 card | grep RP | wc -l`
if [ $NUM_OF_RP -eq 1 ]; then 
    echo "Number of RP is 1 ($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 ==============="
NUM_OF_LC=`show_cmp -i inv | grep card | grep LC | wc -l`
if [ $NUM_OF_LC -gt 0 ]; then 
    echo "Number of LC is 1 ($NUM_OF_LC) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of LC mismatch ($NUM_OF_LC) - 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 -ge  0 ]; then 
    echo "Nodes are in FINAL band ($NUM_OF_FINAL_STATE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "None of node is 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 -ge  0 ]; then 
    echo "All nodes are in FINAL band ($NUM_OF_FINAL_STATE) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "None of node is in FANAL band ($NUM_OF_FINAL_STATE) - FAILURE"
fi
#------------------------------------------------------------

#------------------------------------------------------------
let "TOTAL_TESTS += 1"
echo "============= TEST CASE: $TOTAL_TESTS ==============="
echo "Running XTF for LRD APIs...."
NUM_OF_FAIL=`lrd_lib_xtf -d all > lrd_lib_xtf.log ; grep "Test case(s) failed" lrd_lib_xtf.log | awk '{printf $4}'`
if [ "$NUM_OF_FAIL" = "0" ]; then 
    echo "There was no failure in lrd_lib_xtf - SUCCESS"
    let "SUCCESS += 1"
else
    echo "One or some of lrd_lib_xtf test cases are failing - FAILURE"
fi
#------------------------------------------------------------



echo "#############################################################"
echo "###                   Line card sanity                    ###"
echo "#############################################################"

echo "Running Sanity on LC"
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 256 | 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 256 | 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 256 | 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 256 | 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 256 | grep -w "RP" | wc -l`
if [ $NUM_OF_RP -eq 1 ]; then 
    echo "Number of RP is 1 ($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 ==============="
NUM_OF_LC=`show_cmp -i pm - N 256 | grep -w "LC" | wc -l`
if [ $NUM_OF_LC -eq 1 ]; then 
    echo "Number of RP is 1 ($NUM_OF_LC) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of LC mismatch ($NUM_OF_LC) - 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 256 | grep -w "RP" | wc -l`
if [ $NUM_OF_RP -eq 1 ]; then 
    echo "Number of RP is 1 ($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 ==============="
NUM_OF_LC=`show_cmp -i inv -N 256 | grep -w "LC" | wc -l`
if [ $NUM_OF_LC -eq 1 ]; then 
    echo "Number of LC is 1 ($NUM_OF_LC) - SUCCESS"
    let "SUCCESS += 1"
else
    echo "Number of LC mismatch ($NUM_OF_LC) - 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 256 | 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 "One or some of node is 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 256 | 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 "One or some of node is not in FANAL band ($NUM_OF_FINAL_STATE) - FAILURE"
fi
#------------------------------------------------------------

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