diff --git a/ceilometer/tests/api/v2/test_app.py b/ceilometer/tests/api/v2/test_app.py index d6982b7f5..9b4bda27a 100644 --- a/ceilometer/tests/api/v2/test_app.py +++ b/ceilometer/tests/api/v2/test_app.py @@ -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' diff --git a/ceilometer/tests/api/v2/test_statistics_scenarios.py b/ceilometer/tests/api/v2/test_statistics_scenarios.py index 926a27817..c2bb2fb2e 100644 --- a/ceilometer/tests/api/v2/test_statistics_scenarios.py +++ b/ceilometer/tests/api/v2/test_statistics_scenarios.py @@ -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' diff --git a/ceilometer/tests/db.py b/ceilometer/tests/db.py index f03a617e0..d0a8b2c0a 100644 --- a/ceilometer/tests/db.py +++ b/ceilometer/tests/db.py @@ -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()}) ] diff --git a/ceilometer/tests/storage/test_impl_db2.py b/ceilometer/tests/storage/test_impl_db2.py index c7c587cc7..92a27e760 100644 --- a/ceilometer/tests/storage/test_impl_db2.py +++ b/ceilometer/tests/storage/test_impl_db2.py @@ -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): diff --git a/ceilometer/tests/storage/test_impl_hbase.py b/ceilometer/tests/storage/test_impl_hbase.py index 4d724a582..891ce5146 100644 --- a/ceilometer/tests/storage/test_impl_hbase.py +++ b/ceilometer/tests/storage/test_impl_hbase.py @@ -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) diff --git a/ceilometer/tests/storage/test_impl_mongodb.py b/ceilometer/tests/storage/test_impl_mongodb.py index a02f6cef1..a9218acc2 100644 --- a/ceilometer/tests/storage/test_impl_mongodb.py +++ b/ceilometer/tests/storage/test_impl_mongodb.py @@ -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) diff --git a/ceilometer/tests/storage/test_impl_sqlalchemy.py b/ceilometer/tests/storage/test_impl_sqlalchemy.py index 5893818f6..1ead4a907 100644 --- a/ceilometer/tests/storage/test_impl_sqlalchemy.py +++ b/ceilometer/tests/storage/test_impl_sqlalchemy.py @@ -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) diff --git a/ceilometer/tests/storage/test_pymongo_base.py b/ceilometer/tests/storage/test_pymongo_base.py index 22ab28f51..4b5574ad9 100644 --- a/ceilometer/tests/storage/test_pymongo_base.py +++ b/ceilometer/tests/storage/test_pymongo_base.py @@ -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):