diff options
author | Jamie Lennox <jlennox@redhat.com> | 2013-04-17 10:26:22 +1000 |
---|---|---|
committer | Jamie Lennox <jlennox@redhat.com> | 2013-04-24 16:24:32 +1000 |
commit | c9174850cc76c117a4cefc582a550fbca8e312df (patch) | |
tree | dd745dbd1f994fbc89e76b02b0816f36b66c0b0f /tests/test_sql_upgrade.py | |
parent | 2eab5fd2b7f980d355caa53be582aa07dc65a8e2 (diff) | |
download | keystone-c9174850cc76c117a4cefc582a550fbca8e312df.tar.gz keystone-c9174850cc76c117a4cefc582a550fbca8e312df.tar.xz keystone-c9174850cc76c117a4cefc582a550fbca8e312df.zip |
Make migration tests postgres & mysql friendly.
Add some session commits to prevent database deadlocks.
Force close all open sessions before performing tear down.
Use escaped parameter handling for raw sql statements.
Change-Id: I0ef670ddc416a02e78570ab6ebed2b4bf2a8635b
Diffstat (limited to 'tests/test_sql_upgrade.py')
-rw-r--r-- | tests/test_sql_upgrade.py | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/tests/test_sql_upgrade.py b/tests/test_sql_upgrade.py index e4eab098..36d452af 100644 --- a/tests/test_sql_upgrade.py +++ b/tests/test_sql_upgrade.py @@ -72,6 +72,7 @@ class SqlUpgradeTests(test.TestCase): self.max_version = self.schema.repository.version().version def tearDown(self): + sqlalchemy.orm.session.Session.close_all() table = sqlalchemy.Table("migrate_version", self.metadata, autoload=True) self.downgrade(0) @@ -204,12 +205,11 @@ class SqlUpgradeTests(test.TestCase): for user in users.values(): self.insert_dict(session, 'user', user) session.commit() - session.close() self.upgrade(10) user_table = sqlalchemy.Table('user', self.metadata, autoload=True) - q = self.Session().query(user_table, 'enabled') + q = session.query(user_table, 'enabled') user = q.filter_by(id=users['bool_enabled_user']['id']).one() self.assertTrue(user.enabled) @@ -536,21 +536,21 @@ class SqlUpgradeTests(test.TestCase): domain = {'id': uuid.uuid4().hex, 'name': uuid.uuid4().hex, 'enabled': True} - self.engine.execute(domain_table.insert().values(domain)) + session.execute(domain_table.insert().values(domain)) # Create a Project project = {'id': uuid.uuid4().hex, 'name': uuid.uuid4().hex, 'domain_id': domain['id'], 'extra': "{}"} - self.engine.execute(project_table.insert().values(project)) + session.execute(project_table.insert().values(project)) # Create another Project project2 = {'id': uuid.uuid4().hex, 'name': uuid.uuid4().hex, 'domain_id': domain['id'], 'extra': "{}"} - self.engine.execute(project_table.insert().values(project2)) + session.execute(project_table.insert().values(project2)) # Create a User user = {'id': uuid.uuid4().hex, @@ -559,28 +559,28 @@ class SqlUpgradeTests(test.TestCase): 'password': uuid.uuid4().hex, 'enabled': True, 'extra': json.dumps({})} - self.engine.execute(user_table.insert().values(user)) + session.execute(user_table.insert().values(user)) # Create a Role role = {'id': uuid.uuid4().hex, 'name': uuid.uuid4().hex} - self.engine.execute(role_table.insert().values(role)) + session.execute(role_table.insert().values(role)) # And another role role2 = {'id': uuid.uuid4().hex, 'name': uuid.uuid4().hex} - self.engine.execute(role_table.insert().values(role2)) + session.execute(role_table.insert().values(role2)) # Grant Role to User role_grant = {'user_id': user['id'], 'tenant_id': project['id'], 'data': json.dumps({"roles": [role['id']]})} - self.engine.execute(metadata_table.insert().values(role_grant)) + session.execute(metadata_table.insert().values(role_grant)) role_grant = {'user_id': user['id'], 'tenant_id': project2['id'], 'data': json.dumps({"roles": [role2['id']]})} - self.engine.execute(metadata_table.insert().values(role_grant)) + session.execute(metadata_table.insert().values(role_grant)) session.commit() @@ -589,18 +589,17 @@ class SqlUpgradeTests(test.TestCase): user_project_metadata_table = sqlalchemy.Table( 'user_project_metadata', self.metadata, autoload=True) - # Test user in project has role - r = session.execute('select data from metadata where user_id="%s"' - 'and tenant_id="%s"' % - (user['id'], project['id'])) + r = session.execute('select data from metadata where ' + 'user_id=:user and tenant_id=:tenant', + {'user': user['id'], 'tenant': project['id']}) test_project1 = json.loads(r.fetchone()['data']) self.assertEqual(len(test_project1['roles']), 1) self.assertIn(role['id'], test_project1['roles']) # Test user in project2 has role2 - r = session.execute('select data from metadata where user_id="%s"' - ' and tenant_id="%s"' % - (user['id'], project2['id'])) + r = session.execute('select data from metadata where ' + 'user_id=:user and tenant_id=:tenant', + {'user': user['id'], 'tenant': project2['id']}) test_project2 = json.loads(r.fetchone()['data']) self.assertEqual(len(test_project2['roles']), 1) self.assertIn(role2['id'], test_project2['roles']) @@ -609,8 +608,8 @@ class SqlUpgradeTests(test.TestCase): # Migration 17 does not properly migrate this data, so this should # be None. r = session.execute('select data from user_project_metadata where ' - 'user_id="%s" and project_id="%s"' % - (user['id'], project['id'])) + 'user_id=:user and project_id=:project', + {'user': user['id'], 'project': project['id']}) self.assertIsNone(r.fetchone()) # Create a conflicting user-project in user_project_metadata with @@ -623,15 +622,17 @@ class SqlUpgradeTests(test.TestCase): self.engine.execute(cmd) # End Scaffolding + session.commit() + # Migrate to 20 self.upgrade(20) # The user-project pairs should have all roles from the previous # metadata table in addition to any roles currently in # user_project_metadata - r = session.execute('select data from user_project_metadata ' - 'where user_id="%s" and project_id="%s"' % - (user['id'], project['id'])) + r = session.execute('select data from user_project_metadata where ' + 'user_id=:user and project_id=:project', + {'user': user['id'], 'project': project['id']}) role_ids = json.loads(r.fetchone()['data'])['roles'] self.assertEqual(len(role_ids), 3) self.assertIn(CONF.member_role_id, role_ids) @@ -641,8 +642,8 @@ class SqlUpgradeTests(test.TestCase): # pairs that only existed in old metadata table should be in # user_project_metadata r = session.execute('select data from user_project_metadata where ' - 'user_id="%s" and project_id="%s"' % - (user['id'], project2['id'])) + 'user_id=:user and project_id=:project', + {'user': user['id'], 'project': project2['id']}) role_ids = json.loads(r.fetchone()['data'])['roles'] self.assertEqual(len(role_ids), 2) self.assertIn(CONF.member_role_id, role_ids) @@ -766,6 +767,7 @@ class SqlUpgradeTests(test.TestCase): r = session.execute('select count(*) as c from role ' 'where extra is null') self.assertEqual(r.fetchone()['c'], 2) + session.commit() self.upgrade(19) r = session.execute('select count(*) as c from role ' 'where extra is null') @@ -791,11 +793,9 @@ class SqlUpgradeTests(test.TestCase): 'legacy_endpoint_id': legacy_endpoint_id})} self.insert_dict(session, 'endpoint', endpoint) - self.upgrade(22) session.commit() - session.close() + self.upgrade(22) - session = self.Session() endpoint_table = sqlalchemy.Table( 'endpoint', self.metadata, autoload=True) |