diff --git a/modules/jenkins/files/slave_scripts/run-tox.sh b/modules/jenkins/files/slave_scripts/run-tox.sh index 1536a1a2a9..afe8092ee7 100755 --- a/modules/jenkins/files/slave_scripts/run-tox.sh +++ b/modules/jenkins/files/slave_scripts/run-tox.sh @@ -6,64 +6,34 @@ # resulting environment at the end so that we have a record of exactly # what packages we ended up testing. # -# Usage: run-tox.sh PYTHONVERSION +# Usage: run-tox.sh VENV # -# 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. +# Where VENV is the name of the tox environment to run (specified in the +# project's tox.ini file). -version=$1 +venv=$1 org=$2 project=$3 -if [[ -z "$version" || -z "$org" || -z "$project" ]] +if [[ -z "$venv" || -z "$org" || -z "$project" ]] then - echo "Usage: $? VERSION ORG PROJECT" + echo "Usage: $? VENV ORG PROJECT" echo - echo "VERSION: The tox environment python version (eg '27')" - echo "ORG: The project organization (eg 'openstack')" + echo "VENV: The tox environment to run (eg 'python27')" + echo "ORG: The project organization (eg 'stackforge')" 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 -# 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 +tox -v -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=$? @@ -89,23 +59,4 @@ then 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 diff --git a/modules/jenkins/files/slave_scripts/run-unittests.sh b/modules/jenkins/files/slave_scripts/run-unittests.sh new file mode 100755 index 0000000000..66b2791032 --- /dev/null +++ b/modules/jenkins/files/slave_scripts/run-unittests.sh @@ -0,0 +1,104 @@ +#!/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 + 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 +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 diff --git a/modules/openstack_project/files/jenkins_job_builder/config/horizon.yaml b/modules/openstack_project/files/jenkins_job_builder/config/horizon.yaml index b800e19d25..69528de23a 100644 --- a/modules/openstack_project/files/jenkins_job_builder/config/horizon.yaml +++ b/modules/openstack_project/files/jenkins_job_builder/config/horizon.yaml @@ -23,7 +23,7 @@ builders: - gerrit-git-prep - - shell: '/usr/local/jenkins/slave_scripts/run-tox.sh 27dj14 openstack horizon' + - shell: '/usr/local/jenkins/slave_scripts/run-unittests.sh 27dj14 openstack horizon' - assert-no-extra-files publishers: diff --git a/modules/openstack_project/files/jenkins_job_builder/config/macros.yaml b/modules/openstack_project/files/jenkins_job_builder/config/macros.yaml index da6a807a32..1371089a59 100644 --- a/modules/openstack_project/files/jenkins_job_builder/config/macros.yaml +++ b/modules/openstack_project/files/jenkins_job_builder/config/macros.yaml @@ -129,22 +129,22 @@ - builder: name: python26 builders: - - shell: "/usr/local/jenkins/slave_scripts/run-tox.sh 26 {github-org} {project}" + - shell: "/usr/local/jenkins/slave_scripts/run-unittests.sh 26 {github-org} {project}" - builder: name: python27 builders: - - shell: "/usr/local/jenkins/slave_scripts/run-tox.sh 27 {github-org} {project}" + - shell: "/usr/local/jenkins/slave_scripts/run-unittests.sh 27 {github-org} {project}" - builder: name: python33 builders: - - shell: "/usr/local/jenkins/slave_scripts/run-tox.sh 33 {github-org} {project}" + - shell: "/usr/local/jenkins/slave_scripts/run-unittests.sh 33 {github-org} {project}" - builder: name: pypy builders: - - shell: "/usr/local/jenkins/slave_scripts/run-tox.sh py {github-org} {project}" + - shell: "/usr/local/jenkins/slave_scripts/run-unittests.sh py {github-org} {project}" - builder: name: assert-no-extra-files diff --git a/modules/openstack_project/files/jenkins_job_builder/config/misc.yaml b/modules/openstack_project/files/jenkins_job_builder/config/misc.yaml index 2a6aa22883..6926107cab 100644 --- a/modules/openstack_project/files/jenkins_job_builder/config/misc.yaml +++ b/modules/openstack_project/files/jenkins_job_builder/config/misc.yaml @@ -32,11 +32,11 @@ node: '{node}' - job-template: - name: 'gate-{name}-tox-{env}' + name: 'gate-{name}-unittests-{env}' builders: - gerrit-git-prep - - shell: '/usr/local/jenkins/slave_scripts/run-tox.sh {env} {github-org} {name}' + - shell: '/usr/local/jenkins/slave_scripts/run-unittests.sh {env} {github-org} {name}' - assert-no-extra-files publishers: diff --git a/modules/openstack_project/files/jenkins_job_builder/config/projects.yaml b/modules/openstack_project/files/jenkins_job_builder/config/projects.yaml index b0413e5c66..7f08fb5454 100644 --- a/modules/openstack_project/files/jenkins_job_builder/config/projects.yaml +++ b/modules/openstack_project/files/jenkins_job_builder/config/projects.yaml @@ -118,7 +118,7 @@ jobs: - python-jobs - - gate-{name}-tox-{env} + - gate-{name}-unittests-{env} - hook-{name}-rtfd - pypi-jobs diff --git a/modules/openstack_project/files/zuul/layout.yaml b/modules/openstack_project/files/zuul/layout.yaml index 982f192be3..c39d53c340 100644 --- a/modules/openstack_project/files/zuul/layout.yaml +++ b/modules/openstack_project/files/zuul/layout.yaml @@ -2508,8 +2508,8 @@ projects: - gate-sqlalchemy-migrate-python26 - gate-sqlalchemy-migrate-python27 experimental: - - gate-sqlalchemy-migrate-tox-26sa07 - - gate-sqlalchemy-migrate-tox-27sa07 + - gate-sqlalchemy-migrate-unittests-26sa07 + - gate-sqlalchemy-migrate-unittests-27sa07 post: - sqlalchemy-migrate-branch-tarball - hook-sqlalchemy-migrate-rtfd