diff --git a/.gitignore b/.gitignore index 941cdc6ad9f6..103fc170e733 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ .pydevproject .ropeproject .testrepository/ +.stestr/ .tox .idea .venv diff --git a/.stestr.conf b/.stestr.conf new file mode 100644 index 000000000000..f89d3980dd03 --- /dev/null +++ b/.stestr.conf @@ -0,0 +1,3 @@ +[DEFAULT] +test_path=./nova/tests/unit +top_dir=./ diff --git a/.testr.conf b/.testr.conf deleted file mode 100644 index 2e95b8305439..000000000000 --- a/.testr.conf +++ /dev/null @@ -1,18 +0,0 @@ -[DEFAULT] -test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ - OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \ - OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-160} \ - ${PYTHON:-python} -m subunit.run discover -t ./ ${OS_TEST_PATH:-./nova/tests} $LISTOPT $IDOPTION - -test_id_option=--load-list $IDFILE -test_list_option=--list -# NOTE(cdent): The group_regex describes how testrepository will -# group tests into the same process when running concurently. The -# following insures that gabbi tests coming from the same YAML file -# are all in the same process. This is important because each YAML -# file represents an ordered sequence of HTTP requests. Note that -# tests which do not match this regex will not be grouped in any -# special way. See the following for more details. -# http://testrepository.readthedocs.io/en/latest/MANUAL.html#grouping-tests -# https://gabbi.readthedocs.io/en/latest/#purpose -group_regex=nova\.tests\.functional\.api\.openstack\.placement\.test_placement_api(?:\.|_)([^_]+) diff --git a/test-requirements.txt b/test-requirements.txt index 9a3948dd92c9..b2444f6da0ff 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -17,9 +17,8 @@ requests-mock>=1.1 # Apache-2.0 sphinx>=1.6.2 # BSD os-api-ref>=1.0.0 # Apache-2.0 oslotest>=1.10.0 # Apache-2.0 -os-testr>=0.8.0 # Apache-2.0 +stestr>=2.0.0 # Apache-2.0 osprofiler>=1.4.0 # Apache-2.0 -testrepository>=0.0.18 # Apache-2.0/BSD testresources>=0.2.4 # Apache-2.0/BSD testscenarios>=0.4 # Apache-2.0/BSD testtools>=1.4.0 # MIT diff --git a/tox.ini b/tox.ini index 64cc1136b5cf..bcbb1ede6553 100644 --- a/tox.ini +++ b/tox.ini @@ -12,13 +12,14 @@ whitelist_externals = bash env install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/pike} {opts} {packages} setenv = VIRTUAL_ENV={envdir} - OS_TEST_PATH=./nova/tests/unit LANGUAGE=en_US LC_ALL=en_US.utf-8 + OS_STDOUT_CAPTURE=1 + OS_STDERR_CAPTURE=1 + OS_TEST_TIMEOUT=160 deps = -r{toxinidir}/test-requirements.txt commands = find . -type f -name "*.pyc" -delete - rm -Rf .testrepository/times.dbm passenv = OS_DEBUG GENERATE_HASHES # there is also secret magic in subunit-trace which lets you run in a fail only # mode. To do this define the TRACE_FAILONLY environmental variable. @@ -26,12 +27,21 @@ passenv = OS_DEBUG GENERATE_HASHES [testenv:py27] commands = {[testenv]commands} - ostestr '{posargs}' + stestr run '{posargs}' + env TEST_OSPROFILER=1 stestr run --combine --no-discover 'nova.tests.unit.test_profiler' + stestr slowest [testenv:py35] commands = {[testenv]commands} - bash tools/pretty_tox3.sh '{posargs}' + stestr run --blacklist-file=tests-py3.txt '{posargs}' + env TEST_OSPROFILER=1 stestr run --combine --no-discover 'nova.tests.unit.test_profiler' + +[testenv:py36] +commands = + {[testenv]commands} + stestr run --blacklist-file=tests-py3.txt '{posargs}' + env TEST_OSPROFILER=1 stestr run --combine --no-discover 'nova.tests.unit.test_profiler' [testenv:pep8] basepython = python2.7 @@ -57,35 +67,47 @@ commands = # python 3.x basepython = python2.7 usedevelop = True -setenv = VIRTUAL_ENV={envdir} - OS_TEST_PATH=./nova/tests/functional - LANGUAGE=en_US +setenv = {[testenv]setenv} commands = - find . -type f -name "*.pyc" -delete - ostestr '{posargs}' + {[testenv]commands} +# NOTE(cdent): The group_regex describes how stestr will group tests into the +# same process when running concurently. The following ensures that gabbi tests +# coming from the same YAML file are all in the same process. This is important +# because each YAML file represents an ordered sequence of HTTP requests. Note +# that tests which do not match this regex will not be grouped in any +# special way. See the following for more details. +# http://stestr.readthedocs.io/en/latest/MANUAL.html#grouping-tests +# https://gabbi.readthedocs.io/en/latest/#purpose + stestr --test-path=./nova/tests/functional --group-regex=nova\.tests\.functional\.api\.openstack\.placement\.test_placement_api(?:\.|_)([^_]+) run '{posargs}' + stestr slowest # TODO(gcb) Merge this into [testenv:functional] when functional tests are gating # with python 3.5 [testenv:functional-py35] basepython = python3.5 usedevelop = True -setenv = VIRTUAL_ENV={envdir} - OS_TEST_PATH=./nova/tests/functional - LANGUAGE=en_US +setenv = {[testenv]setenv} commands = {[testenv]commands} - bash tools/pretty_tox3.sh '{posargs}' +# NOTE(cdent): The group_regex describes how stestr will group tests into the +# same process when running concurently. The following ensures that gabbi tests +# coming from the same YAML file are all in the same process. This is important +# because each YAML file represents an ordered sequence of HTTP requests. Note +# that tests which do not match this regex will not be grouped in any +# special way. See the following for more details. +# http://stestr.readthedocs.io/en/latest/MANUAL.html#grouping-tests +# https://gabbi.readthedocs.io/en/latest/#purpose + stestr --test-path=./nova/tests/functional --group-regex=nova\.tests\.functional\.api\.openstack\.placement\.test_placement_api(?:\.|_)([^_]+) run '{posargs}' [testenv:api-samples] usedevelop = True -setenv = VIRTUAL_ENV={envdir} - GENERATE_SAMPLES=True - PYTHONHASHSEED=0 - OS_TEST_PATH=./nova/tests/functional/api_sample_tests - LANGUAGE=en_US +setenv = {[testenv]setenv} + GENERATE_SAMPLES=True + PYTHONHASHSEED=0 commands = find . -type f -name "*.pyc" -delete - ostestr '{posargs}' + stestr --test-path=./nova/tests/functional/api_sample_tests run '{posargs}' + stestr slowest [testenv:genconfig] commands = oslo-config-generator --config-file=etc/nova/nova-config-generator.conf @@ -96,10 +118,15 @@ commands = oslopolicy-sample-generator --config-file=etc/nova/nova-policy-genera [testenv:cover] # Also do not run test_coverage_ext tests while gathering coverage as those # tests conflict with coverage. +setenv = {[testenv]setenv} + PYTHON=coverage run --source nova --parallel-mode commands = coverage erase find . -type f -name "*.pyc" -delete - python setup.py testr --coverage --testr-args='{posargs}' + stestr run '{posargs}' + coverage combine + coverage html -d cover + coverage xml -o cover/coverage.xml coverage report [testenv:debug]