176 lines
6.4 KiB
Python
176 lines
6.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Test dbtoyaml and yamltodb using film versions schema
|
|
|
|
See https://pyrseas.wordpress.com/2011/02/07/
|
|
version-control-part-2-sql-databases/
|
|
"""
|
|
import os
|
|
|
|
from pyrseas.testutils import DbMigrateTestCase
|
|
from pyrseas.yamlutil import yamldump
|
|
|
|
|
|
class FilmTestCase(DbMigrateTestCase):
|
|
|
|
def setUp(self):
|
|
self.remove_public_schema(self.srcdb)
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
cls.remove_tempfiles('film-0.')
|
|
cls.remove_tempfiles('usercfg.yaml')
|
|
cls.remove_tempfiles('config.yaml')
|
|
cls.remove_tempfiles('metadata')
|
|
|
|
def test_film_version_01(self):
|
|
"Create schema version 0.1"
|
|
self.execute_script(__file__, 'film-schema-0.1.sql')
|
|
|
|
# Run pg_dump against source database
|
|
srcdump = self.tempfile_path('film-0.1-src.dump')
|
|
self.run_pg_dump(srcdump, True)
|
|
|
|
# Create source YAML file
|
|
srcyaml = self.tempfile_path('film-0.1-src.yaml')
|
|
self.create_yaml(srcyaml, True)
|
|
|
|
# Run pg_dump/dbtoyaml against empty target database
|
|
self.run_pg_dump(self.tempfile_path('film-0.0.dump'))
|
|
self.create_yaml(self.tempfile_path('film-0.0.yaml'))
|
|
|
|
# Migrate the target database
|
|
self.migrate_target(srcyaml, self.tempfile_path('film-0.1.sql'))
|
|
|
|
# Run pg_dump against target database
|
|
targdump = self.tempfile_path('film-0.1.dump')
|
|
self.run_pg_dump(targdump)
|
|
|
|
# Create target YAML file
|
|
targyaml = self.tempfile_path('film-0.1.yaml')
|
|
self.create_yaml(targyaml)
|
|
|
|
# diff film-0.1-src.dump against film-0.1.dump
|
|
assert self.lines(srcdump) == self.lines(targdump)
|
|
# diff film-0.1-src.yaml against film-0.1.yaml
|
|
assert self.lines(srcyaml) == self.lines(targyaml)
|
|
|
|
def test_film_version_02(self):
|
|
"Update schema to version 0.2"
|
|
self.execute_script(__file__, 'film-schema-0.2.sql')
|
|
|
|
# Run pg_dump against source database
|
|
srcdump = self.tempfile_path('film-0.2-src.dump')
|
|
self.run_pg_dump(srcdump, True)
|
|
|
|
# Create source YAML file
|
|
srcyaml = self.tempfile_path('film-0.2-src.yaml')
|
|
self.create_yaml(srcyaml, True)
|
|
|
|
# Migrate the target database
|
|
self.migrate_target(srcyaml, self.tempfile_path('film-0.2.sql'))
|
|
|
|
# Run pg_dump against target database
|
|
targdump = self.tempfile_path('film-0.2.dump')
|
|
self.run_pg_dump(targdump)
|
|
|
|
# Create target YAML file
|
|
targyaml = self.tempfile_path('film-0.2.yaml')
|
|
self.create_yaml(targyaml)
|
|
|
|
# diff film-0.2-src.dump against film-0.2.dump
|
|
assert self.lines(srcdump) == self.lines(targdump)
|
|
# diff film-0.2-src.yaml against film-0.2.yaml
|
|
assert self.lines(srcyaml) == self.lines(targyaml)
|
|
|
|
def test_film_version_03(self):
|
|
"Update schema to version 0.3"
|
|
self.execute_script(__file__, 'film-schema-0.3a.sql')
|
|
self.execute_script(__file__, 'film-schema-0.3b.sql')
|
|
|
|
# Run pg_dump against source database
|
|
srcdump = self.tempfile_path('film-0.3-src.dump')
|
|
self.run_pg_dump(srcdump, True, True)
|
|
|
|
# Create source YAML file
|
|
usercfg = self.tempfile_path("usercfg.yaml")
|
|
with open(usercfg, 'w') as f:
|
|
f.write(yamldump({'repository': {'path': self.tempfile_path('')}}))
|
|
os.environ["PYRSEAS_USER_CONFIG"] = usercfg
|
|
with open(self.tempfile_path("config.yaml"), 'w') as f:
|
|
f.write(yamldump({'datacopy': {'schema sd': ['genre']}}))
|
|
srcyaml = self.tempfile_path('film-0.3-src.yaml')
|
|
self.create_yaml(srcyaml, True)
|
|
|
|
# Migrate the target database
|
|
self.migrate_target(srcyaml, self.tempfile_path('film-0.3.sql'))
|
|
|
|
# Run pg_dump against target database
|
|
targdump = self.tempfile_path('film-0.3.dump')
|
|
self.run_pg_dump(targdump, False, True)
|
|
|
|
# Create target YAML file
|
|
targyaml = self.tempfile_path('film-0.3.yaml')
|
|
self.create_yaml(targyaml)
|
|
|
|
# diff film-0.3-src.dump against film-0.3.dump
|
|
assert self.lines(srcdump) == self.lines(targdump)
|
|
# diff film-0.3-src.yaml against film-0.3.yaml
|
|
assert self.lines(srcyaml) == self.lines(targyaml)
|
|
|
|
def test_film_version_04(self):
|
|
"Revert to schema version 0.2"
|
|
srcyaml = self.tempfile_path('film-0.2.yaml')
|
|
self.migrate_target(srcyaml, self.tempfile_path('film-0.3-undo.sql'))
|
|
|
|
# Run pg_dump against target database
|
|
targdump = self.tempfile_path('film-0.3-undo.dump')
|
|
self.run_pg_dump(targdump)
|
|
|
|
# Create target YAML file
|
|
targyaml = self.tempfile_path('film-0.3-undo.yaml')
|
|
self.create_yaml(targyaml)
|
|
|
|
# diff film-0.2.dump against film-0.3-undo.dump
|
|
srcdump = self.tempfile_path('film-0.2.dump')
|
|
assert self.lines(srcdump) == self.lines(targdump)
|
|
# diff film-0.2.yaml against film-0.3-undo.yaml
|
|
assert self.lines(srcyaml) == self.lines(targyaml)
|
|
|
|
def test_film_version_05(self):
|
|
"Revert to schema version 0.1"
|
|
srcyaml = self.tempfile_path('film-0.1.yaml')
|
|
self.migrate_target(srcyaml, self.tempfile_path('film-0.2-undo.sql'))
|
|
|
|
# Run pg_dump against target database
|
|
targdump = self.tempfile_path('film-0.2-undo.dump')
|
|
self.run_pg_dump(targdump)
|
|
|
|
# Create target YAML file
|
|
targyaml = self.tempfile_path('film-0.2-undo.yaml')
|
|
self.create_yaml(targyaml)
|
|
|
|
# diff film-0.1.dump against film-0.2-undo.dump
|
|
srcdump = self.tempfile_path('film-0.1.dump')
|
|
assert self.lines(srcdump) == self.lines(targdump)
|
|
# diff film-0.1.yaml against film-0.2-undo.yaml
|
|
assert self.lines(srcyaml) == self.lines(targyaml)
|
|
|
|
def test_film_version_06(self):
|
|
"Revert to empty schema"
|
|
srcyaml = self.tempfile_path('film-0.0.yaml')
|
|
self.migrate_target(srcyaml, self.tempfile_path('film-0.1-undo.sql'))
|
|
|
|
# Run pg_dump against target database
|
|
targdump = self.tempfile_path('film-0.1-undo.dump')
|
|
self.run_pg_dump(targdump)
|
|
|
|
# Create target YAML file
|
|
targyaml = self.tempfile_path('film-0.1-undo.yaml')
|
|
self.create_yaml(targyaml)
|
|
|
|
# diff film-0.0.dump against film-0.1-undo.dump
|
|
srcdump = self.tempfile_path('film-0.0.dump')
|
|
assert self.lines(srcdump) == self.lines(targdump)
|
|
# diff film-0.0.yaml against film-0.1-undo.yaml
|
|
assert self.lines(srcyaml) == self.lines(targyaml)
|