From 66a1338f7825cbe6a8bf0fb6d406d7982ef7fb37 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 0dd41ff3..717a1c8b 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -2516,6 +2516,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)