Bug 1704057: port status upate: missing add of provisioning component

Added call to add_provisioning_component call in pseudo_agentdb_binding

Closes-Bug: #1704057
Change-Id: Id4aee878813fd34f6a41174eede030ff27172907
This commit is contained in:
Josh
2017-07-13 08:25:32 +03:00
parent f59dba86d7
commit 98ad5bea70
2 changed files with 38 additions and 4 deletions

View File

@@ -16,6 +16,8 @@
import logging
from string import Template
from neutron.callbacks import resources
from neutron.db import provisioning_blocks
from neutron_lib.api.definitions import portbindings
from neutron_lib import constants as nl_const
from neutron_lib import context
@@ -307,14 +309,21 @@ class PseudoAgentDBBindingController(port_binding.PortBindingController):
'segment': valid_segment, 'vif_type': vif_type,
'vif_details': vif_details})
port_status = nl_const.PORT_STATUS_ACTIVE
if odl_features.has(odl_features.OPERATIONAL_PORT_STATUS):
port_status = nl_const.PORT_STATUS_DOWN
port_status = self._prepare_initial_port_status(port_context)
port_context.set_binding(valid_segment[api.ID], vif_type,
vif_details, status=port_status)
return True
def _prepare_initial_port_status(self, port_context):
port_status = nl_const.PORT_STATUS_ACTIVE
if odl_features.has(odl_features.OPERATIONAL_PORT_STATUS):
port_status = nl_const.PORT_STATUS_DOWN
provisioning_blocks.add_provisioning_component(
port_context._plugin_context, port_context.current['id'],
resources.PORT, provisioning_blocks.L2_AGENT_ENTITY)
return port_status
def _is_valid_segment(self, segment, conf):
"""Verify a segment is supported by ODL."""
network_type = segment[api.NETWORK_TYPE]

View File

@@ -20,6 +20,7 @@ from string import Template
import mock
from oslo_serialization import jsonutils
from neutron.db import provisioning_blocks
from neutron.plugins.ml2 import driver_api as api
from neutron.plugins.ml2 import driver_context as ctx
from neutron_lib.api.definitions import portbindings
@@ -27,6 +28,7 @@ from neutron_lib import constants as n_const
from neutron_lib.plugins import directory
from neutron_lib.plugins.ml2 import api as ml2_api
from networking_odl.common import odl_features
from networking_odl.ml2 import pseudo_agentdb_binding
from networking_odl.tests import base
from requests.exceptions import HTTPError
@@ -228,6 +230,7 @@ class TestPseudoAgentDBBindingController(base.DietTestCase):
"""Setup test."""
super(TestPseudoAgentDBBindingController, self).setUp()
self.useFixture(base.OpenDaylightRestClientFixture())
self.useFixture(base.OpenDaylightFeaturesFixture())
fake_agents_db = mock.MagicMock()
fake_agents_db.create_or_update_agent = mock.MagicMock()
@@ -446,7 +449,29 @@ class TestPseudoAgentDBBindingController(base.DietTestCase):
current={'id': 'PORTID',
portbindings.VNIC_TYPE: portbindings.VNIC_NORMAL},
segments_to_bind=fake_segments, network=network,
host_agents=lambda agent_type: host_agents)
host_agents=lambda agent_type: host_agents,
_plugin_context=mock.MagicMock()
)
@mock.patch.object(provisioning_blocks, 'add_provisioning_component')
def test_prepare_inital_port_status_no_websocket(
self, mocked_add_provisioning_component):
odl_features.feature_set = set()
port_ctx = self._fake_port_context(
fake_segments=[self.test_valid_segment])
initial_port_status = self.mgr._prepare_initial_port_status(port_ctx)
self.assertEqual(initial_port_status, n_const.PORT_STATUS_ACTIVE)
mocked_add_provisioning_component.assert_not_called()
@mock.patch.object(provisioning_blocks, 'add_provisioning_component')
def test_prepare_inital_port_status_with_websocket(
self, mocked_add_provisioning_component):
odl_features.feature_set.add(odl_features.OPERATIONAL_PORT_STATUS)
port_ctx = self._fake_port_context(
fake_segments=[self.test_valid_segment])
initial_port_status = self.mgr._prepare_initial_port_status(port_ctx)
self.assertEqual(initial_port_status, n_const.PORT_STATUS_DOWN)
mocked_add_provisioning_component.assert_called()
class TestPseudoAgentDBBindingControllerBug1608659(