summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorYuriy Zveryanskyy <yzveryanskyy@mirantis.com>2013-06-17 13:48:45 +0300
committerYuriy Zveryanskyy <yzveryanskyy@mirantis.com>2013-06-17 13:48:45 +0300
commit7fdba82bad3c4e550bda4db03ed9d1ab7ab62934 (patch)
treee45ed5de89b0a542f350018168056d625c9ba562 /nova/tests
parent328b347cd058f1c87d7e32a18d9decc0ba517266 (diff)
Add unique constraints to Cell.
In documentation: "name: Name of the current cell. This must be unique for each cell" Added unique constraint 'uniq_cell_name0deleted' ('name','deleted') to Cell model and migrate sripts. Added new exception `CellsExists`. Updated cell_create() in db.api. Tests updated respectively. blueprint db-enforce-unique-keys Change-Id: Ib76e167089cb4756e4438613b49013ebf0874afe
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/db/test_db_api.py5
-rw-r--r--nova/tests/db/test_migrations.py29
2 files changed, 34 insertions, 0 deletions
diff --git a/nova/tests/db/test_db_api.py b/nova/tests/db/test_db_api.py
index df5561ae0..a1f37712f 100644
--- a/nova/tests/db/test_db_api.py
+++ b/nova/tests/db/test_db_api.py
@@ -4929,6 +4929,11 @@ class CellTestCase(test.TestCase, ModelsObjectComparatorMixin):
self.assertRaises(exception.CellNotFound, db.cell_update, self.ctxt,
'cellnotinbase', self._get_cell_base_values())
+ def test_cell_create_exists(self):
+ db.cell_create(self.ctxt, self._get_cell_base_values())
+ self.assertRaises(exception.CellExists, db.cell_create,
+ self.ctxt, self._get_cell_base_values())
+
class ArchiveTestCase(test.TestCase):
diff --git a/nova/tests/db/test_migrations.py b/nova/tests/db/test_migrations.py
index dc77a27d7..812f0d8ae 100644
--- a/nova/tests/db/test_migrations.py
+++ b/nova/tests/db/test_migrations.py
@@ -1643,6 +1643,35 @@ class TestNovaMigrations(BaseMigrationTestCase, CommonTestsMixIn):
rows = services.select().execute().fetchall()
self.assertFalse('disabled_reason' in rows[0])
+ def _pre_upgrade_189(self, engine):
+ cells = db_utils.get_table(engine, 'cells')
+ data = [
+ {'name': 'name_123', 'deleted': 0},
+ {'name': 'name_123', 'deleted': 0},
+ {'name': 'name_345', 'deleted': 0},
+ ]
+ for item in data:
+ cells.insert().values(item).execute()
+ return data
+
+ def _check_189(self, engine, data):
+ cells = db_utils.get_table(engine, 'cells')
+
+ def get_(name, deleted):
+ deleted_value = 0 if not deleted else cells.c.id
+ return cells.select().\
+ where(cells.c.name == name).\
+ where(cells.c.deleted == deleted_value).\
+ execute().\
+ fetchall()
+
+ self.assertEqual(1, len(get_('name_123', False)))
+ self.assertEqual(1, len(get_('name_123', True)))
+ self.assertEqual(1, len(get_('name_345', False)))
+ self.assertRaises(sqlalchemy.exc.IntegrityError,
+ cells.insert().execute,
+ {'name': 'name_123', 'deleted': 0})
+
class TestBaremetalMigrations(BaseMigrationTestCase, CommonTestsMixIn):
"""Test sqlalchemy-migrate migrations."""