X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=run-csit.sh;h=ce9cf80f79f6bd6a13d6a24daf9015c9031a0228;hb=90a2d4da62a04d4aaac556b28561bdc4534a6be7;hp=eeb8d59fbd0d221758ee1f327ff005c49c331fed;hpb=401430c55972f42f05ea53e97f4e6eaf9f0be0e4;p=integration%2Fcsit.git diff --git a/run-csit.sh b/run-csit.sh index eeb8d59f..ce9cf80f 100755 --- a/run-csit.sh +++ b/run-csit.sh @@ -1,6 +1,7 @@ #!/bin/bash -x # # Copyright 2016-2017 Huawei Technologies Co., Ltd. +# Modification Copyright 2019 © Samsung Electronics Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,8 +17,35 @@ # # $1 project/functionality # $2 robot options -# $3 ci-management repo location +# +# functions +# + +function on_exit(){ + rc=$? + if [[ ${WORKSPACE} ]]; then + if [[ ${WORKDIR} ]]; then + rsync -av "$WORKDIR/" "$WORKSPACE/archives/$TESTPLAN" + fi + # Record list of active docker containers + docker ps --format "{{.Image}}" > "$WORKSPACE/archives/$TESTPLAN/_docker-images.log" + + # show memory consumption after all docker instances initialized + docker_stats | tee "$WORKSPACE/archives/$TESTPLAN/_sysinfo-2-after-robot.txt" + fi + # Run teardown script plan if it exists + cd "${TESTPLANDIR}" + TEARDOWN="${TESTPLANDIR}/teardown.sh" + 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 +trap on_exit EXIT function docker_stats(){ #General memory details @@ -39,136 +67,129 @@ 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 +# + +# set and save options for quick failure +harden_set && save_set + if [ $# -eq 0 ] then - echo - echo "Usage: $0 plans// [] []" + echo + echo "Usage: $0 plans// []" echo echo " , , : " echo " The same values as for the '{project}-csit-{functionality}' JJB job template." echo - echo " : " - echo " Path to the ci-management repo checked out locally. It not specified, " - echo " assumed to be adjacent to the integration repo directory." - echo exit 1 fi if [ -z "$WORKSPACE" ]; then - export WORKSPACE=`git rev-parse --show-toplevel` + export WORKSPACE=$(git rev-parse --show-toplevel) fi -rm -rf $WORKSPACE/archives -mkdir -p $WORKSPACE/archives -if [ -f ${WORKSPACE}/${1}/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}" -if [ -z "$3" ]; then - CI=${WORKSPACE}/../../ci-management -else - CI=${3} -fi - - +rm -rf "$WORKSPACE/archives/$TESTPLAN" +mkdir -p "$WORKSPACE/archives/$TESTPLAN" +TESTPLANDIR="${WORKSPACE}/${TESTPLAN}" -TESTPLANDIR=${WORKSPACE}/${TESTPLAN} +# Run installation of prerequired libraries +source_safely "${WORKSPACE}/prepare-csit.sh" -# Assume that if ROBOT_VENV is set, we don't need to reinstall robot -if [ -f ${WORKSPACE}/env.properties ]; then - source ${WORKSPACE}/env.properties -fi -if [ -f ${ROBOT_VENV}/bin/activate ]; then - source ${ROBOT_VENV}/bin/activate -else - source $CI/jjb/integration/include-raw-integration-install-robotframework.sh -fi - -# install required Robot libraries -pip install robotframework-selenium2library==1.8.0 robotframework-extendedselenium2library==0.9.1 - -# install eteutils -mkdir -p ${ROBOT_VENV}/src/onap -rm -rf ${ROBOT_VENV}/src/onap/testsuite -pip install --upgrade --extra-index-url="https://nexus3.onap.org/repository/PyPi.staging/simple" 'robotframework-onap==0.4' - -pip freeze - -# install chrome driver -google-chrome --version -if [ ! -x ${ROBOT_VENV}/bin/chromedriver ]; then - pushd ${ROBOT_VENV}/bin - wget -N http://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip - unzip chromedriver_linux64.zip - chmod +x chromedriver - popd -fi - - -WORKDIR=`mktemp -d --suffix=-robot-workdir` -cd ${WORKDIR} - - -set +u -set -x +# Activate the virtualenv containing all the required libraries installed by prepare-csit.sh +source_safely "${ROBOT_VENV}/bin/activate" +WORKDIR=$(mktemp -d --suffix=-robot-workdir) +cd "${WORKDIR}" # Add csit scripts to PATH -export PATH=${PATH}:${WORKSPACE}/docker/scripts:${WORKSPACE}/scripts:${ROBOT_VENV}/bin -export SCRIPTS=${WORKSPACE}/scripts +export PATH="${PATH}:${WORKSPACE}/docker/scripts:${WORKSPACE}/scripts:${ROBOT_VENV}/bin" +export SCRIPTS="${WORKSPACE}/scripts" export ROBOT_VARIABLES= # Sign in to nexus3 docker repo -docker login -u anonymous -p anonymous nexus3.onap.org:10001 +docker login -u docker -p docker nexus3.onap.org:10001 # Run setup script plan if it exists -cd ${TESTPLANDIR} -SETUP=${TESTPLANDIR}/setup.sh -if [ -f ${SETUP} ]; then +cd "${TESTPLANDIR}" +SETUP="${TESTPLANDIR}/setup.sh" +if [ -f "${SETUP}" ]; then echo "Running setup script ${SETUP}" - source ${SETUP} + source_safely "${SETUP}" fi # show memory consumption after all docker instances initialized -docker_stats | tee $WORKSPACE/archives/_sysinfo-1-after-setup.txt +docker_stats | tee "$WORKSPACE/archives/$TESTPLAN/_sysinfo-1-after-setup.txt" # Run test plan -cd $WORKDIR +cd "$WORKDIR" echo "Reading the testplan:" -cat ${TESTPLANDIR}/testplan.txt | egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' | sed "s|^|${WORKSPACE}/tests/|" > testplan.txt +cat "${TESTPLANDIR}/testplan.txt" | egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' | sed "s|^|${WORKSPACE}/tests/|" > testplan.txt cat testplan.txt SUITES=$( xargs -a testplan.txt ) -echo ROBOT_VARIABLES=${ROBOT_VARIABLES} +echo ROBOT_VARIABLES="${ROBOT_VARIABLES}" echo "Starting Robot test suites ${SUITES} ..." -set +e +relax_set python -m robot.run -N ${TESTPLAN} -v WORKSPACE:/tmp ${ROBOT_VARIABLES} ${TESTOPTIONS} ${SUITES} RESULT=$? -set -e -echo "RESULT: " $RESULT -rsync -av $WORKDIR/ $WORKSPACE/archives - -# Record list of active docker containers -docker ps --format "{{.Image}}" > $WORKSPACE/archives/_docker-images.log - -# show memory consumption after all docker instances initialized -docker_stats | tee $WORKSPACE/archives/_sysinfo-2-after-robot.txt - -# Run teardown script plan if it exists -cd ${TESTPLANDIR} -TEARDOWN=${TESTPLANDIR}/teardown.sh -if [ -f ${TEARDOWN} ]; then - echo "Running teardown script ${TEARDOWN}" - source ${TEARDOWN} -fi - -# TODO: do something with the output - +load_set +echo "RESULT: $RESULT" +# Note that the final steps are done in on_exit function after this exit! exit $RESULT