From b1b3ac4aa8b90210827544e09b2fa162f72bcfe1 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 e7d467ba3e..ef976f30ad 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 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):