
Trying to use setup_requires with the version of distribute on rhel doesn't work because that version doesn't properly re-import itself. When tox gets involved, it tries to run setup.py sdist outside of the created virtualenv, which means it's ignoring our declared deps for that action. The bug in distribute is worked around by running any setup.py command once and letting it fail, then running again. So - python setup.py --version is the cheapest setup.py command to trigger the behavior that needs to happen. Throw the error results to /dev/null because we expect there to be a traceback and we don't want to confuse people reading log outputs. Leave stdout because it's good to be able to track which setup_requires requirements it is pulling down before it dies on not actually being able to use them. Change-Id: I982a08ffa5784ed97f70f41d91a58da66b7498b6 Reviewed-on: https://review.openstack.org/26533 Reviewed-by: James E. Blair <corvus@inaugust.com> Approved: Clark Boylan <clark.boylan@gmail.com> Reviewed-by: Clark Boylan <clark.boylan@gmail.com> Tested-by: Jenkins
126 lines
3.5 KiB
Bash
Executable File
126 lines
3.5 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 [ -f ".testrepository/0" ]
|
|
then
|
|
cp .testrepository/0 ./subunit_log.txt
|
|
.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
|
|
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
|
|
|
|
if [ -d ".testrepository" ]
|
|
then
|
|
source .tox/$venv/bin/activate
|
|
foundcount=$(testr list-tests | sed -e '1d' | wc -l)
|
|
rancount=$(testr last | sed -ne 's/Ran \([0-9]\+\).*tests in.*/\1/p')
|
|
if [ "$foundcount" -ne "$rancount" ]
|
|
then
|
|
echo
|
|
echo "The number of tests found did not match 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
|
|
fi
|
|
|
|
exit $result
|