From 01194b356e39e3b0affca67015efb7634bf28697 Mon Sep 17 00:00:00 2001 From: Petrut Lucian Date: Wed, 25 Sep 2013 20:07:01 +0300 Subject: [PATCH] Fixes port status hanging to build status ML2 plugin changes the port status to "build" when get_device_details is called. For this reason, the port status must be updated once the port details are processed. Fixes bug: #1224991 Change-Id: I2c0321073cc07e1764fedbfbecbc844557ac6bc9 --- .../plugins/hyperv/agent/hyperv_neutron_agent.py | 4 ++++ .../unit/hyperv/test_hyperv_neutron_agent.py | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/neutron/plugins/hyperv/agent/hyperv_neutron_agent.py b/neutron/plugins/hyperv/agent/hyperv_neutron_agent.py index 40c347a8a..f6ea12c46 100644 --- a/neutron/plugins/hyperv/agent/hyperv_neutron_agent.py +++ b/neutron/plugins/hyperv/agent/hyperv_neutron_agent.py @@ -281,6 +281,10 @@ class HyperVNeutronAgent(object): device_details['physical_network'], device_details['segmentation_id'], device_details['admin_state_up']) + self.plugin_rpc.update_device_up(self.context, + device, + self.agent_id, + cfg.CONF.host) return resync def _treat_devices_removed(self, devices): diff --git a/neutron/tests/unit/hyperv/test_hyperv_neutron_agent.py b/neutron/tests/unit/hyperv/test_hyperv_neutron_agent.py index f9e17d41b..7969834df 100644 --- a/neutron/tests/unit/hyperv/test_hyperv_neutron_agent.py +++ b/neutron/tests/unit/hyperv/test_hyperv_neutron_agent.py @@ -90,8 +90,20 @@ class TestHyperVNeutronAgent(base.BaseTestCase): def test_treat_devices_added_updates_known_port(self): details = mock.MagicMock() details.__contains__.side_effect = lambda x: True - self.assertTrue(self.mock_treat_devices_added(details, - '_treat_vif_port')) + with mock.patch.object(self.agent.plugin_rpc, + "update_device_up") as func: + self.assertTrue(self.mock_treat_devices_added(details, + '_treat_vif_port')) + self.assertTrue(func.called) + + def test_treat_devices_added_missing_port_id(self): + details = mock.MagicMock() + details.__contains__.side_effect = lambda x: False + with mock.patch.object(self.agent.plugin_rpc, + "update_device_up") as func: + self.assertFalse(self.mock_treat_devices_added(details, + '_treat_vif_port')) + self.assertFalse(func.called) def test_treat_devices_removed_returns_true_for_missing_device(self): attrs = {'update_device_down.side_effect': Exception()} -- 2.45.2