diff --git a/releasenotes/notes/add-params-to-v2-list-backups-api-c088d2b4bfe90247.yaml b/releasenotes/notes/add-params-to-v2-list-backups-api-c088d2b4bfe90247.yaml new file mode 100644 index 0000000000..cee2d76638 --- /dev/null +++ b/releasenotes/notes/add-params-to-v2-list-backups-api-c088d2b4bfe90247.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + The ``list_backups`` method of the v2 ``BackupsClient`` class now has + an additional ``**params`` argument that enables passing additional + information in the query string of the HTTP request. diff --git a/tempest/lib/services/volume/v2/backups_client.py b/tempest/lib/services/volume/v2/backups_client.py index a44ed0b74d..830fb82fea 100644 --- a/tempest/lib/services/volume/v2/backups_client.py +++ b/tempest/lib/services/volume/v2/backups_client.py @@ -14,6 +14,7 @@ # under the License. from oslo_serialization import jsonutils as json +from six.moves.urllib import parse as urllib from tempest.lib.common import rest_client from tempest.lib import exceptions as lib_exc @@ -64,11 +65,19 @@ class BackupsClient(base_client.BaseClient): self.expected_success(200, resp.status) return rest_client.ResponseBody(resp, body) - def list_backups(self, detail=False): - """Information for all the tenant's backups.""" + def list_backups(self, detail=False, **params): + """List all the tenant's backups. + + For a full list of available parameters, please refer to the official + API reference: + http://developer.openstack.org/api-ref/block-storage/v2/#list-backups + http://developer.openstack.org/api-ref/block-storage/v2/#list-backups-with-details + """ url = "backups" if detail: url += "/detail" + if params: + url += '?%s' % urllib.urlencode(params) resp, body = self.get(url) body = json.loads(body) self.expected_success(200, resp.status) diff --git a/tempest/tests/lib/services/volume/v2/test_backups_client.py b/tempest/tests/lib/services/volume/v2/test_backups_client.py new file mode 100644 index 0000000000..14e5fb0be1 --- /dev/null +++ b/tempest/tests/lib/services/volume/v2/test_backups_client.py @@ -0,0 +1,117 @@ +# 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 backups_client +from tempest.tests.lib import fake_auth_provider +from tempest.tests.lib.services import base + + +class TestBackupsClient(base.BaseServiceTest): + + FAKE_BACKUP_LIST = { + "backups": [ + { + "id": "2ef47aee-8844-490c-804d-2a8efe561c65", + "links": [ + { + "href": "fake-url-1", + "rel": "self" + }, + { + "href": "fake-url-2", + "rel": "bookmark" + } + ], + "name": "backup001" + } + ] + } + + FAKE_BACKUP_LIST_WITH_DETAIL = { + "backups": [ + { + "availability_zone": "az1", + "container": "volumebackups", + "created_at": "2013-04-02T10:35:27.000000", + "description": None, + "fail_reason": None, + "id": "2ef47aee-8844-490c-804d-2a8efe561c65", + "links": [ + { + "href": "fake-url-1", + "rel": "self" + }, + { + "href": "fake-url-2", + "rel": "bookmark" + } + ], + "name": "backup001", + "object_count": 22, + "size": 1, + "status": "available", + "volume_id": "e5185058-943a-4cb4-96d9-72c184c337d6", + "is_incremental": True, + "has_dependent_backups": False + } + ] + } + + def setUp(self): + super(TestBackupsClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = backups_client.BackupsClient(fake_auth, + 'volume', + 'regionOne') + + def _test_list_backups(self, detail=False, mock_args='backups', + bytes_body=False, **params): + if detail: + resp_body = self.FAKE_BACKUP_LIST_WITH_DETAIL + else: + resp_body = self.FAKE_BACKUP_LIST + self.check_service_client_function( + self.client.list_backups, + 'tempest.lib.common.rest_client.RestClient.get', + resp_body, + to_utf=bytes_body, + mock_args=[mock_args], + detail=detail, + **params) + + def test_list_backups_with_str_body(self): + self._test_list_backups() + + def test_list_backups_with_bytes_body(self): + self._test_list_backups(bytes_body=True) + + def test_list_backups_with_detail_with_str_body(self): + mock_args = "backups/detail" + self._test_list_backups(detail=True, mock_args=mock_args) + + def test_list_backups_with_detail_with_bytes_body(self): + mock_args = "backups/detail" + self._test_list_backups(detail=True, mock_args=mock_args, + bytes_body=True) + + def test_list_backups_with_params(self): + # Run the test separately for each param, to avoid assertion error + # resulting from randomized params order. + mock_args = 'backups?sort_key=name' + self._test_list_backups(mock_args=mock_args, sort_key='name') + + mock_args = 'backups/detail?limit=10' + self._test_list_backups(detail=True, mock_args=mock_args, + bytes_body=True, limit=10)