]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
get_info: request object backport only if desired version is different
authorIhar Hrachyshka <ihrachys@redhat.com>
Mon, 27 Jul 2015 13:13:43 +0000 (15:13 +0200)
committerIhar Hrachyshka <ihrachys@redhat.com>
Mon, 27 Jul 2015 13:18:45 +0000 (15:18 +0200)
Partially-Implements: blueprint quantum-qos-api
Change-Id: I93fde3c472e4ecd7af8a7ce50be832b7216e40f6

neutron/api/rpc/handlers/resources_rpc.py
neutron/tests/unit/api/rpc/handlers/test_resources_rpc.py

index d2869fe86759d91a09951f7b15fb88f7736e2f9e..6c801e5dc2a112b533faddfd16efd3fb7d198140 100755 (executable)
@@ -105,4 +105,7 @@ class ResourcesServerRpcCallback(object):
             context=context)
 
         if obj:
+            # don't request a backport for the latest known version
+            if version == obj.VERSION:
+                version = None
             return obj.obj_to_primitive(target_version=version)
index 347c2a3d0f52f65c80a9de3c272d5f7e8d4bf97e..3d1104c408d31595b9c97eea576cbae4864ce2ad 100755 (executable)
@@ -99,3 +99,29 @@ class ResourcesServerRpcCallbackTestCase(ResourcesRpcBaseTestCase):
                 qos_policy_id, context=self.context)
         self.assertEqual(policy_dict, primitive['versioned_object.data'])
         self.assertEqual(policy_obj.obj_to_primitive(), primitive)
+
+    @mock.patch.object(policy.QosPolicy, 'obj_to_primitive')
+    def test_get_info_no_backport_for_latest_version(self, to_prim_mock):
+        policy_dict = self._create_test_policy_dict()
+        policy_obj = self._create_test_policy(policy_dict)
+        qos_policy_id = policy_dict['id']
+        with mock.patch.object(resources_rpc.registry, 'get_info',
+                               return_value=policy_obj):
+            self.callbacks.get_info(
+                self.context, resource_type=resources.QOS_POLICY,
+                version=policy.QosPolicy.VERSION,
+                resource_id=qos_policy_id)
+            to_prim_mock.assert_called_with(target_version=None)
+
+    @mock.patch.object(policy.QosPolicy, 'obj_to_primitive')
+    def test_get_info_backports_to_older_version(self, to_prim_mock):
+        policy_dict = self._create_test_policy_dict()
+        policy_obj = self._create_test_policy(policy_dict)
+        qos_policy_id = policy_dict['id']
+        with mock.patch.object(resources_rpc.registry, 'get_info',
+                               return_value=policy_obj):
+            self.callbacks.get_info(
+                self.context, resource_type=resources.QOS_POLICY,
+                version='0.9',  # less than initial version 1.0
+                resource_id=qos_policy_id)
+            to_prim_mock.assert_called_with(target_version='0.9')