diff options
| author | Yuriy Zveryanskyy <yzveryanskyy@mirantis.com> | 2013-06-17 13:48:45 +0300 |
|---|---|---|
| committer | Yuriy Zveryanskyy <yzveryanskyy@mirantis.com> | 2013-06-17 13:48:45 +0300 |
| commit | 7fdba82bad3c4e550bda4db03ed9d1ab7ab62934 (patch) | |
| tree | e45ed5de89b0a542f350018168056d625c9ba562 /nova/tests | |
| parent | 328b347cd058f1c87d7e32a18d9decc0ba517266 (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.py | 5 | ||||
| -rw-r--r-- | nova/tests/db/test_migrations.py | 29 |
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.""" |
