Support for concurrent full-stack tests

This patch introduces the last step of complete test separation for
full-stack tests - separate rabbitmq queues - in the form of rabbitmq
virtual hosts.

* This patch also renames EnvironmentFixture to FullstackFixture, for
  clarity.

Change-Id: I24776e3970a73fdd3271023da7967f2c7261621b
Closes-bug: #1452737
This commit is contained in:
John Schwarz 2015-05-07 15:22:41 +03:00
parent 6da51bdaa6
commit cc1efd0855
3 changed files with 36 additions and 9 deletions

View File

@ -97,7 +97,7 @@ class ConfigFixture(fixtures.Fixture):
class NeutronConfigFixture(ConfigFixture):
def __init__(self, temp_dir, connection):
def __init__(self, temp_dir, connection, rabbitmq_environment):
super(NeutronConfigFixture, self).__init__(
temp_dir, base_filename='neutron.conf')
@ -112,9 +112,10 @@ class NeutronConfigFixture(ConfigFixture):
'core_plugin': 'neutron.plugins.ml2.plugin.Ml2Plugin',
'service_plugins': ('neutron.services.l3_router.'
'l3_router_plugin.L3RouterPlugin'),
'rabbit_userid': 'stackrabbit',
'rabbit_password': '127.0.0.1',
'rabbit_userid': rabbitmq_environment.user,
'rabbit_password': rabbitmq_environment.password,
'rabbit_hosts': '127.0.0.1',
'rabbit_virtual_host': rabbitmq_environment.vhost,
'auth_strategy': 'noauth',
'verbose': 'True',
'debug': 'True',

View File

@ -64,15 +64,39 @@ class ProcessFixture(fixtures.Fixture):
super(ProcessFixture, self).cleanUp(*args, **kwargs)
class EnvironmentFixture(fixtures.Fixture):
class RabbitmqEnvironmentFixture(fixtures.Fixture):
def setUp(self):
super(RabbitmqEnvironmentFixture, self).setUp()
self.user = base.get_rand_name(prefix='user')
self.password = base.get_rand_name(prefix='pass')
self.vhost = base.get_rand_name(prefix='vhost')
self._execute('add_user', self.user, self.password)
self.addCleanup(self._execute, 'delete_user', self.user)
self._execute('add_vhost', self.vhost)
self.addCleanup(self._execute, 'delete_vhost', self.vhost)
self._execute('set_permissions', '-p', self.vhost, self.user,
'.*', '.*', '.*')
def _execute(self, *args):
cmd = ['rabbitmqctl']
cmd.extend(args)
utils.execute(cmd, run_as_root=True)
class FullstackFixture(fixtures.Fixture):
def setUp(self):
super(EnvironmentFixture, self).setUp()
super(FullstackFixture, self).setUp()
self.temp_dir = self.useFixture(fixtures.TempDir()).path
rabbitmq_environment = self.useFixture(RabbitmqEnvironmentFixture())
self.neutron_server = self.useFixture(
NeutronServerFixture(self.temp_dir))
NeutronServerFixture(self.temp_dir, rabbitmq_environment))
def wait_until_env_is_up(self, agents_count=0):
utils.wait_until_true(
@ -92,14 +116,16 @@ class NeutronServerFixture(fixtures.Fixture):
NEUTRON_SERVER = "neutron-server"
def __init__(self, temp_dir):
def __init__(self, temp_dir, rabbitmq_environment):
self.temp_dir = temp_dir
self.rabbitmq_environment = rabbitmq_environment
def setUp(self):
super(NeutronServerFixture, self).setUp()
self.neutron_cfg_fixture = config_fixtures.NeutronConfigFixture(
self.temp_dir, cfg.CONF.database.connection)
self.temp_dir, cfg.CONF.database.connection,
self.rabbitmq_environment)
self.plugin_cfg_fixture = config_fixtures.ML2ConfigFixture(
self.temp_dir)

View File

@ -21,7 +21,7 @@ from neutron.tests.fullstack import base
from neutron.tests.fullstack import fullstack_fixtures as f_fixtures
class SingleNodeEnvironment(f_fixtures.EnvironmentFixture):
class SingleNodeEnvironment(f_fixtures.FullstackFixture):
def setUp(self):
super(SingleNodeEnvironment, self).setUp()