Refactored fake connection URL classes
Changed the way how DB tests are run to make them coope with concurrent databases. FakeUrl -> DbManager. DbManager becomes a fixture that is able to create a separate DB for each test and perform a cleanup action if needed (delete database) This is a preparational work for adding new database backends. Related to blueprint sql-unit-tests-on-real-backend Change-Id: I7cbaa084df4a69c453347a45d884e8e808ac697d
This commit is contained in:
parent
5fe77a175d
commit
b27a819d96
@ -75,7 +75,8 @@ class TestApp(base.BaseTestCase):
|
||||
|
||||
|
||||
class TestPecanApp(FunctionalTest):
|
||||
database_connection = tests_db.MongoDBFakeConnectionUrl()
|
||||
|
||||
db_manager = tests_db.MongoDbManager()
|
||||
|
||||
def test_pecan_extension_guessing_unset(self):
|
||||
# check Pecan does not assume .jpg is an extension
|
||||
@ -85,8 +86,7 @@ class TestPecanApp(FunctionalTest):
|
||||
|
||||
class TestApiMiddleware(FunctionalTest):
|
||||
|
||||
# This doesn't really matter
|
||||
database_connection = tests_db.MongoDBFakeConnectionUrl()
|
||||
db_manager = tests_db.MongoDbManager()
|
||||
|
||||
no_lang_translated_error = 'No lang translated error'
|
||||
en_US_translated_error = 'en-US translated error'
|
||||
|
@ -1224,10 +1224,9 @@ class TestGroupBySource(FunctionalTest,
|
||||
# tests.
|
||||
|
||||
scenarios = [
|
||||
('mongodb',
|
||||
dict(database_connection=tests_db.MongoDBFakeConnectionUrl())),
|
||||
('hbase', dict(database_connection=tests_db.HBaseFakeConnectionUrl())),
|
||||
('db2', dict(database_connection=tests_db.DB2FakeConnectionUrl())),
|
||||
('mongodb', {'db_manager': tests_db.MongoDbManager()}),
|
||||
('hbase', {'db_manager': tests_db.HBaseManager()}),
|
||||
('db2', {'db_manager': tests_db.DB2Manager()}),
|
||||
]
|
||||
|
||||
PATH = '/meters/instance/statistics'
|
||||
@ -1580,10 +1579,9 @@ class TestUnparameterizedAggregates(FunctionalTest,
|
||||
# in the usual way.
|
||||
|
||||
scenarios = [
|
||||
('mongodb',
|
||||
dict(database_connection=tests_db.MongoDBFakeConnectionUrl())),
|
||||
('hbase', dict(database_connection=tests_db.HBaseFakeConnectionUrl())),
|
||||
('db2', dict(database_connection=tests_db.DB2FakeConnectionUrl())),
|
||||
('mongodb', {'db_manager': tests_db.MongoDbManager()}),
|
||||
('hbase', {'db_manager': tests_db.HBaseManager()}),
|
||||
('db2', {'db_manager': tests_db.DB2Manager()}),
|
||||
]
|
||||
|
||||
PATH = '/meters/instance/statistics'
|
||||
|
@ -19,6 +19,7 @@
|
||||
# under the License.
|
||||
|
||||
"""Base classes for API tests."""
|
||||
import fixtures
|
||||
import os
|
||||
import uuid
|
||||
import warnings
|
||||
@ -36,11 +37,10 @@ class TestBase(testscenarios.testcase.WithScenarios, test_base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestBase, self).setUp()
|
||||
|
||||
if self.database_connection is None:
|
||||
self.skipTest("No connection URL set")
|
||||
self.useFixture(self.db_manager)
|
||||
|
||||
self.CONF = self.useFixture(config.Config()).conf
|
||||
self.CONF.set_override('connection', str(self.database_connection),
|
||||
self.CONF.set_override('connection', self.db_manager.connection,
|
||||
group='database')
|
||||
|
||||
with warnings.catch_warnings():
|
||||
@ -72,7 +72,7 @@ class TestBase(testscenarios.testcase.WithScenarios, test_base.BaseTestCase):
|
||||
super(TestBase, self).tearDown()
|
||||
|
||||
|
||||
class MongoDBFakeConnectionUrl(object):
|
||||
class MongoDbManager(fixtures.Fixture):
|
||||
|
||||
def __init__(self):
|
||||
self.url = os.environ.get('CEILOMETER_TEST_MONGODB_URL')
|
||||
@ -81,11 +81,15 @@ class MongoDBFakeConnectionUrl(object):
|
||||
"No MongoDB test URL set,"
|
||||
"export CEILOMETER_TEST_MONGODB_URL environment variable")
|
||||
|
||||
def __str__(self):
|
||||
return '%(url)s_%(db)s' % dict(url=self.url, db=uuid.uuid4().hex)
|
||||
def setUp(self):
|
||||
super(MongoDbManager, self).setUp()
|
||||
self.connection = '%(url)s_%(db)s' % {
|
||||
'url': self.url,
|
||||
'db': uuid.uuid4().hex
|
||||
}
|
||||
|
||||
|
||||
class DB2FakeConnectionUrl(MongoDBFakeConnectionUrl):
|
||||
class DB2Manager(MongoDbManager):
|
||||
def __init__(self):
|
||||
self.url = (os.environ.get('CEILOMETER_TEST_DB2_URL') or
|
||||
os.environ.get('CEILOMETER_TEST_MONGODB_URL'))
|
||||
@ -99,25 +103,32 @@ class DB2FakeConnectionUrl(MongoDBFakeConnectionUrl):
|
||||
self.url = self.url.replace('mongodb:', 'db2:', 1)
|
||||
|
||||
|
||||
class HBaseFakeConnectionUrl(object):
|
||||
class HBaseManager(fixtures.Fixture):
|
||||
def __init__(self):
|
||||
self.url = os.environ.get('CEILOMETER_TEST_HBASE_URL')
|
||||
if not self.url:
|
||||
self.url = 'hbase://__test__'
|
||||
|
||||
def __str__(self):
|
||||
s = '%s?table_prefix=%s' % (
|
||||
def setUp(self):
|
||||
super(HBaseManager, self).setUp()
|
||||
self.connection = '%s?table_prefix=%s' % (
|
||||
self.url,
|
||||
uuid.uuid4().hex)
|
||||
return s
|
||||
|
||||
|
||||
class SQLiteManager(fixtures.Fixture):
|
||||
|
||||
def setUp(self):
|
||||
super(SQLiteManager, self).setUp()
|
||||
self.connection = 'sqlite://'
|
||||
|
||||
|
||||
@six.add_metaclass(test_base.SkipNotImplementedMeta)
|
||||
class MixinTestsWithBackendScenarios(object):
|
||||
|
||||
scenarios = [
|
||||
('sqlalchemy', dict(database_connection='sqlite://')),
|
||||
('mongodb', dict(database_connection=MongoDBFakeConnectionUrl())),
|
||||
('hbase', dict(database_connection=HBaseFakeConnectionUrl())),
|
||||
('db2', dict(database_connection=DB2FakeConnectionUrl())),
|
||||
('sqlite', {'db_manager': SQLiteManager()}),
|
||||
('mongodb', {'db_manager': MongoDbManager()}),
|
||||
('hbase', {'db_manager': HBaseManager()}),
|
||||
('db2', {'db_manager': DB2Manager()})
|
||||
]
|
||||
|
@ -28,7 +28,7 @@ from ceilometer.tests import db as tests_db
|
||||
|
||||
|
||||
class DB2EngineTestBase(tests_db.TestBase):
|
||||
database_connection = tests_db.DB2FakeConnectionUrl()
|
||||
db_manager = tests_db.DB2Manager()
|
||||
|
||||
|
||||
class CapabilitiesTest(DB2EngineTestBase):
|
||||
|
@ -31,13 +31,13 @@ from ceilometer.tests import db as tests_db
|
||||
|
||||
|
||||
class HBaseEngineTestBase(tests_db.TestBase):
|
||||
database_connection = tests_db.HBaseFakeConnectionUrl()
|
||||
db_manager = tests_db.HBaseManager()
|
||||
|
||||
|
||||
class ConnectionTest(HBaseEngineTestBase):
|
||||
|
||||
def test_hbase_connection(self):
|
||||
self.CONF.database.connection = str(self.database_connection)
|
||||
self.CONF.database.connection = self.db_manager.connection
|
||||
conn = hbase.Connection(self.CONF)
|
||||
self.assertIsInstance(conn.conn_pool.connection(), hbase.MConnection)
|
||||
|
||||
|
@ -31,7 +31,7 @@ from ceilometer.tests.storage import test_storage_scenarios
|
||||
|
||||
|
||||
class MongoDBEngineTestBase(tests_db.TestBase):
|
||||
database_connection = tests_db.MongoDBFakeConnectionUrl()
|
||||
db_manager = tests_db.MongoDbManager()
|
||||
|
||||
|
||||
class MongoDBConnection(MongoDBEngineTestBase):
|
||||
@ -42,7 +42,7 @@ class MongoDBConnection(MongoDBEngineTestBase):
|
||||
def test_replica_set(self):
|
||||
self.CONF.set_override(
|
||||
'connection',
|
||||
str(tests_db.MongoDBFakeConnectionUrl()) + '?replicaSet=foobar',
|
||||
self.db_manager.connection + '?replicaSet=foobar',
|
||||
group='database')
|
||||
conn = impl_mongodb.Connection(self.CONF)
|
||||
self.assertTrue(conn.conn)
|
||||
|
@ -38,7 +38,7 @@ from ceilometer.tests.storage import test_storage_scenarios as scenarios
|
||||
class EventTestBase(tests_db.TestBase):
|
||||
# Note: Do not derive from SQLAlchemyEngineTestBase, since we
|
||||
# don't want to automatically inherit all the Meter setup.
|
||||
database_connection = 'sqlite://'
|
||||
db_manager = tests_db.SQLiteManager()
|
||||
|
||||
|
||||
class CeilometerBaseTest(EventTestBase):
|
||||
@ -174,7 +174,7 @@ class EventTest(EventTestBase):
|
||||
class RelationshipTest(scenarios.DBTestBase):
|
||||
# Note: Do not derive from SQLAlchemyEngineTestBase, since we
|
||||
# don't want to automatically inherit all the Meter setup.
|
||||
database_connection = 'sqlite://'
|
||||
db_manager = tests_db.SQLiteManager()
|
||||
|
||||
def test_clear_metering_data_meta_tables(self):
|
||||
timeutils.utcnow.override_time = datetime.datetime(2012, 7, 2, 10, 45)
|
||||
|
@ -31,10 +31,8 @@ class CompatibilityTest(test_storage_scenarios.DBTestBase,
|
||||
tests_db.MixinTestsWithBackendScenarios):
|
||||
|
||||
scenarios = [
|
||||
('mongodb',
|
||||
dict(database_connection=tests_db.MongoDBFakeConnectionUrl())),
|
||||
('db2',
|
||||
dict(database_connection=tests_db.DB2FakeConnectionUrl())),
|
||||
('mongodb', {'db_manager': tests_db.MongoDbManager()}),
|
||||
('db2', {'db_manager': tests_db.DB2Manager()}),
|
||||
]
|
||||
|
||||
def prepare_data(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user