]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Add filter to volume transfer REST api
authorliyingjun <liyingjun1988@gmail.com>
Wed, 6 Aug 2014 21:58:17 +0000 (05:58 +0800)
committerliyingjun <liyingjun1988@gmail.com>
Fri, 5 Sep 2014 10:06:26 +0000 (18:06 +0800)
The transfer api supports filter param,
https://github.com/openstack/cinder/blob/master/cinder/transfer/api.py#L72
But the transfer REST api didn't pass the filter params when calling get_all.

Change-Id: I1e29614a3368296571378b4a80a5cfa29b16754e
Closes-bug: 1351084

cinder/api/contrib/volume_transfer.py
cinder/tests/api/contrib/test_volume_transfer.py

index 05daea215b3d371ff41d626b7a426c0a1c0b51ae..23c82cda044e7abc4b22b128af4555dec0ec6213 100644 (file)
@@ -128,8 +128,9 @@ class VolumeTransferController(wsgi.Controller):
     def _get_transfers(self, req, is_detail):
         """Returns a list of transfers, transformed through view builder."""
         context = req.environ['cinder.context']
+        filters = req.params.copy()
         LOG.debug('Listing volume transfers')
-        transfers = self.transfer_api.get_all(context)
+        transfers = self.transfer_api.get_all(context, filters=filters)
         limited_list = common.limited(transfers, req)
 
         if is_detail:
index f1d5b6d688c3b50558e3445a6d12f1430b6c49a7..9ba455f9fc532385ab1035571fda04e690b7f47d 100644 (file)
@@ -22,6 +22,7 @@ from xml.dom import minidom
 
 import webob
 
+from cinder.api.contrib import volume_transfer
 from cinder import context
 from cinder import db
 from cinder import exception
@@ -41,6 +42,7 @@ class VolumeTransferAPITestCase(test.TestCase):
     def setUp(self):
         super(VolumeTransferAPITestCase, self).setUp()
         self.volume_transfer_api = API()
+        self.controller = volume_transfer.VolumeTransferController()
 
     def _create_transfer(self, volume_id=1,
                          display_name='test_transfer'):
@@ -53,13 +55,14 @@ class VolumeTransferAPITestCase(test.TestCase):
     def _create_volume(display_name='test_volume',
                        display_description='this is a test volume',
                        status='available',
-                       size=1):
+                       size=1,
+                       project_id='fake'):
         """Create a volume object."""
         vol = {}
         vol['host'] = 'fake_host'
         vol['size'] = size
         vol['user_id'] = 'fake'
-        vol['project_id'] = 'fake'
+        vol['project_id'] = project_id
         vol['status'] = status
         vol['display_name'] = display_name
         vol['display_description'] = display_description
@@ -233,6 +236,28 @@ class VolumeTransferAPITestCase(test.TestCase):
         db.volume_destroy(context.get_admin_context(), volume_id_2)
         db.volume_destroy(context.get_admin_context(), volume_id_1)
 
+    def test_list_transfers_with_all_tenants(self):
+        volume_id_1 = self._create_volume(size=5)
+        volume_id_2 = self._create_volume(size=5, project_id='fake1')
+        transfer1 = self._create_transfer(volume_id_1)
+        transfer2 = self._create_transfer(volume_id_2)
+
+        req = fakes.HTTPRequest.blank('/v2/fake/os-volume-transfer?'
+                                      'all_tenants=1',
+                                      use_admin_context=True)
+        res_dict = self.controller.index(req)
+
+        expected = [(transfer1['id'], 'test_transfer'),
+                    (transfer2['id'], 'test_transfer')]
+        ret = []
+        for item in res_dict['transfers']:
+            ret.append((item['id'], item['name']))
+        self.assertEqual(set(expected), set(ret))
+
+        db.transfer_destroy(context.get_admin_context(), transfer2['id'])
+        db.transfer_destroy(context.get_admin_context(), transfer1['id'])
+        db.volume_destroy(context.get_admin_context(), volume_id_1)
+
     def test_create_transfer_json(self):
         volume_id = self._create_volume(status='available', size=5)
         body = {"transfer": {"display_name": "transfer1",