diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 950344850b6..69b4ea0cede 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -205,6 +205,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager): except Exception: msg = _("Error importing interface driver " "'%s'") % self.conf.interface_driver + LOG.error(msg) raise SystemExit(msg) self.context = context.get_admin_context_without_session() @@ -228,7 +229,9 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager): The actual values are not verified for correctness. """ if not self.conf.interface_driver: - raise SystemExit(_('An interface driver must be specified')) + msg = _('An interface driver must be specified') + LOG.error(msg) + raise SystemExit(msg) if not self.conf.use_namespaces and not self.conf.router_id: msg = _('Router id is required if not using namespaces.') diff --git a/neutron/tests/unit/test_l3_agent.py b/neutron/tests/unit/test_l3_agent.py index 66bb0876b61..ae4e3080179 100644 --- a/neutron/tests/unit/test_l3_agent.py +++ b/neutron/tests/unit/test_l3_agent.py @@ -657,6 +657,21 @@ class TestBasicRouterOperations(base.BaseTestCase): agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) self.assertEqual(['1234'], agent._router_ids()) + def test_nonexistent_interface_driver(self): + self.conf.set_override('interface_driver', None) + with mock.patch.object(l3_agent, 'LOG') as log: + self.assertRaises(SystemExit, l3_agent.L3NATAgent, + HOSTNAME, self.conf) + msg = 'An interface driver must be specified' + log.error.assert_called_once_with(msg) + + self.conf.set_override('interface_driver', 'wrong_driver') + with mock.patch.object(l3_agent, 'LOG') as log: + self.assertRaises(SystemExit, l3_agent.L3NATAgent, + HOSTNAME, self.conf) + msg = "Error importing interface driver 'wrong_driver'" + log.error.assert_called_once_with(msg) + class TestL3AgentEventHandler(base.BaseTestCase):