diff --git a/neutron/agent/netns_cleanup_util.py b/neutron/agent/netns_cleanup_util.py index 2551299cda..f43efd3849 100644 --- a/neutron/agent/netns_cleanup_util.py +++ b/neutron/agent/netns_cleanup_util.py @@ -21,8 +21,10 @@ import eventlet from oslo.config import cfg from neutron.agent.common import config as agent_config +from neutron.agent import dhcp_agent from neutron.agent import l3_agent from neutron.agent.linux import dhcp +from neutron.agent.linux import interface from neutron.agent.linux import ip_lib from neutron.agent.linux import ovs_lib from neutron.api.v2 import attributes @@ -36,9 +38,12 @@ NS_MANGLING_PATTERN = ('(%s|%s)' % (dhcp.NS_PREFIX, l3_agent.NS_PREFIX) + attributes.UUID_PATTERN) -class FakeNetwork(object): - def __init__(self, id): - self.id = id +class FakeDhcpPlugin(object): + """Fake RPC plugin to bypass any RPC calls.""" + def __getattribute__(self, name): + def fake_method(*args): + pass + return fake_method def setup_conf(): @@ -54,18 +59,14 @@ def setup_conf(): help=_('Delete the namespace by removing all devices.')), ] - opts = [ - cfg.StrOpt('dhcp_driver', - default='neutron.agent.linux.dhcp.Dnsmasq', - help=_("The driver used to manage the DHCP server.")), - ] - conf = cfg.CONF conf.register_cli_opts(cli_opts) - conf.register_opts(opts) agent_config.register_interface_driver_opts_helper(conf) + agent_config.register_use_namespaces_opts_helper(conf) agent_config.register_root_helper(conf) conf.register_opts(dhcp.OPTS) + conf.register_opts(dhcp_agent.DhcpAgent.OPTS) + conf.register_opts(interface.OPTS) return conf @@ -76,9 +77,10 @@ def kill_dhcp(conf, namespace): dhcp_driver = importutils.import_object( conf.dhcp_driver, - conf, - FakeNetwork(network_id), - root_helper) + conf=conf, + network=dhcp.NetModel(conf.use_namespaces, {'id': network_id}), + root_helper=root_helper, + plugin=FakeDhcpPlugin()) if dhcp_driver.active: dhcp_driver.disable() diff --git a/neutron/tests/unit/test_agent_netns_cleanup.py b/neutron/tests/unit/test_agent_netns_cleanup.py index dddd483733..71b1cd6daa 100644 --- a/neutron/tests/unit/test_agent_netns_cleanup.py +++ b/neutron/tests/unit/test_agent_netns_cleanup.py @@ -17,12 +17,18 @@ import mock +from neutron.agent.linux import interface from neutron.agent import netns_cleanup_util as util from neutron.tests import base class TestNetnsCleanup(base.BaseTestCase): + def test_setup_conf(self): + expected_opts = interface.OPTS + conf = util.setup_conf() + self.assertTrue(all([opt.name in conf for opt in expected_opts])) + def test_kill_dhcp(self, dhcp_active=True): conf = mock.Mock() conf.AGENT.root_helper = 'sudo', @@ -37,9 +43,10 @@ class TestNetnsCleanup(base.BaseTestCase): util.kill_dhcp(conf, 'ns') - import_object.called_once_with('driver', conf, mock.ANY, - conf.AGENT.root_helper, - mock.ANY) + expected_params = {'conf': conf, 'network': mock.ANY, + 'root_helper': conf.AGENT.root_helper, + 'plugin': mock.ANY} + import_object.assert_called_once_with('driver', **expected_params) if dhcp_active: driver.assert_has_calls([mock.call.disable()]) @@ -104,7 +111,8 @@ class TestNetnsCleanup(base.BaseTestCase): mock_get_bridge_for_iface.assert_called_once_with( conf.AGENT.root_helper, 'tap1') - ovs_br_cls.called_once_with('br-int', conf.AGENT.root_helper) + ovs_br_cls.assert_called_once_with('br-int', + conf.AGENT.root_helper) ovs_bridge.assert_has_calls( [mock.call.delete_port(device.name)])