107 lines
3.4 KiB
YAML
107 lines
3.4 KiB
YAML
- name: Run tox
|
|
args:
|
|
chdir: "{{ zuul_work_dir }}"
|
|
executable: /bin/bash
|
|
environment: "{{ tox_environment | default(omit) }}"
|
|
shell: |
|
|
# 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.
|
|
|
|
venv={{ tox_envlist }}
|
|
|
|
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
|
|
gzip -9 ./testr_results.html
|
|
|
|
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_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
|
|
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_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
|