#!/bin/bash
set -e

echo -e "analyze_test start \n"

TIDB_TEST_STORE_NAME=$TIDB_TEST_STORE_NAME
TIKV_PATH=$TIKV_PATH

TEST_BIN_PATH=./analyze_test

analyze_test_log="./tidb.log"
tidb_config_name="./config.toml"

SERVER_PID=''

rm -rf ${analyze_test_log}*

if [[ ! -e ${TEST_BIN_PATH} ]]; then
    ./build.sh
fi

if [[ -z "${TIDB_SERVER_PATH}" || ! -e ${TIDB_SERVER_PATH} ]]; then
    echo -e "no tidb-server was found, build from source code"
    # This is likely to be failed, depending on whether tidb parser is well set up
    GO111MODULE=on go build -race -o analyze_test_tidb-server github.com/pingcap/tidb/tidb-server
    TIDB_SERVER_PATH=./analyze_test_tidb-server
fi

echo "START tidb_server, LOG FILE: $analyze_test_log"
if [ "${TIDB_TEST_STORE_NAME}" = "tikv" ]; then
    ${TIDB_SERVER_PATH} -config $tidb_config_name -store tikv -path "${TIKV_PATH}" > $analyze_test_log 2>&1 &
    SERVER_PID=$!
else
    ${TIDB_SERVER_PATH} -config $tidb_config_name -store unistore  -path="" > ${analyze_test_log} 2>&1 &
    SERVER_PID=$!
    
fi
echo "tidb-server(PID: $SERVER_PID) STARTED"

sleep 30

mysql -h '127.0.0.1' -P 4001   -u root -e "set @@global.tidb_txn_mode = 'pessimistic'"

sleep 5

echo "START RUNNING ANALYZE TEST"
${TEST_BIN_PATH}
EXIT_CODE=$?

kill -9 $SERVER_PID || true

echo "ANALYZE TEST END"

race=`grep 'DATA RACE' ${analyze_test_log}* || true`
if [ ! -z "$race" ]; then
    echo "tidb-server DATA RACE!"
    grep -A 10 -B 20 'DATA RACE' ${analyze_test_log}*
    EXIT_CODE=-2
fi


if [ $EXIT_CODE -ne 0 ]; then
    echo "=========== ERROR EXIT [${EXIT_CODE}]: FULL tidb.log BEGIN ============"
    cat tidb*.log
    echo "=========== ERROR EXIT [${EXIT_CODE}]: FULL tidb.log END =============="
else
    echo "ANALYZE TEST FINISHED SUCCESSFULLY!"
fi

exit $EXIT_CODE
