diff --git a/neutron/plugins/bigswitch/plugin.py b/neutron/plugins/bigswitch/plugin.py index d7b0b678ef..52b32de485 100644 --- a/neutron/plugins/bigswitch/plugin.py +++ b/neutron/plugins/bigswitch/plugin.py @@ -787,11 +787,14 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base, self.servers.rest_update_port(net_tenant_id, new_port["network_id"], mapped_port) - agent_update_required = self.update_security_group_on_port( + need_port_update_notify = self.update_security_group_on_port( context, port_id, port, orig_port, new_port) - agent_update_required |= self.is_security_group_member_updated( + need_port_update_notify |= self.is_security_group_member_updated( context, orig_port, new_port) + if need_port_update_notify: + self.notifier.port_update(context, new_port) + # return new_port return new_port diff --git a/neutron/tests/unit/bigswitch/test_restproxy_plugin.py b/neutron/tests/unit/bigswitch/test_restproxy_plugin.py index 87391cf945..f96cc656ca 100644 --- a/neutron/tests/unit/bigswitch/test_restproxy_plugin.py +++ b/neutron/tests/unit/bigswitch/test_restproxy_plugin.py @@ -294,6 +294,20 @@ class TestBigSwitchProxyNetworksV2(test_plugin.TestNetworksV2, self._get_networks(n['network']['tenant_id'] )[0]['id']) + def test_notify_on_security_group_change(self): + plugin = manager.NeutronManager.get_plugin() + with self.port() as p: + with contextlib.nested( + mock.patch.object(plugin, 'notifier'), + mock.patch.object(plugin, 'is_security_group_member_updated', + return_value=True) + ) as (n_mock, s_mock): + # any port update should trigger a notification due to s_mock + data = {'port': {'name': 'aNewName'}} + self.new_update_request( + 'ports', data, p['port']['id']).get_response(self.api) + self.assertTrue(n_mock.port_update.called) + class TestBigSwitchProxySubnetsV2(test_plugin.TestSubnetsV2, BigSwitchProxyPluginV2TestCase):