From: Jenkins Date: Mon, 16 Nov 2015 13:58:19 +0000 (+0000) Subject: Merge "Switch to using neutron.common.utils:replace_file()" X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=daa545fb43ae45cce1b3e5b924fe6aebf6d115e6;p=openstack-build%2Fneutron-build.git Merge "Switch to using neutron.common.utils:replace_file()" --- daa545fb43ae45cce1b3e5b924fe6aebf6d115e6 diff --cc neutron/common/utils.py index b6d1e7492,190d3e624..fa1df4483 --- a/neutron/common/utils.py +++ b/neutron/common/utils.py @@@ -493,34 -485,5 +493,34 @@@ def replace_file(file_name, data, file_ dir=base_dir, delete=False) as tmp_file: tmp_file.write(data) - os.chmod(tmp_file.name, 0o644) + os.chmod(tmp_file.name, file_mode) os.rename(tmp_file.name, file_name) + + +def load_class_by_alias_or_classname(namespace, name): + """Load class using stevedore alias or the class name + :param namespace: namespace where the alias is defined + :param name: alias or class name of the class to be loaded + :returns class if calls can be loaded + :raises ImportError if class cannot be loaded + """ + + if not name: + LOG.error(_LE("Alias or class name is not set")) + raise ImportError(_("Class not found.")) + try: + # Try to resolve class by alias + mgr = driver.DriverManager(namespace, name) + class_to_load = mgr.driver + except RuntimeError: + e1_info = sys.exc_info() + # Fallback to class name + try: + class_to_load = importutils.import_class(name) + except (ImportError, ValueError): + LOG.error(_LE("Error loading class by alias"), + exc_info=e1_info) + LOG.error(_LE("Error loading class by class name"), + exc_info=True) + raise ImportError(_("Class not found.")) + return class_to_load diff --cc neutron/tests/unit/agent/linux/test_dhcp.py index 3a00ee866,1604fe7fb..abb082f77 --- a/neutron/tests/unit/agent/linux/test_dhcp.py +++ b/neutron/tests/unit/agent/linux/test_dhcp.py @@@ -967,14 -985,15 +967,14 @@@ class TestDhcpLocalProcess(TestBase) parent.assert_has_calls(expected) def test_get_interface_name(self): - with mock.patch('six.moves.builtins.open') as mock_open: - mock_open.return_value.__enter__ = lambda s: s - mock_open.return_value.__exit__ = mock.Mock() - mock_open.return_value.read.return_value = 'tap0' - lp = LocalChild(self.conf, FakeDualNetwork()) - self.assertEqual(lp.interface_name, 'tap0') + net = FakeDualNetwork() + path = '/dhcp/%s/interface' % net.id + self.useFixture(tools.OpenFixture(path, 'tap0')) + lp = LocalChild(self.conf, net) + self.assertEqual(lp.interface_name, 'tap0') def test_set_interface_name(self): - with mock.patch('neutron.agent.linux.utils.replace_file') as replace: + with mock.patch('neutron.common.utils.replace_file') as replace: lp = LocalChild(self.conf, FakeDualNetwork()) with mock.patch.object(lp, 'get_conf_file_name') as conf_file: conf_file.return_value = '/interface'