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 fee13d3d9ef..14b61815027 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 @@ -25,6 +25,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 @@ -114,6 +115,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"):