summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-08-06 00:23:17 +0000
committerGerrit Code Review <review@openstack.org>2013-08-06 00:23:17 +0000
commite68e7cae5a61ef464ce395c9802c3f744aed1ccc (patch)
tree49488b74641bbb6066377c17d72bf3fecaff51bf
parented1f9676d9e59022ecd9cd05e50b970d1b2930c8 (diff)
parentcf27bbe356013c11d2a8f2e12da3e5aa60e2fcf9 (diff)
downloadkeystone-e68e7cae5a61ef464ce395c9802c3f744aed1ccc.tar.gz
keystone-e68e7cae5a61ef464ce395c9802c3f744aed1ccc.tar.xz
keystone-e68e7cae5a61ef464ce395c9802c3f744aed1ccc.zip
Merge "Handle json data when migrating role metadata."
-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()