6290d65b7c
Level 2 verbosity gives some useful output such as the PATH that's used by tox and the start and finish time for each test which can be useful when debugging tox related issues. Other than that, the output is very similar to that of level 1. Change-Id: I34a82bf45546e7b1b6265ecf8a7e9fd73a6cb3a9 Link: https://github.com/tox-dev/tox/search?utf8=%E2%9C%93&q=verbosity2&type=
143 lines
4.1 KiB
Bash
Executable File
143 lines
4.1 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 pbr 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 VENV
|
|
#
|
|
# Where VENV is the name of the tox environment to run (specified in the
|
|
# project's tox.ini file).
|
|
|
|
venv=$1
|
|
|
|
if [[ -z "$venv" ]]; then
|
|
echo "Usage: $?"
|
|
echo
|
|
echo "VENV: The tox environment to run (eg 'python27')"
|
|
exit 1
|
|
fi
|
|
|
|
function freeze_venv {
|
|
[ -e $bin_path/pbr ] && freezecmd=pbr || freezecmd=pip
|
|
|
|
echo "Begin $freezecmd freeze output from test virtualenv:"
|
|
echo "======================================================================"
|
|
${bin_path}/${freezecmd} freeze | sort -f
|
|
echo "======================================================================"
|
|
}
|
|
|
|
function process_testr_artifacts {
|
|
if [ ! -d ".testrepository" ] ; then
|
|
return
|
|
fi
|
|
|
|
if [ -f ".testrepository/0.2" ] ; then
|
|
cp .testrepository/0.2 ./testrepository.subunit
|
|
elif [ -f ".testrepository/0" ] ; then
|
|
$bin_path/testr last --subunit > ./testrepository.subunit
|
|
fi
|
|
/usr/os-testr-env/bin/subunit2html ./testrepository.subunit testr_results.html
|
|
SUBUNIT_SIZE=$(du -k ./testrepository.subunit | awk '{print $1}')
|
|
gzip -9 ./testrepository.subunit
|
|
gzip -9 ./testr_results.html
|
|
|
|
if [[ "$SUBUNIT_SIZE" -gt 50000 ]]; then
|
|
echo
|
|
echo "testrepository.subunit was > 50 MB of uncompressed data!!!"
|
|
echo "Something is causing tests for this project to log significant amounts"
|
|
echo "of data. This may be writers to python logging, stdout, or stderr."
|
|
echo "Failing this test as a result"
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
rancount=$($bin_path/testr last | sed -ne 's/Ran \([0-9]\+\).*tests in.*/\1/p')
|
|
if [ -z "$rancount" ] || [ "$rancount" -eq "0" ] ; then
|
|
echo
|
|
echo "Zero tests were run. At least one test should have been run."
|
|
echo "Failing this test as a result"
|
|
echo
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function check_sudo_usage {
|
|
sudo $script_path/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
|
|
}
|
|
|
|
function check_oom {
|
|
$script_path/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
|
|
}
|
|
|
|
function check_nose_html {
|
|
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
|
|
fi
|
|
}
|
|
|
|
script_path=/usr/local/jenkins/slave_scripts
|
|
bin_path=.tox/$venv/bin
|
|
|
|
export PYTHON=$bin_path/python
|
|
export NOSE_WITH_XUNIT=1
|
|
export NOSE_WITH_HTML_OUTPUT=1
|
|
export NOSE_HTML_OUT_FILE='nose_results.html'
|
|
if [[ -z "$TMPDIR" ]]; then
|
|
export TMPDIR=$(/bin/mktemp -d)
|
|
fi
|
|
export UPPER_CONSTRAINTS_FILE=$(pwd)/upper-constraints.txt
|
|
trap "rm -rf $TMPDIR" EXIT
|
|
|
|
cat /etc/image-hostname.txt
|
|
|
|
$script_path/jenkins-oom-grep.sh pre
|
|
|
|
sudo $script_path/jenkins-sudo-grep.sh pre
|
|
|
|
tox -vv -e$venv
|
|
result=$?
|
|
|
|
freeze_venv
|
|
process_testr_artifacts
|
|
check_sudo_usage
|
|
check_oom
|
|
check_nose_html
|
|
|
|
# Rename tox' .log files to .log.txt so that Apache serves them as
|
|
# text/plain files since it can handle .txt special - and .log is
|
|
# unknown and therefore served as binary.
|
|
find .tox -type f -name "*.log" -exec mv {} {}.txt \;
|
|
|
|
exit $result
|