summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark J. Washenberger <mark.washenberger@markwash.net>2013-07-29 11:12:03 -0700
committerMark J. Washenberger <mark.washenberger@markwash.net>2013-07-31 09:05:31 -0700
commitcf27bbe356013c11d2a8f2e12da3e5aa60e2fcf9 (patch)
tree9a0db3ccd0ecf5adab05351cd5b68e57fb6771fe
parentc21b458081b011089e6819c716e63331f8df0ce4 (diff)
downloadkeystone-cf27bbe356013c11d2a8f2e12da3e5aa60e2fcf9.tar.gz
keystone-cf27bbe356013c11d2a8f2e12da3e5aa60e2fcf9.tar.xz
keystone-cf27bbe356013c11d2a8f2e12da3e5aa60e2fcf9.zip
Handle json data when migrating role metadata.
Fixes bug 1206257 Change-Id: Ia522e023a2d66ec25bc909db12d358f7c0ee6952
-rw-r--r--keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py4
-rw-r--r--tests/test_sql_upgrade.py24
2 files changed, 25 insertions, 3 deletions
diff --git a/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py b/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py
index 35110df4..a0c6ddbc 100644
--- a/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py
+++ b/keystone/common/sql/migrate_repo/versions/020_migrate_metadata_table_roles.py
@@ -23,11 +23,9 @@ def upgrade(migrate_engine):
session = sql.orm.sessionmaker(bind=migrate_engine)()
for metadata in session.query(old_metadata_table):
+ data = json.loads(metadata.data)
if config.CONF.member_role_id not in metadata.data:
- data = json.loads(metadata.data)
data['roles'].append(config.CONF.member_role_id)
- else:
- data = metadata.data
r = session.query(new_metadata_table).filter_by(
user_id=metadata.user_id,
diff --git a/tests/test_sql_upgrade.py b/tests/test_sql_upgrade.py
index ed00deae..cf82b814 100644
--- a/tests/test_sql_upgrade.py
+++ b/tests/test_sql_upgrade.py
@@ -594,6 +594,22 @@ class SqlUpgradeTests(test.TestCase):
'data': json.dumps({"roles": [role2['id']]})}
session.execute(metadata_table.insert().values(role_grant))
+ # Create another user to test the case where member_role_id is already
+ # assigned.
+ user2 = {'id': uuid.uuid4().hex,
+ 'name': uuid.uuid4().hex,
+ 'domain_id': domain['id'],
+ 'password': uuid.uuid4().hex,
+ 'enabled': True,
+ 'extra': json.dumps({})}
+ session.execute(user_table.insert().values(user2))
+
+ # Grant CONF.member_role_id to User2
+ role_grant = {'user_id': user2['id'],
+ 'tenant_id': project['id'],
+ 'data': json.dumps({"roles": [CONF.member_role_id]})}
+ session.execute(metadata_table.insert().values(role_grant))
+
session.commit()
self.upgrade(17)
@@ -635,6 +651,14 @@ class SqlUpgradeTests(test.TestCase):
'data': data}
cmd = user_project_metadata_table.insert().values(role_grant)
self.engine.execute(cmd)
+
+ # Create another conflicting user-project for User2
+ data = json.dumps({"roles": [role2['id']]})
+ role_grant = {'user_id': user2['id'],
+ 'project_id': project['id'],
+ 'data': data}
+ cmd = user_project_metadata_table.insert().values(role_grant)
+ self.engine.execute(cmd)
# End Scaffolding
session.commit()