Merge "Rehome populate_project_info() from neutron"

This commit is contained in:
Jenkins 2016-10-13 23:41:53 +00:00 committed by Gerrit Code Review
commit 966d89ccfd
2 changed files with 93 additions and 0 deletions

44
neutron_lib/api/utils.py Normal file
View File

@ -0,0 +1,44 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from webob import exc
from neutron_lib._i18n import _
def populate_project_info(attributes):
"""Ensure that both project_id and tenant_id attributes are present.
If either project_id or tenant_id is present in attributes then ensure
that both are present.
If neither are present then attributes is not updated.
:param attributes: a dictionary of resource/API attributes
:type attributes: dict
:return: the updated attributes dictionary
:rtype: dict
"""
if 'tenant_id' in attributes and 'project_id' not in attributes:
# TODO(HenryG): emit a deprecation warning here
attributes['project_id'] = attributes['tenant_id']
elif 'project_id' in attributes and 'tenant_id' not in attributes:
# Backward compatibility for code still using tenant_id
attributes['tenant_id'] = attributes['project_id']
if attributes.get('project_id') != attributes.get('tenant_id'):
msg = _("'project_id' and 'tenant_id' do not match")
raise exc.HTTPBadRequest(msg)
return attributes

View File

@ -0,0 +1,49 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from webob import exc
from neutron_lib.api import utils
from oslo_utils import uuidutils
from neutron_lib.tests import _base as base
class TestApiUtils(base.BaseTestCase):
def test_populate_project_info_add_project(self):
attrs_in = {'tenant_id': uuidutils.generate_uuid()}
attrs_out = utils.populate_project_info(attrs_in)
self.assertIn('project_id', attrs_out)
self.assertEqual(attrs_in['tenant_id'], attrs_out['project_id'])
self.assertEqual(2, len(attrs_out))
def test_populate_project_info_add_tenant(self):
attrs_in = {'project_id': uuidutils.generate_uuid()}
attrs_out = utils.populate_project_info(attrs_in)
self.assertIn('tenant_id', attrs_out)
self.assertEqual(attrs_in['project_id'], attrs_out['tenant_id'])
self.assertEqual(2, len(attrs_out))
def test_populate_project_info_ids_match(self):
project_id = uuidutils.generate_uuid()
attrs_in = {'project_id': project_id, 'tenant_id': project_id}
attrs_out = utils.populate_project_info(attrs_in)
self.assertEqual(2, len(attrs_out))
def test_populate_project_info_id_mismatch(self):
attrs = {
'project_id': uuidutils.generate_uuid(),
'tenant_id': uuidutils.generate_uuid()
}
self.assertRaises(exc.HTTPBadRequest,
utils.populate_project_info, attrs)