From 321162a65337881f0f5bf44dc7c6639cabbe3a02 Mon Sep 17 00:00:00 2001 From: elajkat Date: Mon, 12 Apr 2021 09:54:59 +0200 Subject: [PATCH] trivial: Make driver_controller's _attrs_to_driver py3 compatible In python3 dict.values() doesn't return list but instead dict_values, it must be converted to list to "enjoy" list operations like insert. Add unit tests to be sure. Closes-Bug: #1923423 Change-Id: Ie270ac2ee65c02bdb099d11af7f1d2fb62ad0f61 (cherry picked from commit e270ac2ee65c02bdb099d11af7f1d2fb62ad0f61) (cherry picked from commit 3ec596f9ef0b539ea3868960bc3bfa145d4b6e21) --- .../service_providers/driver_controller.py | 2 +- .../service_providers/test_driver_controller.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/neutron/services/l3_router/service_providers/driver_controller.py b/neutron/services/l3_router/service_providers/driver_controller.py index 6c834a6f1b7..0df4e617b72 100644 --- a/neutron/services/l3_router/service_providers/driver_controller.py +++ b/neutron/services/l3_router/service_providers/driver_controller.py @@ -224,7 +224,7 @@ class DriverController(object): distributed = _is_distributed( router.get('distributed', lib_const.ATTR_NOT_SPECIFIED)) ha = _is_ha(router.get('ha', lib_const.ATTR_NOT_SPECIFIED)) - drivers = self.drivers.values() + drivers = list(self.drivers.values()) # make sure default is tried before the rest if defined if self.default_provider: drivers.insert(0, self.drivers[self.default_provider]) diff --git a/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py b/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py index 70fa78265fd..b840abd137e 100644 --- a/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py +++ b/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py @@ -26,6 +26,7 @@ from oslo_utils import uuidutils import testtools from neutron.services.l3_router.service_providers import driver_controller +from neutron.services.l3_router.service_providers import single_node from neutron.services import provider_configuration from neutron.tests import base from neutron.tests.unit import testlib_api @@ -115,6 +116,18 @@ class TestDriverController(testlib_api.SqlTestCase): states=({'flavor_id': 'old_fid'},))) mock_cb.assert_not_called() + def test___attrs_to_driver(self): + test_dc = driver_controller.DriverController(self.fake_l3) + test_dc.default_provider = 'single_node' + self.assertIsInstance(test_dc._attrs_to_driver({}), + single_node.SingleNodeDriver) + + test_dc.default_provider = 'ha' + with mock.patch.object(driver_controller, + "_is_driver_compatible", return_value=False): + self.assertRaises(NotImplementedError, test_dc._attrs_to_driver, + {}) + def test__update_router_provider_with_flags(self): test_dc = driver_controller.DriverController(self.fake_l3) with mock.patch.object(registry, "publish"):