summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-03-11 16:06:31 +0000
committerGerrit Code Review <review@openstack.org>2013-03-11 16:06:31 +0000
commit597fdb77988f5bfd5a247e7ef74fd04087de2d11 (patch)
treeaa93a76f3647d9e65ea895d546de7103b8ff19a7
parent7052bffe2bc26ae6b362523c519d1441a4ce4d15 (diff)
parent42bd756c30d16a3e48c7821d0a5d5433de41a506 (diff)
Merge "Fix folsom -> grizzly role table migration issues (bug 1119789)"
-rw-r--r--keystone/common/sql/migrate_repo/versions/019_fixup_role.py37
-rw-r--r--tests/test_sql_upgrade.py17
2 files changed, 54 insertions, 0 deletions
diff --git a/keystone/common/sql/migrate_repo/versions/019_fixup_role.py b/keystone/common/sql/migrate_repo/versions/019_fixup_role.py
new file mode 100644
index 00000000..11fa0a40
--- /dev/null
+++ b/keystone/common/sql/migrate_repo/versions/019_fixup_role.py
@@ -0,0 +1,37 @@
+import json
+import uuid
+
+import sqlalchemy as sql
+from sqlalchemy import orm
+
+from keystone import config
+from keystone import exception
+
+
+CONF = config.CONF
+
+
+def upgrade(migrate_engine):
+ meta = sql.MetaData()
+ meta.bind = migrate_engine
+
+ role_table = sql.Table('role', meta, autoload=True)
+ # name should be 255 characters to match fresh database
+ role_table.c.name.alter(type=sql.String(length=255))
+
+ # blank 'extra' field should be "{}"
+ none = None
+ update = role_table.update().where(role_table.c.extra == none).values(
+ {role_table.c.extra: "{}"})
+ migrate_engine.execute(update)
+
+
+def downgrade(migrate_engine):
+ # this fixes bugs in migration 001 and 007 that result in discrepancies
+ # between fresh databases and databases updated from 004 (folsom).
+ # the changes fixing 007 will be rolled back in 007's rollback if
+ # the user desires to return to a state before the existence of the extra
+ # column.
+ # the name length change reflects the current default and should not be
+ # rolled back.
+ pass
diff --git a/tests/test_sql_upgrade.py b/tests/test_sql_upgrade.py
index dc7cce5e..32bb3aad 100644
--- a/tests/test_sql_upgrade.py
+++ b/tests/test_sql_upgrade.py
@@ -538,6 +538,23 @@ class SqlUpgradeTests(test.TestCase):
self.assertTableColumns("trust_role",
["trust_id", "role_id"])
+ def test_fixup_role(self):
+ session = self.Session()
+ self.assertEqual(self.schema.version, 0, "DB is at version 0")
+ self.upgrade(1)
+ self.insert_dict(session, "role", {"id": "test", "name": "test"})
+ self.upgrade(18)
+ self.insert_dict(session, "role", {"id": "test2",
+ "name": "test2",
+ "extra": None})
+ r = session.execute('select count(*) as c from role '
+ 'where extra is null')
+ self.assertEqual(r.fetchone()['c'], 2)
+ self.upgrade(19)
+ r = session.execute('select count(*) as c from role '
+ 'where extra is null')
+ self.assertEqual(r.fetchone()['c'], 0)
+
def populate_user_table(self, with_pass_enab=False,
with_pass_enab_domain=False):
# Populate the appropriate fields in the user