diff --git a/neutron/plugins/hyperv/agent/hyperv_neutron_agent.py b/neutron/plugins/hyperv/agent/hyperv_neutron_agent.py index 40c347a8ac..f6ea12c460 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 f9e17d41bb..7969834dfc 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()}