diff --git a/releasenotes/notes/add-list-volume-transfers-with-detail-to-transfers-client-80169bf78cf4fa66.yaml b/releasenotes/notes/add-list-volume-transfers-with-detail-to-transfers-client-80169bf78cf4fa66.yaml new file mode 100644 index 0000000000..8e85d3a1b2 --- /dev/null +++ b/releasenotes/notes/add-list-volume-transfers-with-detail-to-transfers-client-80169bf78cf4fa66.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add list volume transfers with details API to v2 transfers_client library. + This feature enables the possibility to list volume transfers with details. diff --git a/tempest/api/volume/test_volume_transfers.py b/tempest/api/volume/test_volume_transfers.py index afcffc228e..75f2a738f8 100644 --- a/tempest/api/volume/test_volume_transfers.py +++ b/tempest/api/volume/test_volume_transfers.py @@ -73,19 +73,20 @@ class VolumesTransfersTest(base.BaseVolumeTest): volume['id']) # Create a volume transfer - body = self.client.create_volume_transfer( - volume_id=volume['id'])['transfer'] - transfer_id = body['id'] + transfer_id = self.client.create_volume_transfer( + volume_id=volume['id'])['transfer']['id'] waiters.wait_for_volume_resource_status( self.volumes_client, volume['id'], 'awaiting-transfer') - # List all volume transfers (looking for the one we created) - body = self.client.list_volume_transfers()['transfers'] - for transfer in body: - if volume['id'] == transfer['volume_id']: - break - else: - self.fail('Transfer not found for volume %s' % volume['id']) + # List all volume transfers with details, check the detail-specific + # elements, and look for the created transfer. + transfers = self.client.list_volume_transfers(detail=True)['transfers'] + self.assertNotEmpty(transfers) + for transfer in transfers: + self.assertIn('created_at', transfer) + volume_list = [transfer['volume_id'] for transfer in transfers] + self.assertIn(volume['id'], volume_list, + 'Transfer not found for volume %s' % volume['id']) # Delete a volume transfer self.client.delete_volume_transfer(transfer_id) diff --git a/tempest/lib/services/volume/v2/transfers_client.py b/tempest/lib/services/volume/v2/transfers_client.py index 853948e426..2dfbe7bb1b 100644 --- a/tempest/lib/services/volume/v2/transfers_client.py +++ b/tempest/lib/services/volume/v2/transfers_client.py @@ -44,14 +44,17 @@ class TransfersClient(rest_client.RestClient): self.expected_success(200, resp.status) return rest_client.ResponseBody(resp, body) - def list_volume_transfers(self, **params): + def list_volume_transfers(self, detail=False, **params): """List all the volume transfers created. For a full list of available parameters, please refer to the official API reference: https://developer.openstack.org/api-ref/block-storage/v2/#list-volume-transfers + https://developer.openstack.org/api-ref/block-storage/v2/#list-volume-transfers-with-details """ url = 'os-volume-transfer' + if detail: + url += '/detail' if params: url += '?%s' % urllib.urlencode(params) resp, body = self.get(url) diff --git a/tempest/tests/lib/services/volume/v2/test_transfers_client.py b/tempest/tests/lib/services/volume/v2/test_transfers_client.py new file mode 100644 index 0000000000..0c59bf2c6a --- /dev/null +++ b/tempest/tests/lib/services/volume/v2/test_transfers_client.py @@ -0,0 +1,61 @@ +# Copyright 2017 FiberHome Telecommunication Technologies CO.,LTD +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from tempest.lib.services.volume.v2 import transfers_client +from tempest.tests.lib import fake_auth_provider +from tempest.tests.lib.services import base + + +class TestTransfersClient(base.BaseServiceTest): + + FAKE_LIST_VOLUME_TRANSFERS_WITH_DETAIL = { + "transfers": [{ + "created_at": "2017-04-18T09:10:03.000000", + "volume_id": "47bf04ef-1ea5-4c5f-a375-430a086d6747", + "id": "0e89cdd1-6249-421b-96d8-25fac0623d42", + "links": [ + { + "href": "fake-url-1", + "rel": "self" + }, + { + "href": "fake-url-2", + "rel": "bookmark" + } + ], + "name": "fake-volume-transfer" + }] + } + + def setUp(self): + super(TestTransfersClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = transfers_client.TransfersClient(fake_auth, + 'volume', + 'regionOne') + + def _test_list_volume_transfers_with_detail(self, bytes_body=False): + self.check_service_client_function( + self.client.list_volume_transfers, + 'tempest.lib.common.rest_client.RestClient.get', + self.FAKE_LIST_VOLUME_TRANSFERS_WITH_DETAIL, + bytes_body, + detail=True) + + def test_list_volume_transfers_with_detail_with_str_body(self): + self._test_list_volume_transfers_with_detail() + + def test_list_volume_transfers_with_detail_with_bytes_body(self): + self._test_list_volume_transfers_with_detail(bytes_body=True)