#!/bin/bash
set -e

echo -e "sqllogic_test start\n"
rm -rf ./tidb*.log

TEST_BIN_PATH=./sqllogic_test

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

if [[ -z "${TIDB_PARALLELISM}" ]]; then
    TIDB_PARALLELISM=8
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 -o sqllogic_test_tidb-server github.com/pingcap/tidb/tidb-server
    TIDB_SERVER_PATH=./sqllogic_test_tidb-server
fi

if [[ -z "${SQLLOGIC_TEST_PATH}" ]]; then
    # Set default sqllogic test case path to ./test.
    SQLLOGIC_TEST_PATH=./test
fi

set +e

if [[ "${TIDB_TEST_STORE_NAME}" == "tikv" ]] && [[ -n "${TIKV_PATH}" ]]; then
    ${TIDB_SERVER_PATH} -config config.toml -L error -store tikv -path "${TIKV_PATH}" &>tidb.log &
    SERVER_PID="${SERVER_PID} ${!}"
    sleep 30
    mysql -h '127.0.0.1' -P 4001   -u root -e "set @@global.tidb_txn_mode = 'pessimistic'"
    echo -e "run in pessimistic mode\n"
    sleep 5
    ${TEST_BIN_PATH} -log-level=error -skip-error -parallel=1 -p ${SQLLOGIC_TEST_PATH}
    EXIT_CODE=$?
else
    for i in `seq ${TIDB_PARALLELISM}`
    do
        lsof -i :$((4000+$i))
        lsof -i :$((9080+$i))
        ${TIDB_SERVER_PATH} -P $((4000+$i)) -status $((9080+$i)) -L error -store unistore -config config.toml -path="" &>tidb_${i}.log &
        SERVER_PID="${SERVER_PID} ${!}"
    done
    sleep 5
    ${TEST_BIN_PATH} -log-level=error -skip-error -parallel=${TIDB_PARALLELISM} -p ${SQLLOGIC_TEST_PATH}
    EXIT_CODE=$?
fi

echo -e "sqllogic_test end\n"

kill -9 $SERVER_PID || true

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 =============="
fi
exit $EXIT_CODE
