From e49e38cbd9d8df2281c0bfddfe6e4aaea90b889b Mon Sep 17 00:00:00 2001 From: David Ripton Date: Mon, 25 Mar 2013 10:30:06 -0400 Subject: [PATCH] Do not test foreign keys with SQLite version < 3.7 Fixes bug 1158828 Even though SQLAlchemy is documented to support foreign keys (with the pragma set) on SQLite >= 3.6.19, we're seeing consistent problems with that support on RHEL 6.4 with SQLite 3.6.20. It works fine on Fedora and Ubuntu with SQLite 3.7.x. To work around these problems, if we're using SQLite, test the SQLite version inside the test that requires foreign key support, and skip the test if it's < 3.7 Change-Id: I1c26f29371376b271a4e384ea7b5d2009651acc1 --- nova/tests/test_db_api.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index 8c27525fb78d..f4075873a042 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -2619,6 +2619,15 @@ class ArchiveTestCase(test.TestCase): # SQLite doesn't enforce foreign key constraints without a pragma. dialect = self.engine.url.get_dialect() if dialect == sqlite.dialect: + # We're seeing issues with foreign key support in SQLite 3.6.20 + # SQLAlchemy doesn't support it at all with < SQLite 3.6.19 + # It works fine in SQLite 3.7. + # So return early to skip this test if running SQLite < 3.7 + import sqlite3 + tup = sqlite3.sqlite_version_info + if tup[0] < 3 or (tup[0] == 3 and tup[1] < 7): + self.skipTest( + 'sqlite version too old for reliable SQLA foreign_keys') self.conn.execute("PRAGMA foreign_keys = ON") insert_statement = self.console_pools.insert().values(deleted=1) result = self.conn.execute(insert_statement)