Merge "bagpipe driver: missing return to ignore DHCP ports"

This commit is contained in:
Jenkins
2015年09月22日 12:40:00 +00:00
committed by Gerrit Code Review

View File

@@ -32,8 +32,6 @@ from networking_bagpipe_l2.agent.bgpvpn import rpc_client
LOG = logging.getLogger(__name__)
BAGPIPE_BGPVPN = 'bagpipe-bgpvpn'
def get_network_info_for_port(context, port_id):
"""Get MAC, IP and Gateway IP addresses informations for a specific port"""
@@ -85,10 +83,6 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver):
registry.subscribe(self.registry_port_deleted, resources.PORT,
events.AFTER_DELETE)
@property
def service_type(self):
return BAGPIPE_BGPVPN
def _format_bgpvpn(self, bgpvpn, network_id):
"""JSON-format BGPVPN
@@ -182,9 +176,8 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver):
if not bgpvpns:
return
bgpvpn_rts = (
self._format_bgpvpn_network_route_targets(bgpvpns)
)
bgpvpn_rts = self._format_bgpvpn_network_route_targets(bgpvpns)
LOG.debug("Port connected on BGPVPN network %s with route targets "
"%s" % (network_id, bgpvpn_rts))
@@ -280,11 +273,16 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver):
return full_port.get('binding:host_id')
def notify_port_updated(self, context, port):
LOG.info("notify_port_updated on port %s status %s",
port['id'],
port['status'])
port_bgpvpn_info = {'id': port['id'],
'network_id': port['network_id']}
if port['device_owner'] == 'network:dhcp':
LOG.info("Owner of port %s is network:dhcp, ignoring")
if port['device_owner'] == const.DEVICE_OWNER_DHCP:
LOG.info("Port %s is DHCP, ignoring", port['id'])
return
agent_host = self._get_port_host(port['id'])
@@ -304,14 +302,20 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver):
port_bgpvpn_info,
agent_host)
else:
LOG.debug("no action since new port status is %", port['status'])
LOG.info("no action since new port status is %s", port['status'])
def remove_port_from_bgpvpn_agent(self, context, port):
LOG.info("remove_port_from_bgpvpn_agent port updated on port %s"
"status %s",
port['id'],
port['status'])
port_bgpvpn_info = {'id': port['id'],
'network_id': port['network_id']}
if port['device_owner'] == 'network:dhcp':
LOG.info("Owner of port %s is network:dhcp, ignoring")
if port['device_owner'] == const.DEVICE_OWNER_DHCP:
LOG.info("Port %s is DHCP, ignoring", port['id'])
return
agent_host = self._get_port_host(port['id'])

View File

@@ -16,10 +16,14 @@
import mock
import webob.exc
from neutron.common.constants import DEVICE_OWNER_DHCP
from neutron.common.constants import PORT_STATUS_ACTIVE
from neutron.common.constants import PORT_STATUS_DOWN
from networking_bgpvpn.tests.unit.services import test_plugin
class TestBagpipeServiceDriver(test_plugin.BgpvpnTestCaseMixin):
class TestBagpipeCommon(test_plugin.BgpvpnTestCaseMixin):
def setUp(self):
self.mocked_bagpipeAPI = mock.patch(
@@ -28,7 +32,10 @@ class TestBagpipeServiceDriver(test_plugin.BgpvpnTestCaseMixin):
provider = ('networking_bgpvpn.neutron.services.service_drivers.'
'bagpipe.bagpipe.BaGPipeBGPVPNDriver')
super(TestBagpipeServiceDriver, self).setUp(service_provider=provider)
super(TestBagpipeCommon, self).setUp(service_provider=provider)
class TestBagpipeServiceDriver(TestBagpipeCommon):
def test_bagpipe_associate_net(self):
mocked_update = self.mocked_bagpipeAPI.update_bgpvpn
@@ -110,3 +117,111 @@ class TestBagpipeServiceDriver(test_plugin.BgpvpnTestCaseMixin):
'export_rt': rt}}
mocked_delete.assert_called_once_with(mock.ANY,
formatted_bgpvpn)
class TestBagpipeServiceDriverCallbacks(TestBagpipeCommon):
'''Check that receiving callbacks results in RPC calls to the agent'''
def setUp(self):
super(TestBagpipeServiceDriverCallbacks, self).setUp()
self.bagpipe_driver = self.bgpvpn_plugin.driver
self.bgpvpn_info = {'mac_address': '00:00:de:ad:be:ef',
'ip_address': '10.0.0.2',
'gateway_ip': '10.0.0.1',
'l3vpn': {'import_rt': ['12345:1'],
'export_rt': ['12345:1']
}
}
self.bagpipe_driver._retrieve_bgpvpn_network_info_for_port = mock.Mock(
return_value=self.bgpvpn_info
)
self.testhost = 'TESTHOST'
self.bagpipe_driver._get_port_host = mock.Mock(
return_value=self.testhost
)
self.mock_attach_rpc = self.mocked_bagpipeAPI.attach_port_on_bgpvpn
self.mock_detach_rpc = self.mocked_bagpipeAPI.detach_port_from_bgpvpn
def _build_expected_return_active(self, port):
bgpvpn_info_port = self.bgpvpn_info.copy()
bgpvpn_info_port.update({'id': port['id'],
'network_id': port['network_id']})
return bgpvpn_info_port
def _build_expected_return_down(self, port):
return {'id': port['id'],
'network_id': port['network_id']}
def test_bagpipe_callback_to_rpc_update_active(self):
with self.port() as port:
port['port']['status'] = PORT_STATUS_ACTIVE
self.bagpipe_driver.registry_port_updated(
None, None, None,
context=None,
port=port['port']
)
self.mock_attach_rpc.assert_called_once_with(
mock.ANY,
self._build_expected_return_active(port['port']),
self.testhost)
def test_bagpipe_callback_to_rpc_update_down(self):
with self.port() as port:
port['port']['status'] = PORT_STATUS_DOWN
self.bagpipe_driver.registry_port_updated(
None, None, None,
context=None,
port=port['port']
)
self.mock_detach_rpc.assert_called_once_with(
mock.ANY,
self._build_expected_return_down(port['port']),
self.testhost)
def test_bagpipe_callback_to_rpc_deleted(self):
with self.port() as port:
port['port']['status'] = PORT_STATUS_DOWN
self.bagpipe_driver.registry_port_deleted(
None, None, None,
context=None,
port=port['port']
)
self.mock_detach_rpc.assert_called_once_with(
mock.ANY,
self._build_expected_return_down(port['port']),
self.testhost)
def test_bagpipe_callback_to_rpc_update_active_ignore_DHCP(self):
with self.port(device_owner=DEVICE_OWNER_DHCP) as port:
port['port']['status'] = PORT_STATUS_ACTIVE
self.bagpipe_driver.registry_port_updated(
None, None, None,
context=None,
port=port['port']
)
self.assertFalse(self.mock_attach_rpc.called)
def test_bagpipe_callback_to_rpc_update_down_ignore_DHCP(self):
with self.port(device_owner=DEVICE_OWNER_DHCP) as port:
port['port']['status'] = PORT_STATUS_DOWN
self.bagpipe_driver.registry_port_updated(
None, None, None,
context=None,
port=port['port']
)
self.assertFalse(self.mock_detach_rpc.called)
def test_bagpipe_callback_to_rpc_deleted_ignore_DHCP(self):
with self.port(device_owner=DEVICE_OWNER_DHCP) as port:
port['port']['status'] = PORT_STATUS_DOWN
self.bagpipe_driver.registry_port_deleted(
None, None, None,
context=None,
port=port['port']
)
self.assertFalse(self.mock_detach_rpc.called)

View File

@@ -62,11 +62,11 @@ class BgpvpnTestCaseMixin(test_db_base_plugin_v2.NeutronDbPluginV2TestCase):
'BGPVPNPlugin')
service_plugins = {'bgpvpn_plugin': bgpvpn_plugin_str}
bgpvpn_plugin = plugin.BGPVPNPlugin()
self.bgpvpn_plugin = plugin.BGPVPNPlugin()
extensions_path = ':'.join(extensions.__path__)
ext_mgr = api_extensions.PluginAwareExtensionManager(
extensions_path,
{constants.BGPVPN: bgpvpn_plugin})
{constants.BGPVPN: self.bgpvpn_plugin})
super(BgpvpnTestCaseMixin, self).setUp(
service_plugins=service_plugins,
Reference in New Issue
openstack/networking-bgpvpn
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.

The note is not visible to the blocked user.