From: Ihar Hrachyshka Date: Mon, 27 Jul 2015 11:51:36 +0000 (+0200) Subject: rpc.callbacks.registry: validate that callback provider is registered X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=612ffff9aff93e3e41c549097a1249f2ea37a8e0;p=openstack-build%2Fneutron-build.git rpc.callbacks.registry: validate that callback provider is registered Partially-Implements: blueprint quantum-qos-api Change-Id: I05e1902c75e4ce5de7f88f5d6281934a3a9a84ac --- diff --git a/neutron/api/rpc/callbacks/registry.py b/neutron/api/rpc/callbacks/registry.py index 1fb77c41b..de132983d 100644 --- a/neutron/api/rpc/callbacks/registry.py +++ b/neutron/api/rpc/callbacks/registry.py @@ -30,6 +30,10 @@ class CallbackReturnedWrongObjectType(exceptions.NeutronException): message = _('Callback for %(resource_type)s returned wrong object type') +class CallbackNotFound(exceptions.NeutronException): + message = _('Callback for %(resource_type)s not found') + + #resource implementation callback registration functions def get_info(resource_type, resource_id, **kwargs): """Get information about resource type with resource id. @@ -40,14 +44,16 @@ def get_info(resource_type, resource_id, **kwargs): :returns: NeutronObject """ callback = _get_resources_callback_manager().get_callback(resource_type) - if callback: - obj = callback(resource_type, resource_id, **kwargs) - if obj: - expected_cls = resources.get_resource_cls(resource_type) - if not isinstance(obj, expected_cls): - raise CallbackReturnedWrongObjectType( - resource_type=resource_type) - return obj + if not callback: + raise CallbackNotFound(resource_type=resource_type) + + obj = callback(resource_type, resource_id, **kwargs) + if obj: + expected_cls = resources.get_resource_cls(resource_type) + if not isinstance(obj, expected_cls): + raise CallbackReturnedWrongObjectType( + resource_type=resource_type) + return obj def register_provider(callback, resource_type): diff --git a/neutron/tests/unit/api/rpc/callbacks/test_registry.py b/neutron/tests/unit/api/rpc/callbacks/test_registry.py index dbe27b2e3..3c12b38dc 100644 --- a/neutron/tests/unit/api/rpc/callbacks/test_registry.py +++ b/neutron/tests/unit/api/rpc/callbacks/test_registry.py @@ -56,3 +56,8 @@ class GetInfoTestCase(base.BaseTestCase): self.assertRaises( registry.CallbackReturnedWrongObjectType, registry.get_info, resources.QOS_POLICY, 'fake_id') + + def test_raises_on_callback_not_found(self): + self.assertRaises( + registry.CallbackNotFound, + registry.get_info, resources.QOS_POLICY, 'fake_id')