| #!/usr/bin/env bash |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| set -eo pipefail |
| #set -x |
| |
| ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" |
| |
| DORIS_HOME="${ROOT}" |
| |
| # Check args |
| usage() { |
| echo " |
| Usage: $0 <shell_options> <framework_options> |
| Optional shell_options: |
| --clean clean output of regression test framework |
| --teamcity print teamcity service messages |
| --run run regression test. build framework if necessary |
| |
| Optional framework_options: |
| -s run a specified suite |
| -g run a specified group |
| -d run a specified directory |
| -h **print all framework options usage** |
| -xs exclude the specified suite |
| -xg exclude the specified group |
| -xd exclude the specified directory |
| -genOut generate .out file if not exist |
| -forceGenOut delete and generate .out file |
| -parallel run tests using specified threads |
| -randomOrder run tests in a random order |
| -times rum tests {times} times |
| |
| Eg. |
| $0 build regression test framework and run all suite which in default group |
| $0 --run test_select run a suite which named as test_select |
| $0 --run 'test*' run all suite which named start with 'test', note that you must quota with '' |
| $0 --run -s test_select run a suite which named as test_select |
| $0 --run test_select -genOut generate output file for test_select if not exist |
| $0 --run -g default run all suite in the group which named as default |
| $0 --run -d demo,correctness/tmp run all suite in the directories which named as demo and correctness/tmp |
| $0 --clean clean output of regression test framework |
| $0 --clean --run test_select clean output and build regression test framework and run a suite which named as test_select |
| $0 --run -h print framework options |
| $0 --teamcity --run test_select print teamcity service messages and build regression test framework and run test_select |
| |
| Log path: \${DORIS_HOME}/output/regression-test/log |
| Default config file: \${DORIS_HOME}/regression-test/conf/regression-conf.groovy |
| " |
| exit 1 |
| } |
| |
| CLEAN=0 |
| WRONG_CMD=0 |
| TEAMCITY=0 |
| RUN=0 |
| if [[ "$#" == 0 ]]; then |
| #default |
| CLEAN=0 |
| WRONG_CMD=0 |
| TEAMCITY=0 |
| RUN=1 |
| else |
| CLEAN=0 |
| RUN=0 |
| TEAMCITY=0 |
| WRONG_CMD=0 |
| while true; do |
| case "$1" in |
| --clean) |
| CLEAN=1 |
| shift |
| ;; |
| --teamcity) |
| TEAMCITY=1 |
| shift |
| ;; |
| --conf) |
| CUSTOM_CONFIG_FILE="$2" |
| shift |
| shift |
| ;; |
| --run) |
| RUN=1 |
| shift |
| ;; |
| *) |
| if [[ "${RUN}" -eq 0 ]] && [[ "${CLEAN}" -eq 0 ]]; then |
| WRONG_CMD=1 |
| fi |
| break |
| ;; |
| esac |
| done |
| fi |
| |
| if [[ ${WRONG_CMD} -eq 1 ]]; then |
| usage |
| fi |
| |
| # set maven |
| MVN_CMD='mvn' |
| if [[ -n "${CUSTOM_MVN}" ]]; then |
| MVN_CMD="${CUSTOM_MVN}" |
| fi |
| if ! "${MVN_CMD}" --version; then |
| echo "Error: mvn is not found" |
| exit 1 |
| fi |
| export MVN_CMD |
| |
| CONF_DIR="${DORIS_HOME}/regression-test/conf" |
| if [[ -n "${CUSTOM_CONFIG_FILE}" ]] && [[ -f "${CUSTOM_CONFIG_FILE}" ]]; then |
| CONFIG_FILE="${CUSTOM_CONFIG_FILE}" |
| echo "Using custom config file ${CONFIG_FILE}" |
| else |
| CONFIG_FILE="${CONF_DIR}/regression-conf.groovy" |
| fi |
| LOG_CONFIG_FILE="${CONF_DIR}/logback.xml" |
| |
| FRAMEWORK_SOURCE_DIR="${DORIS_HOME}/regression-test/framework" |
| REGRESSION_TEST_BUILD_DIR="${FRAMEWORK_SOURCE_DIR}/target" |
| |
| OUTPUT_DIR="${DORIS_HOME}/output/regression-test" |
| LOG_OUTPUT_FILE="${OUTPUT_DIR}/log" |
| RUN_JAR="${OUTPUT_DIR}/lib/regression-test-*.jar" |
| |
| if [[ "${CLEAN}" -eq 1 ]]; then |
| rm -rf "${REGRESSION_TEST_BUILD_DIR}" |
| rm -rf "${OUTPUT_DIR}" |
| fi |
| |
| if [[ "${RUN}" -ne 1 ]]; then |
| echo "Finished" |
| exit 0 |
| fi |
| |
| if ! test -f ${RUN_JAR:+${RUN_JAR}}; then |
| echo "===== Build Regression Test Framework =====" |
| cd "${DORIS_HOME}/regression-test/framework" |
| "${MVN_CMD}" package |
| cd "${DORIS_HOME}" |
| |
| mkdir -p "${OUTPUT_DIR}"/{lib,log} |
| cp -r "${REGRESSION_TEST_BUILD_DIR}"/regression-test-*.jar "${OUTPUT_DIR}/lib" |
| |
| echo "===== BUILD JAVA_UDF_SRC TO GENERATE JAR =====" |
| mkdir -p "${DORIS_HOME}"/regression-test/suites/javaudf_p0/jars |
| cd "${DORIS_HOME}"/regression-test/java-udf-src |
| "${MVN_CMD}" package |
| cp target/java-udf-case-jar-with-dependencies.jar "${DORIS_HOME}"/regression-test/suites/javaudf_p0/jars/ |
| cd "${DORIS_HOME}" |
| fi |
| |
| # check java home |
| if [[ -z "${JAVA_HOME}" ]]; then |
| echo "Error: JAVA_HOME is not set" |
| exit 1 |
| fi |
| |
| # check java version |
| export JAVA="${JAVA_HOME}/bin/java" |
| |
| REGRESSION_OPTIONS_PREFIX='' |
| |
| # contains framework options and not start with - |
| # it should be suite name |
| if [[ "$#" -ne 0 ]] && [[ "$1" =~ ^[^-].* ]]; then |
| # specify suiteName |
| REGRESSION_OPTIONS_PREFIX='-s' |
| fi |
| |
| echo "===== Run Regression Test =====" |
| |
| if [[ "${TEAMCITY}" -eq 1 ]]; then |
| JAVA_OPTS="${JAVA_OPTS} -DstdoutAppenderType=teamcity -Xmx2048m" |
| fi |
| |
| "${JAVA}" -DDORIS_HOME="${DORIS_HOME}" \ |
| -DLOG_PATH="${LOG_OUTPUT_FILE}" \ |
| -Dfile.encoding="UTF-8" \ |
| -Dlogback.configurationFile="${LOG_CONFIG_FILE}" \ |
| ${JAVA_OPTS:+${JAVA_OPTS}} \ |
| -jar ${RUN_JAR:+${RUN_JAR}} \ |
| -cf "${CONFIG_FILE}" \ |
| ${REGRESSION_OPTIONS_PREFIX:+${REGRESSION_OPTIONS_PREFIX}} "$@" |