From 612ffff9aff93e3e41c549097a1249f2ea37a8e0 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Mon, 27 Jul 2015 13:51:36 +0200 Subject: [PATCH] rpc.callbacks.registry: validate that callback provider is registered Partially-Implements: blueprint quantum-qos-api Change-Id: I05e1902c75e4ce5de7f88f5d6281934a3a9a84ac --- neutron/api/rpc/callbacks/registry.py | 22 ++++++++++++------- .../unit/api/rpc/callbacks/test_registry.py | 5 +++++ 2 files changed, 19 insertions(+), 8 deletions(-) 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') -- 2.45.2