Add a gate-specific tox env for functional tests

The functional gate jobs (*-neutron-dsvm-functional) need special
configuration (e.g. OS_SUDO_TESTING, OS_ROOTWRAP_CMD) to run tests.
This patch adds a new gate-specific tox env (tox -e dsvm-functional)
that sets the appropriate values and allows easy duplication of the
results of the upstream job on a host that has successfully run
devstack with neutron enabled.

A new configuration option, OS_FAIL_ON_MISSING_DEPS, is also set by
the dsvm-functional tox env to ensure that dependency failures will
result in failures rather than skips when run in the gate.

Change-Id: Idbfef1ba72ed129a3021509c7969e2685b8a6d09
Partial-bug: #1336172
This commit is contained in:
Maru Newby 2014-07-02 00:35:12 +00:00
parent 798824cab0
commit 37086a8f17
5 changed files with 34 additions and 14 deletions

View File

@ -4,16 +4,16 @@ Testing Neutron
Overview Overview
-------- --------
The unit tests are meant to cover as much code as possible and should The unit tests (neutron/test/unit/) are meant to cover as much code as
be executed without the service running. They are designed to test possible and should be executed without the service running. They are
the various pieces of the neutron tree to make sure any new changes designed to test the various pieces of the neutron tree to make sure
don't break existing functionality. any new changes don't break existing functionality.
The functional tests are intended to validate actual system The functional tests (neutron/tests/functional/) are intended to
interaction. Mocks should be used sparingly, if at all. Care validate actual system interaction. Mocks should be used sparingly,
should be taken to ensure that existing system resources are not if at all. Care should be taken to ensure that existing system
modified and that resources created in tests are properly cleaned resources are not modified and that resources created in tests are
up. properly cleaned up.
Development process Development process
------------------- -------------------
@ -100,6 +100,16 @@ Neutron source code::
tox tox
To run functional tests that do not require sudo privileges or
specific-system dependencies::
tox -e functional
To run all the functional tests in an environment that has been configured
by devstack to support sudo and system-specific dependencies::
tox -e dsvm-functional
For more information on the standard Tox-based test infrastructure used by For more information on the standard Tox-based test infrastructure used by
OpenStack and how to do some common test/debugging procedures with Testr, OpenStack and how to do some common test/debugging procedures with Testr,
see this wiki page: see this wiki page:

View File

@ -29,7 +29,7 @@ class BaseLinuxTestCase(functional_base.BaseSudoTestCase):
try: try:
utils.execute(cmd, root_helper=root_helper) utils.execute(cmd, root_helper=root_helper)
except RuntimeError as e: except RuntimeError as e:
if error_text in str(e): if error_text in str(e) and not self.fail_on_missing_deps:
self.skipTest(skip_msg) self.skipTest(skip_msg)
raise raise

View File

@ -47,8 +47,6 @@ class BaseMonitorTest(linux_base.BaseOVSLinuxTestCase):
def _check_test_requirements(self): def _check_test_requirements(self):
self.check_sudo_enabled() self.check_sudo_enabled()
self.check_command(['which', 'ovsdb-client'],
'Exit code: 1', 'ovsdb-client is not installed')
self.check_command(['ovsdb-client', 'list-dbs'], self.check_command(['ovsdb-client', 'list-dbs'],
'Exit code: 1', 'Exit code: 1',
'password-less sudo not granted for ovsdb-client', 'password-less sudo not granted for ovsdb-client',

View File

@ -46,8 +46,12 @@ class BaseSudoTestCase(base.BaseTestCase):
def setUp(self): def setUp(self):
super(BaseSudoTestCase, self).setUp() super(BaseSudoTestCase, self).setUp()
self.root_helper = os.environ.get('OS_ROOTWRAP_CMD', SUDO_CMD) env = os.environ
self.sudo_enabled = env.get('OS_SUDO_TESTING') in base.TRUE_STRING
self.root_helper = env.get('OS_ROOTWRAP_CMD', SUDO_CMD)
self.fail_on_missing_deps = (
env.get('OS_FAIL_ON_MISSING_DEPS') in base.TRUE_STRING)
def check_sudo_enabled(self): def check_sudo_enabled(self):
if os.environ.get('OS_SUDO_TESTING') not in base.TRUE_STRING: if not self.sudo_enabled:
self.skipTest('testing with sudo is not enabled') self.skipTest('testing with sudo is not enabled')

View File

@ -18,6 +18,14 @@ setenv = OS_TEST_PATH=./neutron/tests/functional
commands = commands =
python setup.py testr --slowest --testr-args='{posargs}' python setup.py testr --slowest --testr-args='{posargs}'
[testenv:dsvm-functional]
setenv = OS_TEST_PATH=./neutron/tests/functional
OS_SUDO_TESTING=1
OS_ROOTWRAP_CMD=sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
OS_FAIL_ON_MISSING_DEPS=1
commands =
python setup.py testr --slowest --testr-args='{posargs}'
[tox:jenkins] [tox:jenkins]
sitepackages = True sitepackages = True
downloadcache = ~/cache/pip downloadcache = ~/cache/pip