summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJames E. Blair <jeblair@hp.com>2012-04-26 17:40:10 +0000
committerJames E. Blair <jeblair@hp.com>2012-04-27 23:45:38 +0000
commitae58edcba737a78fcae299e0bf76e30ba5492e60 (patch)
treef3f1dc53de641ac252a073b367a65f4cd12f9bce /tools
parent3344eac545dc9224dca49fa937e727666f7cee2d (diff)
downloadpython-glanceclient-ae58edcba737a78fcae299e0bf76e30ba5492e60.tar.gz
Use tox for running tests locally.
See: http://wiki.openstack.org/ProjectTestingInterface Tox can manage virtualenvs, and is currently doing so for running tests in Jenkins. It's just as, or more, useful for running tests locally, so this starts the migration from the run_tests system to tox. The goal is to reduce duplicate testing infrastructure, and get what's running locally on developer workstations as close to what is run by Jenkins as possible. This patch removes run_tests.py, and the scripts that manage .venv. It makes run_tests.sh call tox to facilitate the transition for developers used to typing "run_tests.sh". Developers will need tox installed on their workstations. It can be installed from PyPI with "pip install tox". run_tests.sh outputs those instructions if tox is not present. New facilities are available using tox directly, including: tox -e py26 # run tests under python 2.6 tox -e py27 # run tests under python 2.7 tox -e pep8 # run pep8 tests tox # run all of the above tox -e venv foo # run the command "foo" inside a virtualenv The configuration of the openstack nose plugin is removed from setup.cfg and added to the nosetests command line arguments in tox. It is used when running tox from the command line, so the enhanced, colorized output is visible to developers running the test suite locally. However, when Jenkins runs tox, the xunit plugin will be used instead, providing output natively understood by jenkins which is much more readable in that context. Change-Id: Id678c2fb8a5a7d79c680d3d1f2f12141f73dc8a6
Diffstat (limited to 'tools')
-rw-r--r--tools/install_venv.py129
-rwxr-xr-xtools/with_venv.sh12
2 files changed, 9 insertions, 132 deletions
diff --git a/tools/install_venv.py b/tools/install_venv.py
deleted file mode 100644
index d404744..0000000
--- a/tools/install_venv.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright 2012 OpenStack LLC
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-virtualenv installation script
-"""
-
-import os
-import subprocess
-import sys
-
-
-ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
-VENV = os.path.join(ROOT, '.venv')
-PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
-TEST_REQUIRES = os.path.join(ROOT, 'tools', 'test-requires')
-PY_VERSION = "python%s.%s" % (sys.version_info[0], sys.version_info[1])
-
-
-def die(message, *args):
- print >>sys.stderr, message % args
- sys.exit(1)
-
-
-def check_python_version():
- if sys.version_info < (2, 6):
- die("Need Python Version >= 2.6")
-
-
-def run_command(cmd, redirect_output=True, check_exit_code=True):
- """
- Runs a command in an out-of-process shell, returning the
- output of that command. Working directory is ROOT.
- """
- if redirect_output:
- stdout = subprocess.PIPE
- else:
- stdout = None
-
- proc = subprocess.Popen(cmd, cwd=ROOT, stdout=stdout)
- output = proc.communicate()[0]
- if check_exit_code and proc.returncode != 0:
- die('Command "%s" failed.\n%s', ' '.join(cmd), output)
- return output
-
-
-HAS_EASY_INSTALL = bool(run_command(['which', 'easy_install'],
- check_exit_code=False).strip())
-HAS_VIRTUALENV = bool(run_command(['which', 'virtualenv'],
- check_exit_code=False).strip())
-
-
-def check_dependencies():
- """Make sure virtualenv is in the path."""
-
- print 'Checking for virtualenv...'
- if not HAS_VIRTUALENV:
- print 'not found.'
- # Try installing it via easy_install...
- if HAS_EASY_INSTALL:
- print 'Installing virtualenv via easy_install...',
- if not (run_command(['which', 'easy_install']) and
- run_command(['easy_install', 'virtualenv'])):
- die('ERROR: virtualenv not found.\n\nNova development'
- ' requires virtualenv, please install it using your'
- ' favorite package management tool')
- print 'done.'
- print 'done.'
-
-
-def create_virtualenv(venv=VENV):
- """Creates the virtual environment and installs PIP only into the
- virtual environment
- """
- print 'Creating venv...',
- run_command(['virtualenv', '-q', '--no-site-packages', VENV])
- print 'done.'
- print 'Installing pip in virtualenv...',
- if not run_command(['tools/with_venv.sh', 'easy_install', 'pip']).strip():
- die("Failed to install pip.")
- print 'done.'
-
-
-def install_dependencies(venv=VENV):
- print 'Installing dependencies with pip (this can take a while)...'
- run_command(['tools/with_venv.sh', 'pip', 'install', '-r',
- PIP_REQUIRES, '-r', TEST_REQUIRES], redirect_output=False)
-
-
-def print_help():
- help = """
- Virtual environment configuration complete.
-
- To activate the virtualenv for the extent of your current shell
- session you can run:
-
- $ source %s/bin/activate
-
- Or, if you prefer, you can run commands in the virtualenv on a case by case
- basis by running:
-
- $ tools/with_venv.sh <your command>
-
- """ % VENV
- print help
-
-
-def main(argv):
- check_python_version()
- check_dependencies()
- create_virtualenv()
- install_dependencies()
- print_help()
-
-if __name__ == '__main__':
- main(sys.argv)
diff --git a/tools/with_venv.sh b/tools/with_venv.sh
index c8d2940..e6e44f5 100755
--- a/tools/with_venv.sh
+++ b/tools/with_venv.sh
@@ -1,4 +1,10 @@
#!/bin/bash
-TOOLS=`dirname $0`
-VENV=$TOOLS/../.venv
-source $VENV/bin/activate && $@
+
+command -v tox > /dev/null 2>&1
+if [ $? -ne 0 ]; then
+ echo 'This script requires "tox" to run.'
+ echo 'You can install it with "pip install tox".'
+ exit 1;
+fi
+
+tox -evenv -- $@