diff options
Diffstat (limited to 'migrate/tests')
-rw-r--r-- | migrate/tests/changeset/databases/__init__.py | 0 | ||||
-rw-r--r-- | migrate/tests/changeset/databases/test_ibmdb2.py | 32 | ||||
-rw-r--r-- | migrate/tests/changeset/test_changeset.py | 28 | ||||
-rw-r--r-- | migrate/tests/versioning/test_genmodel.py | 4 | ||||
-rw-r--r-- | migrate/tests/versioning/test_schemadiff.py | 5 | ||||
-rw-r--r-- | migrate/tests/versioning/test_version.py | 9 |
6 files changed, 65 insertions, 13 deletions
diff --git a/migrate/tests/changeset/databases/__init__.py b/migrate/tests/changeset/databases/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/migrate/tests/changeset/databases/__init__.py diff --git a/migrate/tests/changeset/databases/test_ibmdb2.py b/migrate/tests/changeset/databases/test_ibmdb2.py new file mode 100644 index 0000000..4b3f983 --- /dev/null +++ b/migrate/tests/changeset/databases/test_ibmdb2.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import mock + +import six + +from migrate.changeset.databases import ibmdb2 +from migrate.tests import fixture + + +class TestIBMDBDialect(fixture.Base): + """ + Test class for ibmdb2 dialect unit tests which do not require + a live backend database connection. + """ + + def test_is_unique_constraint_with_null_cols_supported(self): + test_values = { + '10.1': False, + '10.4.99': False, + '10.5': True, + '10.5.1': True + } + for version, supported in six.iteritems(test_values): + mock_dialect = mock.MagicMock() + mock_dialect.dbms_ver = version + self.assertEqual( + supported, + ibmdb2.is_unique_constraint_with_null_columns_supported( + mock_dialect), + 'Assertion failed on version: %s' % version) diff --git a/migrate/tests/changeset/test_changeset.py b/migrate/tests/changeset/test_changeset.py index bd7f034..8b4a6be 100644 --- a/migrate/tests/changeset/test_changeset.py +++ b/migrate/tests/changeset/test_changeset.py @@ -231,18 +231,18 @@ class TestAddDropColumn(fixture.DB): col.drop() - @fixture.usedb(not_supported='mysql') + @fixture.usedb(not_supported=['mysql']) def test_check(self): """Can create columns with check constraint""" - col = Column('data', + col = Column('foo', Integer, - sqlalchemy.schema.CheckConstraint('data > 4')) + sqlalchemy.schema.CheckConstraint('foo > 4')) col.create(self.table) # check if constraint was added (cannot test on objects) - self.table.insert(values={'data': 5}).execute() + self.table.insert(values={'foo': 5}).execute() try: - self.table.insert(values={'data': 3}).execute() + self.table.insert(values={'foo': 3}).execute() except (sqlalchemy.exc.IntegrityError, sqlalchemy.exc.ProgrammingError): pass @@ -272,10 +272,11 @@ class TestAddDropColumn(fixture.DB): col.drop(self.table) # TODO: remove already attached columns with uniques, pks, fks .. - @fixture.usedb(not_supported='postgresql') + @fixture.usedb(not_supported=['ibm_db_sa', 'postgresql']) def test_drop_column_of_composite_index(self): # NOTE(rpodolyaka): postgresql automatically drops a composite index # if one of its columns is dropped + # NOTE(mriedem): DB2 does the same. self.table_idx.c.b.drop() reflected = Table(self.table_idx.name, MetaData(), autoload=True, @@ -441,7 +442,7 @@ class TestAddDropColumn(fixture.DB): # check remaining foreign key is there self.assertEqual([['r1']], self._actual_foreign_keys()) - + @fixture.usedb() def test_drop_with_complex_foreign_keys(self): from sqlalchemy.schema import ForeignKeyConstraint @@ -449,11 +450,16 @@ class TestAddDropColumn(fixture.DB): self.table.drop() self.meta.clear() - + + # NOTE(mriedem): DB2 does not currently support unique constraints + # on nullable columns, so the columns that are used to create the + # foreign keys here need to be non-nullable for testing with DB2 + # to work. + # create FK's target reftable = Table('tmp_ref', self.meta, Column('id', Integer, primary_key=True), - Column('jd', Integer), + Column('jd', Integer, nullable=False), UniqueConstraint('id','jd') ) if self.engine.has_table(reftable.name): @@ -464,8 +470,8 @@ class TestAddDropColumn(fixture.DB): self.table = Table( self.table_name, self.meta, Column('id', Integer, primary_key=True), - Column('r1', Integer), - Column('r2', Integer), + Column('r1', Integer, nullable=False), + Column('r2', Integer, nullable=False), ForeignKeyConstraint(['r1','r2'], [reftable.c.id,reftable.c.jd], name='test_fk') diff --git a/migrate/tests/versioning/test_genmodel.py b/migrate/tests/versioning/test_genmodel.py index e36bea1..f7924ff 100644 --- a/migrate/tests/versioning/test_genmodel.py +++ b/migrate/tests/versioning/test_genmodel.py @@ -39,7 +39,9 @@ class TestSchemaDiff(fixture.DB): diff = schemadiff.getDiffOfModelAgainstDatabase(self.meta, self.engine, excludeTables=['migrate_version']) genmodel.ModelGenerator(diff,self.engine).runB2A() - @fixture.usedb() + # NOTE(mriedem): DB2 handles UnicodeText as LONG VARGRAPHIC + # so the schema diffs on the columns don't work with this test. + @fixture.usedb(not_supported='ibm_db_sa') def test_functional(self): def assertDiff(isDiff, tablesMissingInDatabase, tablesMissingInModel, tablesWithDiff): diff --git a/migrate/tests/versioning/test_schemadiff.py b/migrate/tests/versioning/test_schemadiff.py index 74714e2..1ff353f 100644 --- a/migrate/tests/versioning/test_schemadiff.py +++ b/migrate/tests/versioning/test_schemadiff.py @@ -157,7 +157,10 @@ class Test_getDiffOfModelAgainstDatabase(SchemaDiffBase): Column('data', Float()), ) - @fixture.usedb() + # NOTE(mriedem): The ibm_db_sa driver handles the Float() as a DOUBLE() + # which extends Numeric() but isn't defined in sqlalchemy.types, so we + # can't check for it as a special case like is done in schemadiff.ColDiff. + @fixture.usedb(not_supported='ibm_db_sa') def test_float_vs_numeric(self): self._assert_diff( Column('data', Float()), diff --git a/migrate/tests/versioning/test_version.py b/migrate/tests/versioning/test_version.py index 436d5f9..f521659 100644 --- a/migrate/tests/versioning/test_version.py +++ b/migrate/tests/versioning/test_version.py @@ -160,6 +160,15 @@ class TestVersion(fixture.Pathed): ver = Version(1, self.temp_usable_dir, []) self.assertRaises(ScriptError, ver.add_script, '123.sql') + # tests bad ibm_db_sa filename + ver = Version(123, self.temp_usable_dir, []) + self.assertRaises(ScriptError, ver.add_script, + '123_ibm_db_sa_upgrade.sql') + + # tests that the name is ok but the script doesn't exist + self.assertRaises(InvalidScriptError, ver.add_script, + '123_test_ibm_db_sa_upgrade.sql') + pyscript = os.path.join(self.temp_usable_dir, 'bla.py') open(pyscript, 'w') ver.add_script(pyscript) |