ff91e70e42
* modules/jenkins/files/slave_scripts/run-tox.sh: set -e when checking test counts so that the case when no tests are found and test complains about a missing integer expression we fail the Jenkins job. Change-Id: I2b416637d02d0b87fd3f9ece323e168c039da38b Reviewed-on: https://review.openstack.org/30818 Reviewed-by: Jeremy Stanley <fungi@yuggoth.org> Reviewed-by: James E. Blair <corvus@inaugust.com> Approved: Monty Taylor <mordred@inaugust.com> Reviewed-by: Monty Taylor <mordred@inaugust.com> Tested-by: Jenkins
126 lines
3.7 KiB
Bash
Executable File
126 lines
3.7 KiB
Bash
Executable File
#!/bin/bash -x
|
|
|
|
# If a bundle file is present, call tox with the jenkins version of
|
|
# the test environment so it is used. Otherwise, use the normal
|
|
# (non-bundle) test environment. Also, run pip freeze on the
|
|
# resulting environment at the end so that we have a record of exactly
|
|
# what packages we ended up testing.
|
|
#
|
|
# Usage: run-tox.sh PYTHONVERSION
|
|
#
|
|
# Where PYTHONVERSION is the numeric version identifier used as a suffix
|
|
# in the tox.ini file. E.g., "26" or "27" for "py26"/"jenkins26" or
|
|
# "py27"/"jenkins27" respectively.
|
|
|
|
version=$1
|
|
org=$2
|
|
project=$3
|
|
|
|
if [[ -z "$version" || -z "$org" || -z "$project" ]]
|
|
then
|
|
echo "Usage: $? VERSION ORG PROJECT"
|
|
echo
|
|
echo "VERSION: The tox environment python version (eg '27')"
|
|
echo "ORG: The project organization (eg 'openstack')"
|
|
echo "PROJECT: The project name (eg 'nova')"
|
|
exit 1
|
|
fi
|
|
|
|
venv=py$version
|
|
|
|
export NOSE_WITH_XUNIT=1
|
|
export NOSE_WITH_HTML_OUTPUT=1
|
|
export NOSE_HTML_OUT_FILE='nose_results.html'
|
|
export TMPDIR=`/bin/mktemp -d`
|
|
trap "rm -rf $TMPDIR" EXIT
|
|
|
|
/usr/local/jenkins/slave_scripts/jenkins-oom-grep.sh pre
|
|
|
|
sudo /usr/local/jenkins/slave_scripts/jenkins-sudo-grep.sh pre
|
|
|
|
/usr/local/jenkins/slave_scripts/select-mirror.sh $org $project
|
|
|
|
# Workaround the combo of tox running setup.py outside of virtualenv
|
|
# and RHEL having an old distribute. The next line can be removed
|
|
# when either get fixed.
|
|
python setup.py --version 2>/dev/null
|
|
|
|
tox -e$venv
|
|
result=$?
|
|
|
|
echo "Begin pip freeze output from test virtualenv:"
|
|
echo "======================================================================"
|
|
.tox/$venv/bin/pip freeze
|
|
echo "======================================================================"
|
|
|
|
if [ -d ".testrepository" ] ; then
|
|
if [ -f ".testrepository/0.2" ] ; then
|
|
cp .testrepository/0.2 ./subunit_log.txt
|
|
elif [ -f ".testrepository/0" ] ; then
|
|
cp .testrepository/0 ./subunit_log.txt
|
|
fi
|
|
.tox/$venv/bin/python /usr/local/jenkins/slave_scripts/subunit2html.py ./subunit_log.txt testr_results.html
|
|
gzip -9 ./subunit_log.txt
|
|
gzip -9 ./testr_results.html
|
|
|
|
set -e
|
|
foundcount=$(.tox/$venv/bin/python .tox/$venv/bin/testr list-tests | sed -e '1d' | wc -l)
|
|
rancount=$(.tox/$venv/bin/python .tox/$venv/bin/testr last | sed -ne 's/Ran \([0-9]\+\).*tests in.*/\1/p')
|
|
if [ "$rancount" -lt "$foundcount" ] ; then
|
|
echo
|
|
echo "The number of tests found was greater than the number of tests"
|
|
echo "that were run. This indicates a fatal error occured while"
|
|
echo "running the tests."
|
|
echo "Tests found: $foundcount Tests ran: $rancount"
|
|
echo
|
|
exit 1
|
|
fi
|
|
set +e
|
|
fi
|
|
|
|
sudo /usr/local/jenkins/slave_scripts/jenkins-sudo-grep.sh post
|
|
sudoresult=$?
|
|
|
|
if [ $sudoresult -ne "0" ]
|
|
then
|
|
echo
|
|
echo "This test has failed because it attempted to execute commands"
|
|
echo "with sudo. See above for the exact commands used."
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
/usr/local/jenkins/slave_scripts/jenkins-oom-grep.sh post
|
|
oomresult=$?
|
|
|
|
if [ $oomresult -ne "0" ]
|
|
then
|
|
echo
|
|
echo "This test has failed because it attempted to exceed configured"
|
|
echo "memory limits and was killed prior to completion. See above"
|
|
echo "for related kernel messages."
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
htmlreport=$(find . -name $NOSE_HTML_OUT_FILE)
|
|
if [ -f "$htmlreport" ]
|
|
then
|
|
passcount=$(grep -c 'tr class=.passClass' $htmlreport)
|
|
if [ $passcount -eq "0" ]
|
|
then
|
|
echo
|
|
echo "Zero tests passed, which probably means there was an error"
|
|
echo "parsing one of the python files, or that some other failure"
|
|
echo "during test setup prevented a sane run."
|
|
echo
|
|
exit 1
|
|
fi
|
|
else
|
|
echo
|
|
echo "WARNING: Unable to find $NOST_HTML_OUT_FILE to confirm results!"
|
|
echo
|
|
fi
|
|
|
|
exit $result
|