summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Gandelman <adamg@canonical.com>2012-04-02 14:21:43 -0700
committerDevin Carlen <devin.carlen@gmail.com>2012-04-03 19:05:18 -0700
commit7d08d12cea96910145f05499ba7d124603d7c4f6 (patch)
tree52579053b246dca941e9509c3220074b2d11e34a
parentaa542c420aa283968a0154a29038ec0bb1be9326 (diff)
downloadkeystone-essex-rc2.tar.gz
Remove tenant membership during user deletionessex-rc22012.1
Remove users' tenant membership on user deletion. Resolves a FK constraint issue that previously went unnoticed due to testing against database configurations that do not support FK constraints (MyISAM). Fixes LP bug 959294. Update: * Move tenant membership cleanup to the sql identity backend * Add a test case to test_backend_sql Change-Id: Ib4f5da03033f7886b36d1ab3b8b4ac37f08b2e0e
-rw-r--r--keystone/identity/backends/sql.py8
-rw-r--r--tests/test_backend_sql.py11
2 files changed, 19 insertions, 0 deletions
diff --git a/keystone/identity/backends/sql.py b/keystone/identity/backends/sql.py
index 7c692475c..e4281a8d5 100644
--- a/keystone/identity/backends/sql.py
+++ b/keystone/identity/backends/sql.py
@@ -327,7 +327,15 @@ class Identity(sql.Base, identity.Driver):
def delete_user(self, user_id):
session = self.get_session()
user_ref = session.query(User).filter_by(id=user_id).first()
+ membership_refs = session.query(UserTenantMembership)\
+ .filter_by(user_id=user_id)\
+ .all()
+
with session.begin():
+ if membership_refs:
+ for membership_ref in membership_refs:
+ session.delete(membership_ref)
+
session.delete(user_ref)
session.flush()
diff --git a/tests/test_backend_sql.py b/tests/test_backend_sql.py
index a8951512e..4d1da37c3 100644
--- a/tests/test_backend_sql.py
+++ b/tests/test_backend_sql.py
@@ -37,6 +37,17 @@ class SqlIdentity(test.TestCase, test_backend.IdentityTests):
self.identity_api = identity_sql.Identity()
self.load_fixtures(default_fixtures)
+ def test_delete_user_with_tenant_association(self):
+ user = {'id': 'fake',
+ 'name': 'fakeuser',
+ 'password': 'passwd'}
+ self.identity_api.create_user('fake', user)
+ self.identity_api.add_user_to_tenant(self.tenant_bar['id'],
+ user['id'])
+ self.identity_api.delete_user(user['id'])
+ tenants = self.identity_api.get_tenants_for_user(user['id'])
+ self.assertEquals(tenants, [])
+
class SqlToken(test.TestCase, test_backend.TokenTests):
def setUp(self):