#!/bin/bash

declare -i DEFAULT_LOOP_CNT=1000000
declare -i LOOP_CNT=0

SCRIPT_DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")")
source "${SCRIPT_DIR}/common-config"
source "${SCRIPT_DIR}/check-mem"

TEST_REPORT_PATH=${SCRIPT_DIR}/../test_report
TEST_OUTPUT_PATH=${SCRIPT_DIR}/../test_report/output
mkdir -p ${TEST_REPORT_PATH}
mkdir -p ${TEST_OUTPUT_PATH}

export timeStart=
export timeEnd=

time_mesure_before(){
    timeStart=`date +%s`
}

time_mesure_after() {
    Name=$1
    timeEnd=`date +%s`

    local timeCost=$timeEnd-$timeStart
    local hour min
    hour=$((timeCost/3600))
    min=$(((timeCost-hour*60)/60))
    sec=$((timeCost-hour*3600-min*60))
    echo "$Name Total Time elapsed : $hour:$min:$sec (H:M:S)"
}


test_summary() {
    CASE_NAME=$1
    TEST_RESULT_SUMMARY="$CASE_NAME test result : total $2 cases, failed $3."

    echo $TEST_RESULT_SUMMARY
    echo $TEST_RESULT_SUMMARY>>${TEST_REPORT_PATH}/${CASE_NAME}_test_report.txt
}

###############################################################################
# for burning test
###############################################################################
declare -i BURNING_TEST_CASE_TOTAL_COUNT=0
# declare -i BURNING_TEST_CASE_PASS_COUNT=0
# declare -i BURNING_TEST_CASE_FAILED_COUNT=0

export CHECK_MEM_TOTAL_CACSE_CNT
export CHECK_MEM_PASS_CACSE_CNT
export CHECK_MEM_FAILED_CACSE_CNT

burning_test_before() {
    BURNING_TEST_CASE_TOTAL_COUNT=0
    # BURNING_TEST_CASE_PASS_COUNT=0
    # BURNING_TEST_CASE_FAILED_COUNT=0

    check_mem_before
    time_mesure_before
}

burning_test_after() {
    TEST_CASE_NAME=$1
    time_mesure_before $TEST_CASE_NAME
    burning_test_summary $1
}

burning_test_summary() {
    TEST_CASE_NAME=$1

    # check the result
    failed_count=$(grep "failed [^0]" ${TEST_REPORT_PATH}/${TEST_CASE_NAME}*_test_report.txt | wc -l )
    success_count=$(grep "failed [0]" ${TEST_REPORT_PATH}/${TEST_CASE_NAME}*_test_report.txt | wc -l )
    echo "failed_count:"$failed_count
    echo "success_count:"$success_count
    expect_count=$BURNING_TEST_CASE_TOTAL_COUNT
    echo "expect_count:"$expect_count
    TEST_RESULT=
    if [ "$failed_count" -eq "0" ] && [ "$success_count" -eq "$expect_count" ]; then
        check_mem_after
        # check memory
        if [ "$CHECK_MEM_FAILED_CACSE_CNT" -eq "0" ] && [ "$CHECK_MEM_TOTAL_CACSE_CNT" -eq "$CHECK_MEM_PASS_CACSE_CNT" ]; then
            TEST_RESULT=pass
        else
            echo "after test done, check memory failed, maybe have memory leakage"
            TEST_RESULT=failed
        fi
    else
        echo "test case run failed"
        TEST_RESULT=failed
    fi

    TEST_RESULT_SUMMARY="$TEST_CASE_NAME burning test $TEST_RESULT, repeat times=$LOOP_CNT"

    echo $TEST_RESULT_SUMMARY
    echo $TEST_RESULT_SUMMARY>>${TEST_REPORT_PATH}/${TEST_CASE_NAME}_burning_test_report.txt
}

exec_shell(){
    if [ -f ${SCRIPT_FILE_NAME} ]; then
        echo "exec OK:" $*
        $*
        BURNING_TEST_CASE_TOTAL_COUNT=${BURNING_TEST_CASE_TOTAL_COUNT}+1
    else
        echo "exec NG:" $* ", file not exist"
    fi
}