Пример #1
0
    def _migrate_up(self, engine, config, version, with_data=False):
        """migrate up to a new version of the db.

        We allow for data insertion and post checks at every
        migration version with special _pre_upgrade_### and
        _check_### functions in the main test.
        """
        # NOTE(sdague): try block is here because it's impossible to debug
        # where a failed data migration happens otherwise
        try:
            data = None
            pre_upgrade = getattr(
                self, "_pre_upgrade_%s" % version, None)
            if pre_upgrade:
                data = pre_upgrade(engine)

            sync.do_alembic_command(config, 'upgrade', version)
            self.assertEqual(version, sync._version(config))
            check = getattr(self, "_check_%s" % version, None)
            if check:
                check(engine, data)
        except Exception:
            LOG.error("Failed to migrate to version %(version)s on engine "
                      "%(engine)s", {'version': version, 'engine': engine})
            raise
Пример #2
0
    def test_walk_versions(self):
        # Determine latest version script from the repo, then
        # upgrade from 1 through to the latest, with no data
        # in the databases. This just checks that the schema itself
        # upgrades successfully.

        alembic_cfg = sync.get_alembic_config()

        # Place the database under version control
        with patch_with_engine(self.engine):

            script_directory = script.ScriptDirectory.from_config(alembic_cfg)

            self.assertIsNone(sync._version(alembic_cfg))

            versions = [ver for ver in script_directory.walk_revisions()]

            for version in reversed(versions):
                self._migrate_up(self.engine, alembic_cfg, version.revision)