Merge "Ensure repeated member deletion fails with 404" into stable/folsom

This commit is contained in:
Jenkins 2013-03-27 13:46:37 +00:00 committed by Gerrit Code Review
commit 3389f067d5
3 changed files with 30 additions and 3 deletions

View File

@ -710,11 +710,15 @@ def image_member_delete(context, memb_ref, session=None):
return memb_ref
def image_member_find(context, image_id=None, member=None, session=None):
def image_member_find(context, image_id=None, member=None, session=None,
show_deleted=True):
"""Find all members that meet the given criteria
:param image_id: identifier of image entity
:param member: tenant to which membership has been granted
:param session: an existing sqlalchemy session to use
:param show_deleted: set to False to override use of the context to
determine if deleted memberships are included
"""
session = session or get_session()
@ -726,7 +730,7 @@ def image_member_find(context, image_id=None, member=None, session=None):
query = query.filter_by(image_id=image_id)
if member is not None:
query = query.filter_by(member=member)
if not can_show_deleted(context):
if not (show_deleted and can_show_deleted(context)):
query = query.filter_by(deleted=False)
return query.all()

View File

@ -278,7 +278,8 @@ class Controller(object):
members = self.db_api.image_member_find(req.context,
image_id=image_id,
member=id,
session=session)
session=session,
show_deleted=False)
if members:
self.db_api.image_member_delete(req.context,
members[0],

View File

@ -1918,6 +1918,28 @@ class TestRegistryAPI(base.IsolatedUnitTest):
self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
self.assertTrue('Membership could not be found' in res.body)
def test_delete_member_existing(self):
"""
Tests deleting an existing member is handled correctly
"""
member = dict(image_id=UUID2, member='pattieblack', can_share=False)
db_api.image_member_create(self.context, member)
self.api = test_utils.FakeAuthMiddleware(rserver.API(self.mapper),
is_admin=True)
req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
req.method = 'DELETE'
res = req.get_response(self.api)
self.assertEquals(res.status_int, webob.exc.HTTPNoContent.code)
req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
req.method = 'DELETE'
res = req.get_response(self.api)
self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
self.assertTrue('Membership could not be found' in res.body)
class TestGlanceAPI(base.IsolatedUnitTest):
def setUp(self):