Fix Migrations UTs using wrong DB
Our current migrations unit tests are NOT doing the migrations in the DB they should. Migrations are being run in whatever was last used for the normal cinder UTs, which is SQLite. This creates some issues such as: - Migrations can not be run independently, because no "normal cinder UT" has been run before, so there is no DB that the migration can use. This is easy to test: $ . .tox/py310/bin/activate $ stestr run -n cinder.tests.unit.db.test_migrations That will fail with oslo_db.exception.DBNonExistentDatabase because no previous test has created the sqlite DB. If we were to run any other UT before them they would work. - Migrations that run conditional code based on the DB Engine will fail, even when running things conditionally. For example a migration that uses `index_exists` that only works on MySQL will fail even when doing it conditionally and only running it on MySQL, because it will actually be run in SQLite: is_mysql = engine.dialect.name == 'mysql' idx_name = f'{table}_deleted_project_id_idx' + if is_mysql and utils.index_exists(engine, table, idx_name): This patch fixes this by making sure the get_engine method in Cinder returns the same engine that the migration code is using. Change-Id: I15f6e4bd180e9a5af82c76d61658a3cb1eac22c8
This commit is contained in:
parent
f11ff244b7
commit
7c79e2115a
@ -34,6 +34,7 @@ from sqlalchemy.engine import reflection
|
||||
|
||||
import cinder.db.legacy_migrations
|
||||
from cinder.db import migration
|
||||
from cinder.db.sqlalchemy import api
|
||||
from cinder.db.sqlalchemy import models
|
||||
from cinder.tests import fixtures as cinder_fixtures
|
||||
from cinder.tests.unit import utils as test_utils
|
||||
@ -58,6 +59,7 @@ class CinderModelsMigrationsSync(test_migrations.ModelsMigrationsSync):
|
||||
self.useFixture(cinder_fixtures.StandardLogging())
|
||||
|
||||
self.engine = enginefacade.writer.get_engine()
|
||||
self.patch(api, 'get_engine', self.get_engine)
|
||||
|
||||
def db_sync(self, engine):
|
||||
migration.db_sync(engine=self.engine)
|
||||
@ -140,6 +142,7 @@ class MigrationsWalk(
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.engine = enginefacade.writer.get_engine()
|
||||
self.patch(api, 'get_engine', lambda: self.engine)
|
||||
self.config = migration._find_alembic_conf()
|
||||
self.init_version = migration.ALEMBIC_INIT_VERSION
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user