Merge "neutron: filter None port_ids from ports list in _unbind_ports"
This commit is contained in:
@@ -358,6 +358,10 @@ class API(base_api.NetworkAPI):
|
||||
port_client = (neutron if not port_binding else
|
||||
get_client(context, admin=True))
|
||||
for port_id in ports:
|
||||
# A port_id is optional in the NetworkRequest object so check here
|
||||
# in case the caller forgot to filter the list.
|
||||
if port_id is None:
|
||||
continue
|
||||
port_req_body = {'port': {'device_id': '', 'device_owner': ''}}
|
||||
if port_binding:
|
||||
port_req_body['port']['binding:host_id'] = None
|
||||
|
||||
@@ -3366,6 +3366,19 @@ class TestNeutronv2WithMock(test.TestCase):
|
||||
def test_unbind_ports(self, mock_neutron, mock_has_ext):
|
||||
self._test_unbind_ports(mock_neutron, mock_has_ext, False)
|
||||
|
||||
@mock.patch('nova.network.neutronv2.api.API._has_port_binding_extension')
|
||||
def test_unbind_ports_no_port_ids(self, mock_has_ext):
|
||||
# Tests that None entries in the ports list are filtered out.
|
||||
mock_client = mock.Mock()
|
||||
mock_update_port = mock.Mock()
|
||||
mock_client.update_port = mock_update_port
|
||||
mock_ctx = mock.Mock(is_admin=False)
|
||||
mock_has_ext.return_value = True
|
||||
|
||||
api = neutronapi.API()
|
||||
api._unbind_ports(mock_ctx, [None], mock_client, mock_client)
|
||||
self.assertFalse(mock_update_port.called)
|
||||
|
||||
@mock.patch('nova.network.neutronv2.api.API.get_instance_nw_info')
|
||||
@mock.patch('nova.network.neutronv2.api.excutils')
|
||||
@mock.patch('nova.network.neutronv2.api.API._delete_ports')
|
||||
|
||||
Reference in New Issue
Block a user