Merge "Run storage unit tests in pooled context"

This commit is contained in:
Jenkins 2014-07-12 01:02:52 +00:00 committed by Gerrit Code Review
commit 3c805229ae
5 changed files with 79 additions and 5 deletions

View File

@ -135,6 +135,6 @@ def _normalize(pool, detailed=False):
} }
if detailed: if detailed:
opts = pool[3] opts = pool[3]
ret['options'] = utils.json_decode(opts) if opts else None ret['options'] = utils.json_decode(opts) if opts else {}
return ret return ret

View File

@ -68,6 +68,6 @@ Catalogue = sa.Table('Catalogue', metadata,
sa.Column('pool', sa.String(64), sa.Column('pool', sa.String(64),
sa.ForeignKey('Pools.name', sa.ForeignKey('Pools.name',
ondelete='CASCADE')), ondelete='CASCADE')),
sa.Column('project', sa.String(64), nullable=False), sa.Column('project', sa.String(64)),
sa.Column('queue', sa.String(64), nullable=False), sa.Column('queue', sa.String(64), nullable=False),
sa.UniqueConstraint('project', 'queue')) sa.UniqueConstraint('project', 'queue'))

View File

@ -24,6 +24,7 @@ from testtools import matchers
from marconi.openstack.common.cache import cache as oslo_cache from marconi.openstack.common.cache import cache as oslo_cache
from marconi.openstack.common import timeutils from marconi.openstack.common import timeutils
from marconi.queues import bootstrap
from marconi.queues import storage from marconi.queues import storage
from marconi.queues.storage import errors from marconi.queues.storage import errors
from marconi import tests as testing from marconi import tests as testing
@ -52,13 +53,33 @@ class ControllerBaseTest(testing.TestBase):
cache = oslo_cache.get_cache(self.conf.cache_url) cache = oslo_cache.get_cache(self.conf.cache_url)
# pylint: disable=not-callable # pylint: disable=not-callable
self.driver = self.driver_class(self.conf, cache) self.conf.register_opts(bootstrap._GENERAL_OPTIONS)
pooling = 'pooling' in self.conf and self.conf.pooling
if pooling and not self.control_driver_class:
self.skipTest("Pooling is enabled, "
"but control driver class is not specified")
if not pooling:
# pylint: disable=not-callable
self.driver = self.driver_class(self.conf, cache)
else:
# pylint: disable=not-callable
control = self.control_driver_class(self.conf, cache)
uri = "sqlite:///:memory:"
for i in range(4):
control.pools_controller.create(six.text_type(i), 100, uri)
self.driver = self.driver_class(self.conf, cache, control)
self._prepare_conf() self._prepare_conf()
self.addCleanup(self._purge_databases) self.addCleanup(self._purge_databases)
# pylint: disable=not-callable if not pooling:
self.controller = self.controller_class(self.driver) # pylint: disable=not-callable
self.controller = self.controller_class(self.driver)
else:
# pylint: disable=not-callable
self.controller = self.controller_class(self.driver._pool_catalog)
def _prepare_conf(self): def _prepare_conf(self):
"""Prepare the conf before running tests """Prepare the conf before running tests

View File

@ -32,6 +32,7 @@ from marconi.queues.storage import mongodb
from marconi.queues.storage.mongodb import controllers from marconi.queues.storage.mongodb import controllers
from marconi.queues.storage.mongodb import options from marconi.queues.storage.mongodb import options
from marconi.queues.storage.mongodb import utils from marconi.queues.storage.mongodb import utils
from marconi.queues.storage import pooling
from marconi import tests as testing from marconi import tests as testing
from marconi.tests.queues.storage import base from marconi.tests.queues.storage import base
@ -403,3 +404,30 @@ class MongodbCatalogueTests(base.CatalogueControllerTest):
def tearDown(self): def tearDown(self):
self.controller.drop_all() self.controller.drop_all()
super(MongodbCatalogueTests, self).tearDown() super(MongodbCatalogueTests, self).tearDown()
@testing.requires_mongodb
class PooledMessageTests(base.MessageControllerTest):
config_file = 'wsgi_mongodb_pooled.conf'
controller_class = pooling.MessageController
driver_class = pooling.DataDriver
control_driver_class = mongodb.ControlDriver
controller_base_class = pooling.RoutingController
@testing.requires_mongodb
class PooledQueueTests(base.QueueControllerTest):
config_file = 'wsgi_mongodb_pooled.conf'
controller_class = pooling.QueueController
driver_class = pooling.DataDriver
control_driver_class = mongodb.ControlDriver
controller_base_class = pooling.RoutingController
@testing.requires_mongodb
class PooledClaimsTests(base.ClaimControllerTest):
config_file = 'wsgi_mongodb_pooled.conf'
controller_class = pooling.ClaimController
driver_class = pooling.DataDriver
control_driver_class = mongodb.ControlDriver
controller_base_class = pooling.RoutingController

View File

@ -17,6 +17,7 @@ import datetime
import sqlalchemy as sa import sqlalchemy as sa
from marconi.queues.storage import errors from marconi.queues.storage import errors
from marconi.queues.storage import pooling
from marconi.queues.storage import sqlalchemy from marconi.queues.storage import sqlalchemy
from marconi.queues.storage.sqlalchemy import controllers from marconi.queues.storage.sqlalchemy import controllers
from marconi.queues.storage.sqlalchemy import tables from marconi.queues.storage.sqlalchemy import tables
@ -100,3 +101,27 @@ class SqlalchemyCatalogueTest(base.CatalogueControllerTest):
def tearDown(self): def tearDown(self):
super(SqlalchemyCatalogueTest, self).tearDown() super(SqlalchemyCatalogueTest, self).tearDown()
class PooledMessageTests(base.MessageControllerTest):
config_file = 'wsgi_sqlalchemy_pooled.conf'
controller_class = pooling.MessageController
driver_class = pooling.DataDriver
control_driver_class = sqlalchemy.ControlDriver
controller_base_class = pooling.RoutingController
class PooledClaimsTests(base.ClaimControllerTest):
config_file = 'wsgi_sqlalchemy_pooled.conf'
controller_class = pooling.ClaimController
driver_class = pooling.DataDriver
control_driver_class = sqlalchemy.ControlDriver
controller_base_class = pooling.RoutingController
class PooledQueueTests(base.QueueControllerTest):
config_file = 'wsgi_sqlalchemy_pooled.conf'
controller_class = pooling.QueueController
driver_class = pooling.DataDriver
control_driver_class = sqlalchemy.ControlDriver
controller_base_class = pooling.RoutingController