diff --git a/neutron/plugins/vmware/plugins/base.py b/neutron/plugins/vmware/plugins/base.py index 2c8ca6b35..16d81ef39 100644 --- a/neutron/plugins/vmware/plugins/base.py +++ b/neutron/plugins/vmware/plugins/base.py @@ -1965,7 +1965,11 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, except n_exc.NotFound: LOG.warning(_("Nat rules not found in nsx for port: %s"), id) - super(NsxPluginV2, self).disassociate_floatingips(context, port_id) + # NOTE(ihrachys): L3 agent notifications don't make sense for + # NSX VMWare plugin since there is no L3 agent in such setup, so + # disabling them here. + super(NsxPluginV2, self).disassociate_floatingips( + context, port_id, do_notify=False) def create_network_gateway(self, context, network_gateway): """Create a layer-2 network gateway. diff --git a/neutron/tests/unit/vmware/test_nsx_plugin.py b/neutron/tests/unit/vmware/test_nsx_plugin.py index e5a6c602a..3371f4e86 100644 --- a/neutron/tests/unit/vmware/test_nsx_plugin.py +++ b/neutron/tests/unit/vmware/test_nsx_plugin.py @@ -960,23 +960,28 @@ class TestL3NatTestCase(L3NatTest, with self.port() as p: private_sub = {'subnet': {'id': p['port']['fixed_ips'][0]['subnet_id']}} - with self.floatingip_no_assoc(private_sub) as fip: - port_id = p['port']['id'] - body = self._update('floatingips', fip['floatingip']['id'], - {'floatingip': {'port_id': port_id}}) - self.assertEqual(body['floatingip']['port_id'], port_id) - # Floating IP status should be active - self.assertEqual(constants.FLOATINGIP_STATUS_ACTIVE, - body['floatingip']['status']) - # Disassociate - body = self._update('floatingips', fip['floatingip']['id'], - {'floatingip': {'port_id': None}}) - body = self._show('floatingips', fip['floatingip']['id']) - self.assertIsNone(body['floatingip']['port_id']) - self.assertIsNone(body['floatingip']['fixed_ip_address']) - # Floating IP status should be down - self.assertEqual(constants.FLOATINGIP_STATUS_DOWN, - body['floatingip']['status']) + plugin = manager.NeutronManager.get_plugin() + with mock.patch.object(plugin, 'notify_routers_updated') as notify: + with self.floatingip_no_assoc(private_sub) as fip: + port_id = p['port']['id'] + body = self._update('floatingips', fip['floatingip']['id'], + {'floatingip': {'port_id': port_id}}) + self.assertEqual(body['floatingip']['port_id'], port_id) + # Floating IP status should be active + self.assertEqual(constants.FLOATINGIP_STATUS_ACTIVE, + body['floatingip']['status']) + # Disassociate + body = self._update('floatingips', fip['floatingip']['id'], + {'floatingip': {'port_id': None}}) + body = self._show('floatingips', fip['floatingip']['id']) + self.assertIsNone(body['floatingip']['port_id']) + self.assertIsNone(body['floatingip']['fixed_ip_address']) + # Floating IP status should be down + self.assertEqual(constants.FLOATINGIP_STATUS_DOWN, + body['floatingip']['status']) + + # check that notification was not requested + self.assertFalse(notify.called) def test_create_router_maintenance_returns_503(self): with self._create_l3_ext_network() as net: