Clark Boylan 000952cd89 Convert subunit v1 log results to v2 format.
* modules/jenkins/files/slave_scripts/run-unittests.sh: Generating html
from subunit v1 files is much slower than generating them from subunitv2
files because parsing v2 with the v2 parser is much faster than parsing
v1 with the v2 parser and feeding the leftovers through a v1 parser.
Due to this time difference convert v1 files to v2 before parsing them
to generate html.

Change-Id: I7264d68089fb40de62e47660fe1f31c9adcabdb0
2013-11-21 15:59:01 -08:00

105 lines
2.9 KiB
Bash
Executable File

#!/bin/bash -x
# Call tox with the jenkins version of the test environment so it is used.
# 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-unittests.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
source /usr/local/jenkins/slave_scripts/select-mirror.sh $org $project
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
.tox/$venv/bin/subunit-1to2 < .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
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