]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
rpc.callbacks.registry: validate that callback provider is registered
authorIhar Hrachyshka <ihrachys@redhat.com>
Mon, 27 Jul 2015 11:51:36 +0000 (13:51 +0200)
committerIhar Hrachyshka <ihrachys@redhat.com>
Mon, 27 Jul 2015 12:05:53 +0000 (14:05 +0200)
Partially-Implements: blueprint quantum-qos-api
Change-Id: I05e1902c75e4ce5de7f88f5d6281934a3a9a84ac

neutron/api/rpc/callbacks/registry.py
neutron/tests/unit/api/rpc/callbacks/test_registry.py

index 1fb77c41b374214ac2bc747da4a2cad6ac43298a..de132983d31a5f12e2de4aa2ab90f52a974c8940 100644 (file)
@@ -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):
index dbe27b2e3c54183cd3cace21020ce90ce56b8f21..3c12b38dc746c0d76070949f702a7bc5281c9d15 100644 (file)
@@ -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')