summaryrefslogtreecommitdiff
path: root/oslo_db
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-05-10 17:51:42 +0000
committerGerrit Code Review <review@openstack.org>2016-05-10 17:51:42 +0000
commitcb9644d21c7e70ac376cc7e40a56096004072780 (patch)
treef9ec3f399bdf50dc92bd855dae36b329fb38573f /oslo_db
parent6369fe8026a264c6c93fda46f0905216d495e0c2 (diff)
parent08f49111e448b1cd81d12814ce1cb467af5a2c0b (diff)
downloadoslo-db-cb9644d21c7e70ac376cc7e40a56096004072780.tar.gz
Merge "Raise DbMigrationError for invalid version"
Diffstat (limited to 'oslo_db')
-rw-r--r--oslo_db/sqlalchemy/migration.py9
-rw-r--r--oslo_db/tests/sqlalchemy/test_migration_common.py22
2 files changed, 30 insertions, 1 deletions
diff --git a/oslo_db/sqlalchemy/migration.py b/oslo_db/sqlalchemy/migration.py
index 7799552..c85fd22 100644
--- a/oslo_db/sqlalchemy/migration.py
+++ b/oslo_db/sqlalchemy/migration.py
@@ -150,7 +150,14 @@ def db_version_control(engine, abs_path, version=None):
:param version: Initial database version
"""
repository = _find_migrate_repo(abs_path)
- versioning_api.version_control(engine, repository, version)
+
+ try:
+ versioning_api.version_control(engine, repository, version)
+ except versioning_exceptions.InvalidVersionError as ex:
+ raise exception.DbMigrationError("Invalid version : %s" % ex)
+ except versioning_exceptions.DatabaseAlreadyControlledError:
+ raise exception.DbMigrationError("Database is already controlled.")
+
return version
diff --git a/oslo_db/tests/sqlalchemy/test_migration_common.py b/oslo_db/tests/sqlalchemy/test_migration_common.py
index ebdaaa9..f6f5c95 100644
--- a/oslo_db/tests/sqlalchemy/test_migration_common.py
+++ b/oslo_db/tests/sqlalchemy/test_migration_common.py
@@ -86,6 +86,28 @@ class TestMigrationCommon(test_base.DbTestCase):
mock_version_control.assert_called_once_with(
self.engine, self.return_value, self.test_version)
+ @mock.patch.object(migration, '_find_migrate_repo')
+ @mock.patch.object(versioning_api, 'version_control')
+ def test_db_version_control_version_less_than_actual_version(
+ self, mock_version_control, mock_find_repo):
+ mock_find_repo.return_value = self.return_value
+ mock_version_control.side_effect = (migrate_exception.
+ DatabaseAlreadyControlledError)
+ self.assertRaises(db_exception.DbMigrationError,
+ migration.db_version_control, self.engine,
+ self.path, self.test_version - 1)
+
+ @mock.patch.object(migration, '_find_migrate_repo')
+ @mock.patch.object(versioning_api, 'version_control')
+ def test_db_version_control_version_greater_than_actual_version(
+ self, mock_version_control, mock_find_repo):
+ mock_find_repo.return_value = self.return_value
+ mock_version_control.side_effect = (migrate_exception.
+ InvalidVersionError)
+ self.assertRaises(db_exception.DbMigrationError,
+ migration.db_version_control, self.engine,
+ self.path, self.test_version + 1)
+
def test_db_version_return(self):
ret_val = migration.db_version(self.engine, self.path,
self.init_version)