def test_retrieve(self): testdata_filename = os.path.join(os.path.dirname(__file__), "migrations") manager = migration_manager.MigrationManager(testdata_filename) migrations = manager.migrations self.assertEqual(len(migrations), 3) self.assertEqual(migrations[2].prev_migration_id, migrations[1].migration_id) self.assertEqual(migrations[1].prev_migration_id, migrations[0].migration_id)
def test_order_migrations_error_on_unclear_start_migration(self): first = migration.Migration('1', None) second = migration.Migration('3', '2') migrations = [first, second] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) with self.assertRaisesRegex(error.SpannerError, 'no valid previous'): manager._order_migrations(migrations)
def test_retrieve(self): manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) migrations = manager.migrations self.assertEqual(len(migrations), 3) self.assertEqual(migrations[2].prev_migration_id, migrations[1].migration_id) self.assertEqual(migrations[1].prev_migration_id, migrations[0].migration_id)
def test_order_migrations_error_on_unclear_start_migration(self): first = migration.Migration("1", None, "1") second = migration.Migration("3", "2", "3") migrations = [first, second] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) with self.assertRaisesRegex(error.SpannerError, "no valid previous"): manager._order_migrations(migrations)
def __init__( self, connection: api.SpannerConnection, basedir: Optional[str] = None, pkg_name: Optional[str] = None, ): self._manager = migration_manager.MigrationManager(basedir, pkg_name) self._migration_status_map = None self._connection = connection
def test_order_migrations_error_on_circular_dependency(self): first = migration.Migration('1', '3') second = migration.Migration('2', '1') third = migration.Migration('3', '2') migrations = [third, first, second] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) with self.assertRaisesRegex(error.SpannerError, 'No valid migration'): manager._order_migrations(migrations)
def test_order_migrations_error_on_unclear_successor(self): first = migration.Migration('1', None) second = migration.Migration('2', '1') third = migration.Migration('3', '1') migrations = [third, first, second] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) with self.assertRaisesRegex(error.SpannerError, 'unclear successor'): manager._order_migrations(migrations)
def test_order_migrations_with_no_none(self): first = migration.Migration('2', '1') second = migration.Migration('3', '2') third = migration.Migration('4', '3') migrations = [third, first, second] expected_order = [first, second, third] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) self.assertEqual(manager._order_migrations(migrations), expected_order)
def test_order_migrations_error_on_unclear_successor(self): first = migration.Migration("1", None, "1") second = migration.Migration("2", "1", "2") third = migration.Migration("3", "1", "3") migrations = [third, first, second] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) with self.assertRaisesRegex(error.SpannerError, "unclear successor"): manager._order_migrations(migrations)
def test_order_migrations_with_no_none(self): first = migration.Migration("2", "1", "2") second = migration.Migration("3", "2", "3") third = migration.Migration("4", "3", "4") migrations = [third, first, second] expected_order = [first, second, third] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) self.assertEqual(manager._order_migrations(migrations), expected_order)
def test_order_migrations_error_on_circular_dependency(self): first = migration.Migration("1", "3", "1") second = migration.Migration("2", "1", "2") third = migration.Migration("3", "2", "3") migrations = [third, first, second] manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) with self.assertRaisesRegex(error.SpannerError, "No valid migration"): manager._order_migrations(migrations)
def test_generate(self): manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) path = manager.generate('test migration') try: migration_ = manager._migration_from_file(path) self.assertIsNotNone(migration_.migration_id) self.assertIsNotNone(migration_.prev_migration_id) self.assertIsInstance(migration_.upgrade(), update.NoUpdate) self.assertIsInstance(migration_.downgrade(), update.NoUpdate) finally: os.remove(path)
def test_generate(self): testdata_filename = os.path.join(os.path.dirname(__file__), "migrations") shutil.rmtree(self.TEST_MIGRATIONS_DIR) shutil.copytree(testdata_filename, self.TEST_MIGRATIONS_DIR) os.chmod(self.TEST_MIGRATIONS_DIR, stat.S_IRWXO | stat.S_IRWXU) for f in os.listdir(self.TEST_MIGRATIONS_DIR): file_path = os.path.join(self.TEST_MIGRATIONS_DIR, f) if not os.path.isdir(file_path): os.chmod( file_path, stat.S_IROTH | stat.S_IWOTH | stat.S_IRUSR | stat.S_IWUSR ) manager = migration_manager.MigrationManager(self.TEST_MIGRATIONS_DIR) path = manager.generate("test migration") try: migration_ = manager._migration_from_file(path) self.assertIsNotNone(migration_.migration_id) self.assertIsNotNone(migration_.prev_migration_id) self.assertIsInstance(migration_.upgrade(), update.NoUpdate) self.assertIsInstance(migration_.downgrade(), update.NoUpdate) finally: shutil.rmtree(self.TEST_MIGRATIONS_DIR)
def generate(args: Any) -> None: manager = migration_manager.MigrationManager(args.directory) manager.generate(args.name)