fw['tenant_id'])
if not router_info_list:
LOG.debug(_('No Routers on tenant: %s'), fw['tenant_id'])
+ # fw was created before any routers were added, and if a
+ # delete is sent then we need to ack so that plugin can
+ # cleanup.
+ if func_name == 'delete_firewall':
+ self.fwplugin_rpc.firewall_deleted(context, fw['id'])
return
LOG.debug(_("Apply fw on Router List: '%s'"),
[ri.router['id'] for ri in router_info_list])
mock.sentinel.context,
fake_firewall['id'])
+ def test_delete_firewall_no_router(self):
+ fake_firewall = {'id': 0, 'tenant_id': 1}
+ self.api.plugin_rpc = mock.Mock()
+ with contextlib.nested(
+ mock.patch.object(self.api.plugin_rpc, 'get_routers'),
+ mock.patch.object(self.api, '_get_router_info_list_for_tenant'),
+ mock.patch.object(self.api.fwplugin_rpc, 'firewall_deleted')
+ ) as (
+ mock_get_routers,
+ mock_get_router_info_list_for_tenant,
+ mock_firewall_deleted):
+
+ mock_get_router_info_list_for_tenant.return_value = []
+ self.api.delete_firewall(
+ context=mock.sentinel.context,
+ firewall=fake_firewall, host='host')
+
+ mock_get_routers.assert_called_once_with(
+ mock.sentinel.context)
+
+ mock_get_router_info_list_for_tenant.assert_called_once_with(
+ mock_get_routers.return_value, fake_firewall['tenant_id'])
+
+ mock_firewall_deleted.assert_called_once_with(
+ mock.sentinel.context,
+ fake_firewall['id'])
+
def test_process_router_add_fw_update(self):
fake_firewall_list = [{'id': 0, 'tenant_id': 1,
'status': constants.PENDING_UPDATE}]