#!/bin/bash
#*******************************************************************************
#Encoder Binary comparison test model
#             -- Compared with benchmark version using SHA-1 string
#             -- Test bit stream under folder  openh264/res
#             -- SHA-1 string of benchmark version for  all cases  of all bit streams
#                 under folder  openh264/test/encoder_binary_comparion/SHA1Table
#             -- For more detail,please refer to file AboutTest.
#
#brief:
#             -- This file is for local test under Linux/Unix OS
#             -- Start point of the test model,
#             -- For local test, please run below command:
#                   ./run_Main.sh LocalTest
#                And wait minutes for the test result.
#                Final test result, you can refer to test output files under folder
#                openh264/test/encoder_binary_comparison/FinalResult.
#             -- If there is something change in encoder design,and found that the bit stream
#                also change,you need to update the SHA1 table files in ./SHA1Table.
#                For update the SHA1 tables, please run below command:
#                   ./run_Main.sh UpdateSHA1Table
#                There will be some mismatched warning info, please ignore it.
#                Wait for minutes,the up-to-date will be copied to ./SHA1Table.
# date:    10/06/2014 Created
#*******************************************************************************

#usage: runTestTypeCheck    ${TestType}
runTestTypeCheck()
{

    echo "TestType is ${TestType}"
    if [ "${TestType}" = "LocalTest" ]
    then
        return 0
    elif [ "${TestType}" = "UpdateSHA1Table" ]
    then
        return 0
    else
        echo "usage:   --./run_Main.sh  LocalTest"
        echo "      or --./run_Main.sh  UpdateSHA1Table"
        exit 1
    fi
}

#delete temp files/folders
runLocalTestPostAction()
{
    ./Scripts/run_SafeDelete.sh   ${AllTestDataFolder} >>${DeletedLog}
    ./Scripts/run_SafeDelete.sh   ./Codec >>${DeletedLog}
    echo -e "\n\n\n"
    echo -e "\033[32m *************************************************************** \033[0m"
    echo -e "\033[32m  Local test completed!                                          \033[0m"
    if [ ${Flag} -eq  0 ]
    then
        echo -e "\033[32m  --all cases pass!! ----bit stream:  ${StreamName}          \033[0m"
    else
        echo -e "\033[31m  --not all cases passed .....                               \033[0m"
    fi
    echo ""
    echo -e "\033[32m  for more detail, please refer to *.log files and *.csv files   \033[0m"
    echo -e "\033[32m  in ./FinalResult                                               \033[0m"
    echo -e "\033[32m *************************************************************** \033[0m"
    echo ""
}

#copy up-to-date SHA1 table files to ./SHA1Table
#and delete temp files/folders
runUpdateSHA1TablePostAction()
{
    local BitStreamName=""
    local SHA1TableName=""
    local FileName=""
    for file in ${FinalResultFolder}/*
    do
        FileName=`echo $file | awk 'BEGIN {FS="/"} {print $NF}'`
        if [[  "$FileName"  =~ UpdateSHA1Table.csv$ ]]
        then
            BitStreamName=`echo $FileName | awk 'BEGIN {FS=".264"} {print $1}'`
            SHA1TableName=${BitStreamName}.264_AllCases_SHA1_Table.csv
            ./Scripts/run_SafeDelete.sh  ${SHA1TableFolder}/${SHA1TableName} >>${DeletedLog}
            cp  $file   ${SHA1TableFolder}/${SHA1TableName}
        fi
    done
    ./Scripts/run_SafeDelete.sh  ${AllTestDataFolder}>>${DeletedLog}
    ./Scripts/run_SafeDelete.sh  ${FinalResultFolder}>>${DeletedLog}
    ./Scripts/run_SafeDelete.sh  ./Codec>>${DeletedLog}
    echo -e "\n\n\n"
    echo -e "\033[32m *************************************************************** \033[0m"
    echo -e "\033[32m all SHA1 tables in ./${SHA1TableFolder} have been updated \033[0m"
    echo -e "\n"
    echo -e "\033[32m *************************************************************** \033[0m"
    echo -e "\n\n"
}
#usage:     --./run_Main.sh  LocalTest
#            or --./run_Main.sh  UpdateSHA1Table
runMain()
 {
    if [ ! $# -eq 1 ]
    then
        echo "usage:   --./run_Main.sh  LocalTest"
        echo "      or --./run_Main.sh  UpdateSHA1Table"
        exit 1
    fi

    local TestType=$1
    local BitStreamName=""

    Flag=""
    SHA1TableFolder="SHA1Table"
    FinalResultFolder="FinalResult"
    AllTestDataFolder="AllTestData"
    DeletedLog="Delete.log"
    runTestTypeCheck  ${TestType}

    # 32 -->32 bits release version;64 -->64 bits release version
    ./run_PrepareAllTestData.sh  64
    if [ ! $? -eq 0 ]
    then
        echo "failed to prepare test space for all test data!"
        exit 1
    fi

    #test all cases
    let "Flag=0"
    for Bitsream in  ./SHA1Table/*.csv
    do
        BitStreamName=`echo ${Bitsream} | awk 'BEGIN {FS="/"}  {print $NF} ' `
        BitStreamName=`echo ${BitStreamName} | awk 'BEGIN {FS=".264"}  {print $1} ' `
        BitStreamName="${BitStreamName}.264"
        echo -e  "\n\n\n"

        ./run_OneBitStream.sh   ${BitStreamName} ${TestType}
        if [ ! $? -eq 0 ]
        then
            let "Flag=1"
        fi
    done

    #post action
    if [  ${TestType} = "LocalTest" ]
    then
        runLocalTestPostAction
    elif [  ${TestType} = "UpdateSHA1Table" ]
    then
        runUpdateSHA1TablePostAction
    fi
 }
TestType=$1
runMain    ${TestType}

