Merge "Raise only DbMigrationError from migrate 'upgrade' method"

This commit is contained in:
Jenkins 2017-05-30 14:00:31 +00:00 committed by Gerrit Code Review
commit aac6276c69
2 changed files with 20 additions and 1 deletions

View File

@ -75,7 +75,10 @@ def db_sync(engine, abs_path, version=None, init_version=0, sanity_check=True):
if sanity_check:
_db_schema_sanity_check(engine)
if version is None or version > current_version:
migration = versioning_api.upgrade(engine, repository, version)
try:
migration = versioning_api.upgrade(engine, repository, version)
except Exception as ex:
raise exception.DbMigrationError(ex)
else:
migration = versioning_api.downgrade(engine, repository,
version)

View File

@ -192,6 +192,22 @@ class TestMigrationCommon(test_base.DbTestCase):
self.assertRaises(db_exception.DBMigrationError,
migration.db_sync, self.engine, self.path, 'foo')
@mock.patch.object(versioning_api, 'upgrade')
def test_db_sync_script_not_present(self, upgrade):
# For non existent migration script file sqlalchemy-migrate will raise
# VersionNotFoundError which will be wrapped in DbMigrationError.
upgrade.side_effect = migrate_exception.VersionNotFoundError
self.assertRaises(db_exception.DbMigrationError,
migration.db_sync, self.engine, self.path,
self.test_version + 1)
@mock.patch.object(versioning_api, 'upgrade')
def test_db_sync_known_error_raised(self, upgrade):
upgrade.side_effect = migrate_exception.KnownError
self.assertRaises(db_exception.DbMigrationError,
migration.db_sync, self.engine, self.path,
self.test_version + 1)
def test_db_sync_upgrade(self):
init_ver = 55
with test_utils.nested(