summaryrefslogtreecommitdiff
path: root/migrate/tests
diff options
context:
space:
mode:
Diffstat (limited to 'migrate/tests')
-rw-r--r--migrate/tests/changeset/databases/__init__.py0
-rw-r--r--migrate/tests/changeset/databases/test_ibmdb2.py32
-rw-r--r--migrate/tests/changeset/test_changeset.py28
-rw-r--r--migrate/tests/versioning/test_genmodel.py4
-rw-r--r--migrate/tests/versioning/test_schemadiff.py5
-rw-r--r--migrate/tests/versioning/test_version.py9
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)