From a6007a98b1ea111c3d41c8c00578543fa47fcab0 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Fri, 16 Jul 2021 12:55:49 +0100 Subject: tests: Use common base class The final step in cleaning up our many base classes. This will allow us to do things consistently across the test suite in future changes. Change-Id: I0bf663fdfd3c8be93e5658493e221d0a7db78832 Signed-off-by: Stephen Finucane --- oslo_db/tests/sqlalchemy/base.py | 5 +- oslo_db/tests/sqlalchemy/test_enginefacade.py | 33 ++++++------ oslo_db/tests/sqlalchemy/test_exc_filters.py | 73 +++++++++++++++++---------- oslo_db/tests/sqlalchemy/test_fixtures.py | 18 ++++--- oslo_db/tests/sqlalchemy/test_migrate_cli.py | 3 +- oslo_db/tests/sqlalchemy/test_migrations.py | 12 ++--- oslo_db/tests/sqlalchemy/test_models.py | 11 ++-- oslo_db/tests/sqlalchemy/test_ndb.py | 19 +++---- oslo_db/tests/sqlalchemy/test_options.py | 7 +-- oslo_db/tests/sqlalchemy/test_provision.py | 18 ++++--- oslo_db/tests/sqlalchemy/test_sqlalchemy.py | 30 +++++------ oslo_db/tests/sqlalchemy/test_update_match.py | 18 ++++--- oslo_db/tests/sqlalchemy/test_utils.py | 6 +-- oslo_db/tests/test_api.py | 11 ++-- oslo_db/tests/test_concurrency.py | 4 +- oslo_db/tests/utils.py | 7 --- 16 files changed, 147 insertions(+), 128 deletions(-) (limited to 'oslo_db') diff --git a/oslo_db/tests/sqlalchemy/base.py b/oslo_db/tests/sqlalchemy/base.py index 9d8cf35..80d9812 100644 --- a/oslo_db/tests/sqlalchemy/base.py +++ b/oslo_db/tests/sqlalchemy/base.py @@ -18,7 +18,7 @@ import debtcollector from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy.test_base import backend_specific # noqa from oslo_db.sqlalchemy import test_fixtures as db_fixtures -from oslotest import base as test_base +from oslo_db.tests import base as test_base @enginefacade.transaction_context_provider @@ -62,7 +62,8 @@ class PostgreSQLOpportunisticTestCase(DbTestCase): # make use of oslo_db.sqlalchemy.test_fixtures directly. class _DbTestCase( - db_fixtures.OpportunisticDBTestMixin, test_base.BaseTestCase): + db_fixtures.OpportunisticDBTestMixin, test_base.BaseTestCase, +): def setUp(self): super(_DbTestCase, self).setUp() diff --git a/oslo_db/tests/sqlalchemy/test_enginefacade.py b/oslo_db/tests/sqlalchemy/test_enginefacade.py index bc37536..a1dd446 100644 --- a/oslo_db/tests/sqlalchemy/test_enginefacade.py +++ b/oslo_db/tests/sqlalchemy/test_enginefacade.py @@ -21,7 +21,6 @@ import warnings from oslo_config import cfg from oslo_context import context as oslo_context -from oslotest import base as oslo_test_base from sqlalchemy import Column from sqlalchemy import Integer from sqlalchemy import MetaData @@ -36,10 +35,10 @@ from oslo_db import options from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy import engines as oslo_engines from oslo_db.sqlalchemy import orm -from oslo_db.tests.sqlalchemy import base as test_base +from oslo_db.tests import base as test_base +from oslo_db.tests.sqlalchemy import base as db_test_base from oslo_db import warning - enginefacade.transaction_context_provider(oslo_context.RequestContext) @@ -92,7 +91,7 @@ class AssertDataSource(collections.namedtuple( assert False, "Unknown constant: %s" % const -class MockFacadeTest(oslo_test_base.BaseTestCase): +class MockFacadeTest(test_base.BaseTestCase): """test by applying mocks to internal call-points. This applies mocks to @@ -1186,7 +1185,7 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): session.execute("test") -class PatchFactoryTest(oslo_test_base.BaseTestCase): +class PatchFactoryTest(test_base.BaseTestCase): def test_patch_manager(self): normal_mgr = enginefacade.transaction_context() @@ -1396,7 +1395,7 @@ class AsyncReaderWSlaveMockFacadeTest(MockFacadeTest): slave_uri = 'some_slave_connection' -class LegacyIntegrationtest(test_base._DbTestCase): +class LegacyIntegrationtest(db_test_base._DbTestCase): def test_legacy_integration(self): legacy_facade = enginefacade.get_legacy_facade() @@ -1454,7 +1453,7 @@ class LegacyIntegrationtest(test_base._DbTestCase): ) -class ThreadingTest(test_base._DbTestCase): +class ThreadingTest(db_test_base._DbTestCase): """Test copy/pickle on new threads using real connections and sessions.""" def _assert_ctx_connection(self, context, connection): @@ -1647,7 +1646,7 @@ class ThreadingTest(test_base._DbTestCase): assert session is not session2 -class LiveFacadeTest(test_base._DbTestCase): +class LiveFacadeTest(db_test_base._DbTestCase): """test using live SQL with test-provisioned databases. Several of these tests require that multiple transactions run @@ -1809,7 +1808,7 @@ class LiveFacadeTest(test_base._DbTestCase): session.query(self.User.name).scalar() ) - @test_base.backend_specific("postgresql", "mysql") + @db_test_base.backend_specific("postgresql", "mysql") def test_external_session_transaction(self): context = oslo_context.RequestContext() with enginefacade.writer.using(context) as session: @@ -1916,7 +1915,7 @@ class LiveFacadeTest(test_base._DbTestCase): self.User.name).order_by(self.User.name).all() ) - @test_base.backend_specific("postgresql", "mysql") + @db_test_base.backend_specific("postgresql", "mysql") def test_external_session_transaction_decorator(self): context = oslo_context.RequestContext() @@ -1964,7 +1963,7 @@ class LiveFacadeTest(test_base._DbTestCase): self.User.name).order_by(self.User.name).all() ) - @test_base.backend_specific("postgresql", "mysql") + @db_test_base.backend_specific("postgresql", "mysql") def test_external_connection_transaction(self): context = oslo_context.RequestContext() with enginefacade.writer.connection.using(context) as connection: @@ -2001,7 +2000,7 @@ class LiveFacadeTest(test_base._DbTestCase): self.User.name).order_by(self.User.name).all() ) - @test_base.backend_specific("postgresql", "mysql") + @db_test_base.backend_specific("postgresql", "mysql") def test_external_writer_in_reader(self): context = oslo_context.RequestContext() with enginefacade.reader.using(context) as session: @@ -2188,16 +2187,18 @@ class LiveFacadeTest(test_base._DbTestCase): class MySQLLiveFacadeTest( - test_base._MySQLOpportunisticTestCase, LiveFacadeTest): + db_test_base._MySQLOpportunisticTestCase, LiveFacadeTest, +): pass class PGLiveFacadeTest( - test_base._PostgreSQLOpportunisticTestCase, LiveFacadeTest): + db_test_base._PostgreSQLOpportunisticTestCase, LiveFacadeTest, +): pass -class ConfigOptionsTest(oslo_test_base.BaseTestCase): +class ConfigOptionsTest(test_base.BaseTestCase): def test_all_options(self): """test that everything in CONF.database.iteritems() is accepted. @@ -2242,7 +2243,7 @@ class ConfigOptionsTest(oslo_test_base.BaseTestCase): ) -class TestTransactionFactoryCallback(oslo_test_base.BaseTestCase): +class TestTransactionFactoryCallback(test_base.BaseTestCase): def test_setup_for_connection_called_with_profiler(self): context_manager = enginefacade.transaction_context() diff --git a/oslo_db/tests/sqlalchemy/test_exc_filters.py b/oslo_db/tests/sqlalchemy/test_exc_filters.py index 532c949..95b8f0d 100644 --- a/oslo_db/tests/sqlalchemy/test_exc_filters.py +++ b/oslo_db/tests/sqlalchemy/test_exc_filters.py @@ -18,7 +18,6 @@ import contextlib import itertools from unittest import mock -from oslotest import base as oslo_test_base import sqlalchemy as sqla from sqlalchemy.engine import url as sqla_url from sqlalchemy import event @@ -29,7 +28,8 @@ from sqlalchemy.orm import mapper from oslo_db import exception from oslo_db.sqlalchemy import engines from oslo_db.sqlalchemy import exc_filters -from oslo_db.tests.sqlalchemy import base as test_base +from oslo_db.tests import base as test_base +from oslo_db.tests.sqlalchemy import base as db_test_base from oslo_db.tests import utils as test_utils _TABLE_NAME = '__tmp__test__tmp__' @@ -68,7 +68,7 @@ class _SQLAExceptionMatcher(object): self.assertEqual(sql, exc.statement) -class TestsExceptionFilter(_SQLAExceptionMatcher, oslo_test_base.BaseTestCase): +class TestsExceptionFilter(_SQLAExceptionMatcher, test_base.BaseTestCase): class Error(Exception): """DBAPI base error. @@ -245,8 +245,9 @@ class TestFallthroughsAndNonDBAPI(TestsExceptionFilter): class TestNonExistentConstraint( - _SQLAExceptionMatcher, - test_base._DbTestCase): + _SQLAExceptionMatcher, + db_test_base._DbTestCase, +): def setUp(self): super(TestNonExistentConstraint, self).setUp() @@ -263,8 +264,9 @@ class TestNonExistentConstraint( class TestNonExistentConstraintPostgreSQL( - TestNonExistentConstraint, - test_base._PostgreSQLOpportunisticTestCase): + TestNonExistentConstraint, + db_test_base._PostgreSQLOpportunisticTestCase, +): def test_raise(self): matched = self.assertRaises( @@ -287,8 +289,9 @@ class TestNonExistentConstraintPostgreSQL( class TestNonExistentConstraintMySQL( - TestNonExistentConstraint, - test_base._MySQLOpportunisticTestCase): + TestNonExistentConstraint, + db_test_base._MySQLOpportunisticTestCase, +): def test_raise(self): matched = self.assertRaises( @@ -311,8 +314,9 @@ class TestNonExistentConstraintMySQL( class TestNonExistentTable( - _SQLAExceptionMatcher, - test_base._DbTestCase): + _SQLAExceptionMatcher, + db_test_base._DbTestCase, +): def setUp(self): super(TestNonExistentTable, self).setUp() @@ -342,8 +346,9 @@ class TestNonExistentTable( class TestNonExistentTablePostgreSQL( - TestNonExistentTable, - test_base._PostgreSQLOpportunisticTestCase): + TestNonExistentTable, + db_test_base._PostgreSQLOpportunisticTestCase, +): def test_raise(self): matched = self.assertRaises( @@ -361,8 +366,9 @@ class TestNonExistentTablePostgreSQL( class TestNonExistentTableMySQL( - TestNonExistentTable, - test_base._MySQLOpportunisticTestCase): + TestNonExistentTable, + db_test_base._MySQLOpportunisticTestCase, +): def test_raise(self): matched = self.assertRaises( @@ -379,8 +385,9 @@ class TestNonExistentTableMySQL( class TestNonExistentDatabase( - _SQLAExceptionMatcher, - test_base._DbTestCase): + _SQLAExceptionMatcher, + db_test_base._DbTestCase, +): def setUp(self): super(TestNonExistentDatabase, self).setUp() @@ -413,8 +420,9 @@ class TestNonExistentDatabase( class TestNonExistentDatabaseMySQL( - TestNonExistentDatabase, - test_base._MySQLOpportunisticTestCase): + TestNonExistentDatabase, + db_test_base._MySQLOpportunisticTestCase, +): def test_raise(self): matched = self.assertRaises( @@ -432,8 +440,9 @@ class TestNonExistentDatabaseMySQL( class TestNonExistentDatabasePostgreSQL( - TestNonExistentDatabase, - test_base._PostgreSQLOpportunisticTestCase): + TestNonExistentDatabase, + db_test_base._PostgreSQLOpportunisticTestCase, +): def test_raise(self): matched = self.assertRaises( @@ -449,7 +458,9 @@ class TestNonExistentDatabasePostgreSQL( ) -class TestReferenceErrorSQLite(_SQLAExceptionMatcher, test_base._DbTestCase): +class TestReferenceErrorSQLite( + _SQLAExceptionMatcher, db_test_base._DbTestCase, +): def setUp(self): super(TestReferenceErrorSQLite, self).setUp() @@ -522,8 +533,10 @@ class TestReferenceErrorSQLite(_SQLAExceptionMatcher, test_base._DbTestCase): self.assertIsNone(matched.key_table) -class TestReferenceErrorPostgreSQL(TestReferenceErrorSQLite, - test_base._PostgreSQLOpportunisticTestCase): +class TestReferenceErrorPostgreSQL( + TestReferenceErrorSQLite, + db_test_base._PostgreSQLOpportunisticTestCase, +): def test_raise(self): params = {'id': 1, 'foo_id': 2} matched = self.assertRaises( @@ -573,8 +586,10 @@ class TestReferenceErrorPostgreSQL(TestReferenceErrorSQLite, self.assertEqual("resource_entity", matched.key_table) -class TestReferenceErrorMySQL(TestReferenceErrorSQLite, - test_base._MySQLOpportunisticTestCase): +class TestReferenceErrorMySQL( + TestReferenceErrorSQLite, + db_test_base._MySQLOpportunisticTestCase, +): def test_raise(self): matched = self.assertRaises( exception.DBReferenceError, @@ -635,7 +650,9 @@ class TestReferenceErrorMySQL(TestReferenceErrorSQLite, self.assertEqual("resource_foo", matched.key_table) -class TestExceptionCauseMySQLSavepoint(test_base._MySQLOpportunisticTestCase): +class TestExceptionCauseMySQLSavepoint( + db_test_base._MySQLOpportunisticTestCase, +): def setUp(self): super(TestExceptionCauseMySQLSavepoint, self).setUp() @@ -1011,7 +1028,7 @@ class TestDataError(TestsExceptionFilter): self.DataError) -class IntegrationTest(test_base._DbTestCase): +class IntegrationTest(db_test_base._DbTestCase): """Test an actual error-raising round trips against the database.""" def setUp(self): diff --git a/oslo_db/tests/sqlalchemy/test_fixtures.py b/oslo_db/tests/sqlalchemy/test_fixtures.py index 97f8d64..72f4f93 100644 --- a/oslo_db/tests/sqlalchemy/test_fixtures.py +++ b/oslo_db/tests/sqlalchemy/test_fixtures.py @@ -21,12 +21,12 @@ from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy import provision from oslo_db.sqlalchemy import test_base as legacy_test_base from oslo_db.sqlalchemy import test_fixtures -from oslotest import base as oslo_test_base +from oslo_db.tests import base as test_base start_dir = os.path.dirname(__file__) -class BackendSkipTest(oslo_test_base.BaseTestCase): +class BackendSkipTest(test_base.BaseTestCase): def test_skip_no_dbapi(self): @@ -35,7 +35,7 @@ class BackendSkipTest(oslo_test_base.BaseTestCase): DRIVER = 'postgresql' class SomeTest(test_fixtures.OpportunisticDBTestMixin, - oslo_test_base.BaseTestCase): + test_base.BaseTestCase): FIXTURE = FakeDatabaseOpportunisticFixture def runTest(self): @@ -77,7 +77,7 @@ class BackendSkipTest(oslo_test_base.BaseTestCase): DRIVER = 'postgresql+nosuchdbapi' class SomeTest(test_fixtures.OpportunisticDBTestMixin, - oslo_test_base.BaseTestCase): + test_base.BaseTestCase): FIXTURE = FakeDatabaseOpportunisticFixture @@ -99,7 +99,8 @@ class BackendSkipTest(oslo_test_base.BaseTestCase): def test_skip_no_dbapi_legacy(self): class FakeDatabaseOpportunisticFixture( - legacy_test_base.DbFixture): + legacy_test_base.DbFixture, + ): DRIVER = 'postgresql' class SomeTest(legacy_test_base.DbTestCase): @@ -140,7 +141,8 @@ class BackendSkipTest(oslo_test_base.BaseTestCase): def test_skip_no_such_backend_legacy(self): class FakeDatabaseOpportunisticFixture( - legacy_test_base.DbFixture): + legacy_test_base.DbFixture, + ): DRIVER = 'postgresql+nosuchdbapi' class SomeTest(legacy_test_base.DbTestCase): @@ -163,7 +165,7 @@ class BackendSkipTest(oslo_test_base.BaseTestCase): ) -class EnginefacadeIntegrationTest(oslo_test_base.BaseTestCase): +class EnginefacadeIntegrationTest(test_base.BaseTestCase): def test_db_fixture(self): normal_mgr = enginefacade.transaction_context() normal_mgr.configure( @@ -204,7 +206,7 @@ class EnginefacadeIntegrationTest(oslo_test_base.BaseTestCase): self.assertFalse(normal_mgr._factory._started) -class LegacyBaseClassTest(oslo_test_base.BaseTestCase): +class LegacyBaseClassTest(test_base.BaseTestCase): def test_new_db_is_provisioned_by_default_pg(self): self._test_new_db_is_provisioned_by_default( legacy_test_base.PostgreSQLOpportunisticTestCase diff --git a/oslo_db/tests/sqlalchemy/test_migrate_cli.py b/oslo_db/tests/sqlalchemy/test_migrate_cli.py index 4c92d64..21716d0 100644 --- a/oslo_db/tests/sqlalchemy/test_migrate_cli.py +++ b/oslo_db/tests/sqlalchemy/test_migrate_cli.py @@ -9,16 +9,17 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + from unittest import mock import alembic -from oslotest import base as test_base import sqlalchemy from oslo_db import exception from oslo_db.sqlalchemy.migration_cli import ext_alembic from oslo_db.sqlalchemy.migration_cli import ext_migrate from oslo_db.sqlalchemy.migration_cli import manager +from oslo_db.tests import base as test_base class MockWithCmp(mock.MagicMock): diff --git a/oslo_db/tests/sqlalchemy/test_migrations.py b/oslo_db/tests/sqlalchemy/test_migrations.py index 3eb5df0..cb08bb5 100644 --- a/oslo_db/tests/sqlalchemy/test_migrations.py +++ b/oslo_db/tests/sqlalchemy/test_migrations.py @@ -18,16 +18,16 @@ from unittest import mock import fixtures from migrate.versioning import api as versioning_api -from oslotest import base as test import sqlalchemy as sa import sqlalchemy.ext.declarative as sa_decl from oslo_db import exception as exc from oslo_db.sqlalchemy import test_migrations as migrate -from oslo_db.tests.sqlalchemy import base as test_base +from oslo_db.tests import base as test_base +from oslo_db.tests.sqlalchemy import base as db_test_base -class TestWalkVersions(test.BaseTestCase, migrate.WalkVersionsMixin): +class TestWalkVersions(test_base.BaseTestCase, migrate.WalkVersionsMixin): migration_api = mock.MagicMock() REPOSITORY = mock.MagicMock() engine = mock.MagicMock() @@ -185,7 +185,7 @@ class TestWalkVersions(test.BaseTestCase, migrate.WalkVersionsMixin): self.assertEqual(upgraded, self.migrate_up.call_args_list) -class ModelsMigrationSyncMixin(test_base._DbTestCase): +class ModelsMigrationSyncMixin(db_test_base._DbTestCase): def setUp(self): super(ModelsMigrationSyncMixin, self).setUp() @@ -367,7 +367,7 @@ class ModelsMigrationSyncMixin(test_base._DbTestCase): class ModelsMigrationsSyncMySQL( ModelsMigrationSyncMixin, migrate.ModelsMigrationsSync, - test_base._MySQLOpportunisticTestCase, + db_test_base._MySQLOpportunisticTestCase, ): def test_models_not_sync(self): @@ -380,7 +380,7 @@ class ModelsMigrationsSyncMySQL( class ModelsMigrationsSyncPostgreSQL( ModelsMigrationSyncMixin, migrate.ModelsMigrationsSync, - test_base._PostgreSQLOpportunisticTestCase, + db_test_base._PostgreSQLOpportunisticTestCase, ): def test_models_not_sync(self): diff --git a/oslo_db/tests/sqlalchemy/test_models.py b/oslo_db/tests/sqlalchemy/test_models.py index 2211926..8dfd41d 100644 --- a/oslo_db/tests/sqlalchemy/test_models.py +++ b/oslo_db/tests/sqlalchemy/test_models.py @@ -17,20 +17,19 @@ from collections import abc import datetime from unittest import mock -from oslotest import base as oslo_test from sqlalchemy import Column from sqlalchemy import Integer, String from sqlalchemy import event from sqlalchemy.ext.declarative import declarative_base from oslo_db.sqlalchemy import models -from oslo_db.tests.sqlalchemy import base as test_base - +from oslo_db.tests import base as test_base +from oslo_db.tests.sqlalchemy import base as db_test_base BASE = declarative_base() -class ModelBaseTest(test_base._DbTestCase): +class ModelBaseTest(db_test_base._DbTestCase): def setUp(self): super(ModelBaseTest, self).setUp() self.mb = models.ModelBase() @@ -174,7 +173,7 @@ class ExtraKeysModel(BASE, models.ModelBase): return ['name'] -class TimestampMixinTest(oslo_test.BaseTestCase): +class TimestampMixinTest(test_base.BaseTestCase): def test_timestampmixin_attr(self): methods = ('created_at', @@ -191,7 +190,7 @@ class SoftDeletedModel(BASE, models.ModelBase, models.SoftDeleteMixin): smth = Column('smth', String(255)) -class SoftDeleteMixinTest(test_base._DbTestCase): +class SoftDeleteMixinTest(db_test_base._DbTestCase): def setUp(self): super(SoftDeleteMixinTest, self).setUp() diff --git a/oslo_db/tests/sqlalchemy/test_ndb.py b/oslo_db/tests/sqlalchemy/test_ndb.py index ea817ad..06c4d82 100644 --- a/oslo_db/tests/sqlalchemy/test_ndb.py +++ b/oslo_db/tests/sqlalchemy/test_ndb.py @@ -21,24 +21,20 @@ from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy import engines from oslo_db.sqlalchemy import ndb from oslo_db.sqlalchemy import test_fixtures -from oslo_db.sqlalchemy import utils - from oslo_db.sqlalchemy.types import String - -from oslotest import base as test_base +from oslo_db.sqlalchemy import utils +from oslo_db.tests import base as test_base from sqlalchemy import Column +from sqlalchemy import create_engine +from sqlalchemy.dialects.mysql import TEXT +from sqlalchemy.dialects.mysql import TINYTEXT from sqlalchemy import Integer from sqlalchemy import MetaData +from sqlalchemy import schema from sqlalchemy import Table from sqlalchemy import Text -from sqlalchemy import create_engine -from sqlalchemy import schema - -from sqlalchemy.dialects.mysql import TEXT -from sqlalchemy.dialects.mysql import TINYTEXT - LOG = logging.getLogger(__name__) _MOCK_CONNECTION = 'mysql+pymysql://' @@ -155,7 +151,8 @@ class NDBDatatypesDefaultTestCase(NDBMockTestBase): class NDBOpportunisticTestCase( - test_fixtures.OpportunisticDBTestMixin, test_base.BaseTestCase): + test_fixtures.OpportunisticDBTestMixin, test_base.BaseTestCase, +): FIXTURE = test_fixtures.MySQLOpportunisticFixture diff --git a/oslo_db/tests/sqlalchemy/test_options.py b/oslo_db/tests/sqlalchemy/test_options.py index 93aaf5b..54c4ada 100644 --- a/oslo_db/tests/sqlalchemy/test_options.py +++ b/oslo_db/tests/sqlalchemy/test_options.py @@ -15,12 +15,13 @@ from oslo_config import cfg from oslo_config import fixture as config_fixture from oslo_db import options -from oslo_db.tests import utils as test_utils +from oslo_db.tests import base as test_base -class DbApiOptionsTestCase(test_utils.BaseTestCase): +class DbApiOptionsTestCase(test_base.BaseTestCase): + def setUp(self): - super(DbApiOptionsTestCase, self).setUp() + super().setUp() self.conf = self.useFixture(config_fixture.Config()).conf self.conf.register_opts(options.database_opts, group='database') diff --git a/oslo_db/tests/sqlalchemy/test_provision.py b/oslo_db/tests/sqlalchemy/test_provision.py index 97d91bf..f0ef944 100644 --- a/oslo_db/tests/sqlalchemy/test_provision.py +++ b/oslo_db/tests/sqlalchemy/test_provision.py @@ -13,7 +13,6 @@ import os from unittest import mock -from oslotest import base as oslo_test_base from sqlalchemy import exc as sa_exc from sqlalchemy import inspect from sqlalchemy import schema @@ -24,10 +23,11 @@ from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy import provision from oslo_db.sqlalchemy import test_fixtures from oslo_db.sqlalchemy import utils -from oslo_db.tests.sqlalchemy import base as test_base +from oslo_db.tests import base as test_base +from oslo_db.tests.sqlalchemy import base as db_test_base -class DropAllObjectsTest(test_base._DbTestCase): +class DropAllObjectsTest(db_test_base._DbTestCase): def setUp(self): super(DropAllObjectsTest, self).setUp() @@ -81,7 +81,7 @@ class DropAllObjectsTest(test_base._DbTestCase): ) -class BackendNotAvailableTest(oslo_test_base.BaseTestCase): +class BackendNotAvailableTest(test_base.BaseTestCase): def test_no_dbapi(self): backend = provision.Backend( "postgresql", "postgresql+nosuchdbapi://hostname/dsn") @@ -138,16 +138,18 @@ class BackendNotAvailableTest(oslo_test_base.BaseTestCase): class MySQLDropAllObjectsTest( - DropAllObjectsTest, test_base._MySQLOpportunisticTestCase): + DropAllObjectsTest, db_test_base._MySQLOpportunisticTestCase, +): pass class PostgreSQLDropAllObjectsTest( - DropAllObjectsTest, test_base._PostgreSQLOpportunisticTestCase): + DropAllObjectsTest, db_test_base._PostgreSQLOpportunisticTestCase, +): pass -class RetainSchemaTest(oslo_test_base.BaseTestCase): +class RetainSchemaTest(test_base.BaseTestCase): DRIVER = "sqlite" def setUp(self): @@ -222,7 +224,7 @@ class PostgresqlRetainSchemaTest(RetainSchemaTest): DRIVER = "postgresql" -class AdHocURLTest(oslo_test_base.BaseTestCase): +class AdHocURLTest(test_base.BaseTestCase): def test_sqlite_setup_teardown(self): fixture = test_fixtures.AdHocDbFixture("sqlite:///foo.db") diff --git a/oslo_db/tests/sqlalchemy/test_sqlalchemy.py b/oslo_db/tests/sqlalchemy/test_sqlalchemy.py index cd30f15..43ab145 100644 --- a/oslo_db/tests/sqlalchemy/test_sqlalchemy.py +++ b/oslo_db/tests/sqlalchemy/test_sqlalchemy.py @@ -23,7 +23,6 @@ from unittest import mock import fixtures from oslo_config import cfg -from oslotest import base as oslo_test import sqlalchemy from sqlalchemy import Column, MetaData, Table from sqlalchemy.engine import url @@ -36,7 +35,8 @@ from oslo_db.sqlalchemy import enginefacade from oslo_db.sqlalchemy import engines from oslo_db.sqlalchemy import models from oslo_db.sqlalchemy import session -from oslo_db.tests.sqlalchemy import base as test_base +from oslo_db.tests import base as test_base +from oslo_db.tests.sqlalchemy import base as db_test_base BASE = declarative_base() @@ -51,7 +51,7 @@ class RegexpTable(BASE, models.ModelBase): bar = Column(String(255)) -class RegexpFilterTestCase(test_base._DbTestCase): +class RegexpFilterTestCase(db_test_base._DbTestCase): def setUp(self): super(RegexpFilterTestCase, self).setUp() @@ -65,8 +65,8 @@ class RegexpFilterTestCase(test_base._DbTestCase): self.addCleanup(test_table.drop) def _test_regexp_filter(self, regexp, expected): - with enginefacade.writer.using(test_base.context): - _session = test_base.context.session + with enginefacade.writer.using(db_test_base.context): + _session = db_test_base.context.session for i in ['10', '20', '♥']: tbl = RegexpTable() tbl.update({'bar': i}) @@ -89,7 +89,7 @@ class RegexpFilterTestCase(test_base._DbTestCase): self._test_regexp_filter('♦', []) -class SQLiteSavepointTest(test_base._DbTestCase): +class SQLiteSavepointTest(db_test_base._DbTestCase): def setUp(self): super(SQLiteSavepointTest, self).setUp() meta = MetaData() @@ -202,7 +202,7 @@ class ProgrammingError(Exception): pass -class QueryParamTest(test_base.DbTestCase): +class QueryParamTest(db_test_base.DbTestCase): def _fixture(self): from sqlalchemy import create_engine @@ -285,7 +285,7 @@ class QueryParamTest(test_base.DbTestCase): ) -class MySQLDefaultModeTestCase(test_base._MySQLOpportunisticTestCase): +class MySQLDefaultModeTestCase(db_test_base._MySQLOpportunisticTestCase): def test_default_is_traditional(self): with self.engine.connect() as conn: sql_mode = conn.execute( @@ -295,7 +295,7 @@ class MySQLDefaultModeTestCase(test_base._MySQLOpportunisticTestCase): self.assertIn("TRADITIONAL", sql_mode) -class MySQLModeTestCase(test_base._MySQLOpportunisticTestCase): +class MySQLModeTestCase(db_test_base._MySQLOpportunisticTestCase): def __init__(self, *args, **kwargs): super(MySQLModeTestCase, self).__init__(*args, **kwargs) @@ -364,7 +364,7 @@ class MySQLTraditionalModeTestCase(MySQLStrictAllTablesModeTestCase): self.mysql_mode = 'TRADITIONAL' -class EngineFacadeTestCase(oslo_test.BaseTestCase): +class EngineFacadeTestCase(test_base.BaseTestCase): def setUp(self): super(EngineFacadeTestCase, self).setUp() @@ -470,7 +470,7 @@ class EngineFacadeTestCase(oslo_test.BaseTestCase): self.assertEqual(master_path, str(slave_session.bind.url)) -class SQLiteConnectTest(oslo_test.BaseTestCase): +class SQLiteConnectTest(test_base.BaseTestCase): def _fixture(self, **kw): return session.create_engine("sqlite://", **kw) @@ -507,7 +507,7 @@ class SQLiteConnectTest(oslo_test.BaseTestCase): ) -class MysqlConnectTest(test_base._MySQLOpportunisticTestCase): +class MysqlConnectTest(db_test_base._MySQLOpportunisticTestCase): def _fixture(self, sql_mode): return session.create_engine(self.engine.url, mysql_sql_mode=sql_mode) @@ -627,7 +627,7 @@ class MysqlConnectTest(test_base._MySQLOpportunisticTestCase): log.output) -class CreateEngineTest(oslo_test.BaseTestCase): +class CreateEngineTest(test_base.BaseTestCase): """Test that dialect-specific arguments/ listeners are set up correctly. """ @@ -781,7 +781,7 @@ class CreateEngineTest(oslo_test.BaseTestCase): ) -class ProcessGuardTest(test_base._DbTestCase): +class ProcessGuardTest(db_test_base._DbTestCase): def test_process_guard(self): self.engine.dispose() @@ -809,7 +809,7 @@ class ProcessGuardTest(test_base._DbTestCase): self.assertEqual(new_dbapi_id, newer_dbapi_id) -class PatchStacktraceTest(test_base._DbTestCase): +class PatchStacktraceTest(db_test_base._DbTestCase): def test_trace(self): engine = self.engine diff --git a/oslo_db/tests/sqlalchemy/test_update_match.py b/oslo_db/tests/sqlalchemy/test_update_match.py index 15eeed4..9ee61c5 100644 --- a/oslo_db/tests/sqlalchemy/test_update_match.py +++ b/oslo_db/tests/sqlalchemy/test_update_match.py @@ -11,14 +11,14 @@ # under the License. -from oslotest import base as oslo_test_base from sqlalchemy.ext import declarative from sqlalchemy import schema from sqlalchemy import sql from sqlalchemy import types as sqltypes from oslo_db.sqlalchemy import update_match -from oslo_db.tests.sqlalchemy import base as test_base +from oslo_db.tests import base as test_base +from oslo_db.tests.sqlalchemy import base as db_test_base Base = declarative.declarative_base() @@ -33,7 +33,7 @@ class MyModel(Base): z = schema.Column(sqltypes.String(40)) -class ManufactureCriteriaTest(oslo_test_base.BaseTestCase): +class ManufactureCriteriaTest(test_base.BaseTestCase): def test_instance_criteria_basic(self): specimen = MyModel( y='y1', z='z3', @@ -85,7 +85,7 @@ class ManufactureCriteriaTest(oslo_test_base.BaseTestCase): ) -class UpdateMatchTest(test_base._DbTestCase): +class UpdateMatchTest(db_test_base._DbTestCase): def setUp(self): super(UpdateMatchTest, self).setUp() Base.metadata.create_all(self.engine) @@ -434,12 +434,14 @@ class UpdateMatchTest(test_base._DbTestCase): class PGUpdateMatchTest( - UpdateMatchTest, - test_base._PostgreSQLOpportunisticTestCase): + UpdateMatchTest, + db_test_base._PostgreSQLOpportunisticTestCase, +): pass class MySQLUpdateMatchTest( - UpdateMatchTest, - test_base._MySQLOpportunisticTestCase): + UpdateMatchTest, + db_test_base._MySQLOpportunisticTestCase, +): pass diff --git a/oslo_db/tests/sqlalchemy/test_utils.py b/oslo_db/tests/sqlalchemy/test_utils.py index 9923856..b86faf0 100644 --- a/oslo_db/tests/sqlalchemy/test_utils.py +++ b/oslo_db/tests/sqlalchemy/test_utils.py @@ -17,7 +17,6 @@ from unittest import mock from urllib import parse import fixtures -from oslotest import base as test_base import sqlalchemy from sqlalchemy.dialects import mysql from sqlalchemy import Boolean, Index, Integer, DateTime, String @@ -42,9 +41,8 @@ from oslo_db.sqlalchemy import models from oslo_db.sqlalchemy import provision from oslo_db.sqlalchemy import session from oslo_db.sqlalchemy import utils +from oslo_db.tests import base as test_base from oslo_db.tests.sqlalchemy import base as db_test_base -from oslo_db.tests import utils as test_utils - Base = declarative_base() @@ -1073,7 +1071,7 @@ class MySQLTestMigrations(TestMigrationUtils, pass -class TestConnectionUtils(test_utils.BaseTestCase): +class TestConnectionUtils(test_base.BaseTestCase): def setUp(self): super(TestConnectionUtils, self).setUp() diff --git a/oslo_db/tests/test_api.py b/oslo_db/tests/test_api.py index 8bf2489..2540780 100644 --- a/oslo_db/tests/test_api.py +++ b/oslo_db/tests/test_api.py @@ -22,7 +22,7 @@ from oslo_utils import importutils from oslo_db import api from oslo_db import exception -from oslo_db.tests import utils as test_utils +from oslo_db.tests import base as test_base sqla = importutils.try_import('sqlalchemy') if not sqla: @@ -65,7 +65,8 @@ class DBAPI(object): return args, kwargs -class DBAPITestCase(test_utils.BaseTestCase): +class DBAPITestCase(test_base.BaseTestCase): + def test_dbapi_full_path_module_method(self): dbapi = api.DBAPI('oslo_db.tests.test_api') result = dbapi.api_class_call1(1, 2, kwarg1='meow') @@ -91,8 +92,9 @@ class DBAPITestCase(test_utils.BaseTestCase): class DBReconnectTestCase(DBAPITestCase): + def setUp(self): - super(DBReconnectTestCase, self).setUp() + super().setUp() self.test_db_api = DBAPI() patcher = mock.patch(__name__ + '.get_backend', @@ -200,6 +202,7 @@ class DBReconnectTestCase(DBAPITestCase): class DBRetryRequestCase(DBAPITestCase): + def test_retry_wrapper_succeeds(self): @api.wrap_db_retry(max_retries=10) def some_method(): @@ -294,6 +297,7 @@ class DBRetryRequestCase(DBAPITestCase): x = api.wrap_db_retry(max_retries=5, retry_on_deadlock=True, max_retry_interval=11) self.assertEqual(11, x.max_retry_interval) + for i in (1, 2, 4): # With jitter: sleep_time = [0, 2 ** retry_times) sleep_time, n = x._get_inc_interval(i, True) @@ -303,6 +307,7 @@ class DBRetryRequestCase(DBAPITestCase): sleep_time, n = x._get_inc_interval(i, False) self.assertEqual(2 * i, n) self.assertEqual(2 * i, sleep_time) + for i in (8, 16, 32): sleep_time, n = x._get_inc_interval(i, False) self.assertEqual(x.max_retry_interval, sleep_time) diff --git a/oslo_db/tests/test_concurrency.py b/oslo_db/tests/test_concurrency.py index 6e1cd4b..e58337c 100644 --- a/oslo_db/tests/test_concurrency.py +++ b/oslo_db/tests/test_concurrency.py @@ -19,12 +19,12 @@ from unittest import mock from oslo_config import fixture as config_fixture from oslo_db import concurrency -from oslo_db.tests import utils as test_utils +from oslo_db.tests import base as test_base FAKE_BACKEND_MAPPING = {'sqlalchemy': 'fake.db.sqlalchemy.api'} -class TpoolDbapiWrapperTestCase(test_utils.BaseTestCase): +class TpoolDbapiWrapperTestCase(test_base.BaseTestCase): def setUp(self): super(TpoolDbapiWrapperTestCase, self).setUp() diff --git a/oslo_db/tests/utils.py b/oslo_db/tests/utils.py index 853f983..47cf511 100644 --- a/oslo_db/tests/utils.py +++ b/oslo_db/tests/utils.py @@ -15,15 +15,8 @@ import contextlib -from oslotest import base as test_base - @contextlib.contextmanager def nested(*contexts): with contextlib.ExitStack() as stack: yield [stack.enter_context(c) for c in contexts] - - -# TODO(stephenfin): Remove as this is no longer necessary -class BaseTestCase(test_base.BaseTestCase): - pass -- cgit v1.2.1