Victor Stinner 31cfdbd407 Fix Python 3 support for eventlet monkey-patching
Use eventlet.green.subprocess if eventlet is used and enable eventlet
tests on Python 3.

This change adds oslo_rootwrap.subprocess which is
eventlet.green.subprocess if eventlet monkey-patching is enabled or
if the TEST_EVENTLET environment variable is set, or subprocess of
the Python standard library otherwise.

When eventlet is used (with monkey-patching or not), it's more
reliable to use eventlet.green.subprocess instead of using directly
subprocess from the Python standard library.

On Python 2, it "works" to use directly subprocess: subprocess.Popen
calls os.pipe() and os.fdopen(fd) which are both monkey-patched. On
Python 3, it doesn't work because subprocess uses os.pipe() and
io.open(fd), and the io module is *not* monkey-patched at all.

Change-Id: Ib859bebe52612b35f0f1f53aedf76222683795e7
2015-10-13 21:51:47 +02:00

50 lines
1.4 KiB
INI

[tox]
minversion = 1.6
envlist = py34,py26,py27,pep8
skipsdist = True
[testenv]
usedevelop = True
install_command = pip install -U {opts} {packages}
setenv = VIRTUAL_ENV={envdir}
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
# Functional tests with Eventlet involve monkeypatching, so force them to be
# run in a separate process
whitelist_externals = env
commands =
python setup.py testr --slowest --testr-args='(?!tests.test_functional_eventlet)tests {posargs}'
env TEST_EVENTLET=1 python setup.py testr --slowest --testr-args='tests.test_functional_eventlet'
[testenv:pep8]
commands = flake8
[testenv:cover]
deps = {[testenv]deps}
coverage
setenv = VIRTUAL_ENV={envdir}
commands =
python setup.py testr --coverage
[testenv:venv]
commands = {posargs}
[testenv:docs]
commands = python setup.py build_sphinx
[flake8]
show-source = True
exclude = .tox,dist,doc,*.egg,build
[testenv:benchmark]
commands = python benchmark/benchmark.py
[testenv:pip-missing-reqs]
# do not install test-requirements as that will pollute the virtualenv for
# determining missing packages
# this also means that pip-missing-reqs must be installed separately, outside
# of the requirements.txt files
deps = pip_missing_reqs
commands = pip-missing-reqs -d --ignore-module=oslo_rootwrap* --ignore-module=pkg_resources --ignore-file=oslo_rootwrap/test.py --ignore-file=oslo_rootwrap/tests/* oslo_rootwrap