diff options
Diffstat (limited to 'jjb')
-rw-r--r-- | jjb/integration/run-csit.sh | 177 |
1 files changed, 72 insertions, 105 deletions
diff --git a/jjb/integration/run-csit.sh b/jjb/integration/run-csit.sh index 877cebbba..4ee5d753b 100644 --- a/jjb/integration/run-csit.sh +++ b/jjb/integration/run-csit.sh @@ -20,99 +20,10 @@ echo "---> run-csit.sh" -WORKDIR=$(mktemp -d --suffix=-robot-workdir) - -# Exit if no arguments are provided and required variables not set -if [[ $# -eq 0 ]] && [[ -z "${TESTPLAN}" ]] && [[ -z "${TESTOPTIONS}" ]]; then - echo - echo "Usage: $0 plans/<project>/<functionality> [<robot-options>]" - echo - echo " <project>, <functionality>, <robot-options>: " - echo " The same values as for the JJB job template:" - echo ' {project}-csit-{functionality}' - echo - exit 1 - -elif [[ $# -ne 2 ]] && [[ -z "${TESTPLAN}" ]] && [[ -z "${TESTOPTIONS}" ]]; then - echo - echo "Script called without arguments, but the following variables" - echo " must be set: {TESTPLAN} {TESTOPTIONS}" - echo - exit 1 - -elif [[ $# -eq 2 ]]; then - export TESTPLAN=$1; export TESTOPTIONS=$2 -fi - -# Python version should match that used to setup -# robot-framework in other jobs/stages -# Use pyenv for selecting the python version -if [[ -d "/opt/pyenv" ]]; then - echo "Setup pyenv:" - export PYENV_ROOT="/opt/pyenv" - export PATH="$PYENV_ROOT/bin:$PATH" - pyenv versions - if command -v pyenv 1>/dev/null 2>&1; then - eval "$(pyenv init - --no-rehash)" - # Choose the latest numeric Python version from installed list - version=$(pyenv versions --bare \ - | sed '/^[^0-9]/d' | sort -V | tail -n 1) - pyenv local "${version}" - fi -fi - # # functions # -# load the saved set options -function load_set { - _setopts="$-" - - # bash shellopts - for i in $(echo "$SHELLOPTS" | tr ':' ' ') ; do - set +o "${i}" - done - for i in $(echo "$RUN_CSIT_SHELLOPTS" | tr ':' ' ') ; do - set -o "${i}" - done - - # other options - for i in $(echo "$_setopts" | sed 's/./& /g') ; do - set +"${i}" - done - set -"${RUN_CSIT_SAVE_SET}" -} - -# set options for quick bailout when error -function harden_set { - set -xeo pipefail - set +u # enabled it would probably fail too many often -} - -# relax set options so the sourced file will not fail -# the responsibility is shifted to the sourced file... -function relax_set { - set +e - set +o pipefail -} - -# save current set options -function save_set { - RUN_CSIT_SAVE_SET="$-" - RUN_CSIT_SHELLOPTS="$SHELLOPTS" -} - -# wrapper for sourcing a file -function source_safely { - if [[ -z "$1" ]] && return 1; then - relax_set - # shellcheck disable=SC1090 - source "$1" - load_set - fi -} - function on_exit { rc=$? if [[ ${WORKSPACE} ]]; then @@ -128,10 +39,11 @@ function on_exit { # Run teardown script plan if it exists cd "${TESTPLANDIR}" TEARDOWN="${TESTPLANDIR}/teardown.sh" - if [[ -f "${TEARDOWN}" ]]; then + if [ -f "${TEARDOWN}" ]; then echo "Running teardown script ${TEARDOWN}" source_safely "${TEARDOWN}" fi + # TODO: do something with the output exit $rc } # ensure that teardown and other finalizing steps are always executed @@ -157,6 +69,52 @@ function docker_stats { echo } +# save current set options +function save_set { + RUN_CSIT_SAVE_SET="$-" + RUN_CSIT_SHELLOPTS="$SHELLOPTS" +} + +# load the saved set options +function load_set { + _setopts="$-" + + # bash shellopts + for i in $(echo "$SHELLOPTS" | tr ':' ' ') ; do + set +o ${i} + done + for i in $(echo "$RUN_CSIT_SHELLOPTS" | tr ':' ' ') ; do + set -o ${i} + done + + # other options + for i in $(echo "$_setopts" | sed 's/./& /g') ; do + set +${i} + done + set -${RUN_CSIT_SAVE_SET} +} + +# set options for quick bailout when error +function harden_set { + set -xeo pipefail + set +u # enabled it would probably fail too many often +} + +# relax set options so the sourced file will not fail +# the responsibility is shifted to the sourced file... +function relax_set { + set +e + set +o pipefail +} + +# wrapper for sourcing a file +function source_safely { + [ -z "$1" ] && return 1 + relax_set + . "$1" + load_set +} + # # main # @@ -164,21 +122,29 @@ function docker_stats { # set and save options for quick failure harden_set && save_set -if [[ -z "${WORKSPACE}" ]]; then - if (git rev-parse --show-toplevel > /dev/null 2>&1); then - WORKSPACE=$(git rev-parse --show-toplevel) - export WORKSPACE - else - WORKSPACE=$(pwd) - export WORKSPACE - fi +if [ $# -eq 0 ]; then + echo + echo "Usage: $0 plans/<project>/<functionality> [<robot-options>]" + echo + echo " <project>, <functionality>, <robot-options>: " + echo " The same values as for the '{project}-csit-{functionality}' JJB job template." + echo + exit 1 +fi + +if [ -z "$WORKSPACE" ]; then + export WORKSPACE=$(git rev-parse --show-toplevel) fi -if [[ ! -f "${WORKSPACE}/${TESTPLAN}/testplan.txt" ]]; then +if [ -f "${WORKSPACE}/${1}/testplan.txt" ]; then + export TESTPLAN="${1}" +else echo "testplan not found: ${WORKSPACE}/${TESTPLAN}/testplan.txt" exit 2 fi +export TESTOPTIONS="${2}" + rm -rf "$WORKSPACE/archives/$TESTPLAN" mkdir -p "$WORKSPACE/archives/$TESTPLAN" @@ -190,6 +156,7 @@ source_safely "${WORKSPACE}/prepare-csit.sh" # Activate the virtualenv containing all the required libraries installed by prepare-csit.sh source_safely "${ROBOT3_VENV}/bin/activate" +WORKDIR=$(mktemp -d --suffix=-robot-workdir) cd "${WORKDIR}" # Add csit scripts to PATH @@ -219,16 +186,16 @@ grep -E -v '(^[[:space:]]*#|^[[:space:]]*$)' "${TESTPLANDIR}/testplan.txt" |\ cat testplan.txt SUITES=$( xargs -a testplan.txt ) -echo ROBOT_VARIABLES="${ROBOT_VARIABLES}" -echo "Starting Robot test suites ${SUITES} ..." -relax_set - echo "Versioning information:" python3 --version -pip freeze +pip3 freeze python3 -m robot.run --version || : -python -m robot.run -N "${TESTPLAN}" -v WORKSPACE:/tmp "${ROBOT_VARIABLES}" "${TESTOPTIONS}" "${SUITES}" +echo ROBOT_VARIABLES="${ROBOT_VARIABLES}" +echo "Starting Robot test suites ${SUITES} ..." +relax_set +# Do NOT quote variables below, it breaks testing +python3 -m robot.run -N ${TESTPLAN} -v WORKSPACE:/tmp ${ROBOT_VARIABLES} ${TESTOPTIONS} ${SUITES} RESULT=$? load_set echo "RESULT: $RESULT" |