Merge "Fix unspecified bahavior on GET /servers/detail?tenant_id=X as admin"

This commit is contained in:
Jenkins 2017-02-07 19:40:59 +00:00 committed by Gerrit Code Review
commit d48aeb5783
2 changed files with 21 additions and 0 deletions

View File

@ -323,6 +323,11 @@ class ServersController(wsgi.Controller):
context.can(server_policies.SERVERS % 'index:get_all_tenants')
elevated = context.elevated()
else:
# As explained in lp:#1185290, if `all_tenants` is not passed
# we must ignore the `tenant_id` search option. As explained
# in a above code comment, any change to this behavior would
# require a microversion bump.
search_opts.pop('tenant_id', None)
if context.project_id:
search_opts['project_id'] = context.project_id
else:

View File

@ -779,6 +779,7 @@ class ServersControllerTest(ControllerTest):
def test_tenant_id_filter_no_admin_context(self):
def fake_get_all(context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
self.assertNotIn('tenant_id', search_opts)
self.assertEqual(search_opts['project_id'], 'fake')
return [fakes.stub_instance_obj(100)]
@ -788,6 +789,21 @@ class ServersControllerTest(ControllerTest):
servers = self.controller.index(req)['servers']
self.assertEqual(len(servers), 1)
def test_tenant_id_filter_admin_context(self):
""""Test tenant_id search opt is dropped if all_tenants is not set."""
def fake_get_all(context, search_opts=None, **kwargs):
self.assertIsNotNone(search_opts)
self.assertNotIn('tenant_id', search_opts)
self.assertEqual('fake', search_opts['project_id'])
return [fakes.stub_instance_obj(100)]
req = self.req('/fake/servers?tenant_id=newfake',
use_admin_context=True)
with mock.patch.object(compute_api.API, 'get_all') as mock_get:
mock_get.side_effect = fake_get_all
servers = self.controller.index(req)['servers']
self.assertEqual(len(servers), 1)
def test_all_tenants_param_normal(self):
def fake_get_all(context, search_opts=None, **kwargs):
self.assertNotIn('project_id', search_opts)