diff --git a/test/bin/run_rf_tests.sh b/test/bin/run_rf_tests.sh new file mode 100755 index 0000000000..f894e3394f --- /dev/null +++ b/test/bin/run_rf_tests.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +set -xeuo pipefail +IFS=$'\n\t' + +# path vars +TEST_BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# default config +DRYRUN="" +OUTDIR="${TEST_BIN_DIR}/_output/e2e-$(date +%Y%m%d-%H%M%S)" +RF_VENV="${TEST_BIN_DIR}/_output/robotenv" +RF_VARIABLES="${TEST_BIN_DIR}/variables.yaml" +SCENARIO="Default Name" +TEST_RANDOMIZATION="all" +TEST_EXECUTION_TIMEOUT="300m" +SCENARIO="Default Scenario" +EXITONFAILURE="" + +function usage { + local -r script_name=$(basename "$0") + cat - <&2 + echo "See ${TEST_BIN_DIR}/variables.yaml.example for the expected content." 1>&2 + exit 1 +fi + +cd "${TEST_BIN_DIR}" || (echo "Did not find ${TEST_BIN_DIR}" 1>&2; exit 1) + +TESTS="$*" +if [ -z "${TESTS}" ]; then + echo "ERROR: missing which RF suites/tests to run" + exit 1 +fi + +# enable stress condition +if [ "${STRESS_TESTING:-}" ]; then + # DEST_DIR var is the python env dir used by fetch_tools.sh to install the tools + export DEST_DIR="${RF_VENV}" + "${TEST_BIN_DIR}/../../scripts/fetch_tools.sh" yq + YQ_BINARY="${RF_VENV}/yq" + + CONDITION="${STRESS_TESTING%=*}" + VALUE="${STRESS_TESTING#*=}" + + SSH_HOST=$("${YQ_BINARY}" '.USHIFT_HOST' "${RF_VARIABLES}") + SSH_USER=$("${YQ_BINARY}" '.USHIFT_USER' "${RF_VARIABLES}") + SSH_PORT=$("${YQ_BINARY}" '.SSH_PORT' "${RF_VARIABLES}") + SSH_PKEY=$("${YQ_BINARY}" '.SSH_PRIV_KEY' "${RF_VARIABLES}") + + "${TEST_BIN_DIR}/stress_testing.sh" -e "${CONDITION}" -v "${VALUE}" -h "${SSH_HOST}" -u "${SSH_USER}" -p "${SSH_PORT}" -k "${SSH_PKEY}" +fi + +# shellcheck disable=SC2086,SC2068 +${RF_BINARY} \ + ${DRYRUN} \ + ${EXITONFAILURE} \ + --name "${SCENARIO}" \ + --randomize "${TEST_RANDOMIZATION}" \ + --prerunmodifier "${TEST_BIN_DIR}/../resources/SkipTests.py:${SKIP_TESTS:-}" \ + --loglevel TRACE \ + --outputdir "${OUTDIR}" \ + --debugfile "${OUTDIR}/rf-debug.log" \ + -V "${RF_VARIABLES}" \ + -x junit.xml \ + ${TESTS[@]} + +# disable stress condition +if [ "${STRESS_TESTING:-}" ]; then + "${TEST_BIN_DIR}/stress_testing.sh" -d "${CONDITION}" -h "${SSH_HOST}" -u "${SSH_USER}" -p "${SSH_PORT}" -k "${SSH_PKEY}" +fi diff --git a/test/bin/scenario.sh b/test/bin/scenario.sh index 33fdc82c1d..3b364fe81e 100755 --- a/test/bin/scenario.sh +++ b/test/bin/scenario.sh @@ -936,24 +936,22 @@ EOF # Make sure the test execution times out after a predefined period. # The 'timeout' command sends the HUP signal and, if the test does not # exit after 5m, it sends the KILL signal to terminate the process. - local var_arg=${variable_file:+-V "${variable_file}"} - local timeout_robot="timeout -v --kill-after=5m ${TEST_EXECUTION_TIMEOUT} ${rf_binary}" + timeout_robot="timeout -v --kill-after=5m ${TEST_EXECUTION_TIMEOUT} ${rf_binary}" if [ -t 0 ]; then # Disable timeout for interactive mode when stdin is a terminal. # This is necessary for proper handling of test interruption by user. timeout_robot="${rf_binary}" fi - # shellcheck disable=SC2086 - if ! ${timeout_robot} \ - --name "${SCENARIO}" \ - --randomize "${TEST_RANDOMIZATION}" \ - --loglevel TRACE \ - --outputdir "${SCENARIO_INFO_DIR}/${SCENARIO}" \ - --debugfile "${SCENARIO_INFO_DIR}/${SCENARIO}/rf-debug.log" \ - -x junit.xml \ - ${var_arg} \ - "$@" ; then + if ! "${SCRIPTDIR}/run_rf_tests.sh" \ + -i "${variable_file}" \ + -b "${timeout_robot}" \ + -o "${SCENARIO_INFO_DIR}/${SCENARIO}" \ + -c "${SCENARIO}" \ + -r "${TEST_RANDOMIZATION}" \ + -t "${TEST_EXECUTION_TIMEOUT}" \ + "$@" ; \ + then # Log junit message on the command timeout if [ $? -ge 124 ] ; then record_junit "${vmname}" "run_test_timed_out_${TEST_EXECUTION_TIMEOUT}" "FAILED" diff --git a/test/run.sh b/test/run.sh deleted file mode 100755 index 19161f0ab6..0000000000 --- a/test/run.sh +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/bash - -set -xeuo pipefail -IFS=$'\n\t' - -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -ROOTDIR="${SCRIPTDIR}/.." - -RF_VENV="${ROOTDIR}/_output/robotenv" -RF_VARIABLES="${SCRIPTDIR}/variables.yaml" -DRYRUN=false -OUTDIR="${ROOTDIR}/_output/e2e-$(date +%Y%m%d-%H%M%S)" -RANDOMIZE=all -EXITONFAILURE="" - -function usage { - local -r script_name=$(basename "$0") - cat - <&2 - echo "See ${SCRIPTDIR}/variables.yaml.example for the expected content." 1>&2 - exit 1 -fi - -# DEST_DIR var is the python env dir used by fetch_tools.sh to install the tools -export DEST_DIR="${RF_VENV}" -"${ROOTDIR}/scripts/fetch_tools.sh" robotframework -"${ROOTDIR}/scripts/fetch_tools.sh" yq - -RF_BINARY="${RF_VENV}/bin/robot" -YQ_BINARY="${RF_VENV}/yq" - -cd "${SCRIPTDIR}" || (echo "Did not find ${SCRIPTDIR}" 1>&2; exit 1) - -TESTS="$*" -# if TESTS is not set - run the standard suite. -if [ -z "${TESTS}" ]; then - TESTS=(./suites/standard1 ./suites/standard2 ./suites/osconfig/clusterid.robot ./suites/storage/storage-version-migration.robot) -fi - -# enable stress condition -if [ "${STRESS_TESTING:-}" ]; then - CONDITION="${STRESS_TESTING%=*}" - VALUE="${STRESS_TESTING#*=}" - - SSH_HOST=$("${YQ_BINARY}" '.USHIFT_HOST' "${RF_VARIABLES}") - SSH_USER=$("${YQ_BINARY}" '.USHIFT_USER' "${RF_VARIABLES}") - SSH_PORT=$("${YQ_BINARY}" '.SSH_PORT' "${RF_VARIABLES}") - SSH_PKEY=$("${YQ_BINARY}" '.SSH_PRIV_KEY' "${RF_VARIABLES}") - - "${SCRIPTDIR}"/bin/stress_testing.sh -e "${CONDITION}" -v "${VALUE}" -h "${SSH_HOST}" -u "${SSH_USER}" -p "${SSH_PORT}" -k "${SSH_PKEY}" -fi - -if ${DRYRUN}; then - # shellcheck disable=SC2086,SC2068 - "${RF_BINARY}" \ - --dryrun \ - --outputdir "${OUTDIR}" \ - ${TESTS[@]} -else - # shellcheck disable=SC2086,SC2068 - "${RF_BINARY}" \ - ${EXITONFAILURE} \ - --randomize "${RANDOMIZE}" \ - --prerunmodifier "${SCRIPTDIR}/resources/SkipTests.py:${SKIP_TESTS:-}" \ - --loglevel TRACE \ - -V "${RF_VARIABLES}" \ - -x junit.xml \ - --outputdir "${OUTDIR}" \ - ${TESTS[@]} -fi - -# disable stress condition -if [ "${STRESS_TESTING:-}" ]; then - "${SCRIPTDIR}"/bin/stress_testing.sh -d "${CONDITION}" -h "${SSH_HOST}" -u "${SSH_USER}" -p "${SSH_PORT}" -k "${SSH_PKEY}" -fi