From c15c07d518c761689aec825515a9192624403e55 Mon Sep 17 00:00:00 2001 From: Angus Lees Date: Thu, 28 Aug 2014 14:42:18 +1000 Subject: [PATCH] Big Switch: Send notification after port update The Big Switch plugin was not sending port update notifications for security group changes after the port was updated. This patch corrects that behavior by calling the port_update method on the RPC notifier when necessary after a port update. Closes-Bug: #1376527 Change-Id: Ic2fd872725c1da8e2dc394473b7feb407d21268f --- neutron/plugins/bigswitch/plugin.py | 7 +++++-- .../tests/unit/bigswitch/test_restproxy_plugin.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/neutron/plugins/bigswitch/plugin.py b/neutron/plugins/bigswitch/plugin.py index e7d467ba3..ef976f30a 100644 --- a/neutron/plugins/bigswitch/plugin.py +++ b/neutron/plugins/bigswitch/plugin.py @@ -785,11 +785,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 87391cf94..f96cc656c 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): -- 2.45.2