Validate expected parameters in add/remove router interfaces

The add and remove router interface methods check that interface_info
is not empty but don't check if it contains any of expected parameters:
port_id and subnet_id
This patch adds a helper method to validate that interface_info contains
at least one of the expected parameters
Include a unit test for the empty port_id and subnet_id case

Closes-Bug: #1325982

Change-Id: Ia370565235a33a847704b972c875d8f1573306c0
This commit is contained in:
Edgar Magana 2014-06-05 16:33:16 -07:00
parent 86a912999c
commit 673d6cf65f
2 changed files with 10 additions and 3 deletions

View File

@ -403,11 +403,11 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
return DEVICE_OWNER_ROUTER_INTF return DEVICE_OWNER_ROUTER_INTF
def _validate_interface_info(self, interface_info): def _validate_interface_info(self, interface_info):
if not interface_info: port_id_specified = interface_info and 'port_id' in interface_info
subnet_id_specified = interface_info and 'subnet_id' in interface_info
if not (port_id_specified or subnet_id_specified):
msg = _("Either subnet_id or port_id must be specified") msg = _("Either subnet_id or port_id must be specified")
raise n_exc.BadRequest(resource='router', msg=msg) raise n_exc.BadRequest(resource='router', msg=msg)
port_id_specified = 'port_id' in interface_info
subnet_id_specified = 'subnet_id' in interface_info
if port_id_specified and subnet_id_specified: if port_id_specified and subnet_id_specified:
msg = _("Cannot specify both subnet-id and port-id") msg = _("Cannot specify both subnet-id and port-id")
raise n_exc.BadRequest(resource='router', msg=msg) raise n_exc.BadRequest(resource='router', msg=msg)

View File

@ -786,6 +786,13 @@ class L3NatTestCaseBase(L3NatTestCaseMixin):
None, None,
p['port']['id']) p['port']['id'])
def test_router_add_interface_empty_port_and_subnet_ids(self):
with self.router() as r:
self._router_interface_action('add', r['router']['id'],
None, None,
expected_code=exc.
HTTPBadRequest.code)
def test_router_add_interface_port_bad_tenant_returns_404(self): def test_router_add_interface_port_bad_tenant_returns_404(self):
with mock.patch('neutron.context.Context.to_dict') as tdict: with mock.patch('neutron.context.Context.to_dict') as tdict:
admin_context = {'roles': ['admin']} admin_context = {'roles': ['admin']}