From 84f3e348314ce6d06065df69b4ae01492c179fad Mon Sep 17 00:00:00 2001 From: zhongjun Date: Tue, 2 May 2017 18:10:47 +0800 Subject: [PATCH] Add export-location filter in share and share instance list API Share and share instance list API will accept new query string parameter 'export_location'. It can pass path and id of export_location to retrieve shares filtered. APIImpact Partly-implement: BP support-filter-share-by-export-location Change-Id: I5fdf6d89d0b6c7fa182ddfaac60979bc6c0fc2a6 --- manila_tempest_tests/config.py | 2 +- .../services/share/v2/json/shares_client.py | 7 ++- .../tests/api/admin/test_share_instances.py | 26 +++++++-- .../admin/test_share_instances_negative.py | 54 +++++++++++++++++++ .../tests/api/admin/test_shares_actions.py | 28 ++++++++++ .../tests/api/test_shares_actions_negative.py | 31 +++++++++++ 6 files changed, 142 insertions(+), 6 deletions(-) create mode 100644 manila_tempest_tests/tests/api/admin/test_share_instances_negative.py diff --git a/manila_tempest_tests/config.py b/manila_tempest_tests/config.py index e54dd483..062bf97f 100644 --- a/manila_tempest_tests/config.py +++ b/manila_tempest_tests/config.py @@ -30,7 +30,7 @@ ShareGroup = [ help="The minimum api microversion is configured to be the " "value of the minimum microversion supported by Manila."), cfg.StrOpt("max_api_microversion", - default="2.34", + default="2.35", help="The maximum api microversion is configured to be the " "value of the latest microversion supported by Manila."), cfg.StrOpt("region", diff --git a/manila_tempest_tests/services/share/v2/json/shares_client.py b/manila_tempest_tests/services/share/v2/json/shares_client.py index 53c123e4..353c8cc7 100644 --- a/manila_tempest_tests/services/share/v2/json/shares_client.py +++ b/manila_tempest_tests/services/share/v2/json/shares_client.py @@ -294,8 +294,11 @@ class SharesV2Client(shares_client.SharesClient): self.expected_success(200, resp.status) return self._parse_resp(body) - def list_share_instances(self, version=LATEST_MICROVERSION): - resp, body = self.get("share_instances", version=version) + def list_share_instances(self, version=LATEST_MICROVERSION, + params=None): + uri = 'share_instances' + uri += '?%s' % urlparse.urlencode(params) if params else '' + resp, body = self.get(uri, version=version) self.expected_success(200, resp.status) return self._parse_resp(body) diff --git a/manila_tempest_tests/tests/api/admin/test_share_instances.py b/manila_tempest_tests/tests/api/admin/test_share_instances.py index 1a4b297a..479850cb 100644 --- a/manila_tempest_tests/tests/api/admin/test_share_instances.py +++ b/manila_tempest_tests/tests/api/admin/test_share_instances.py @@ -14,14 +14,11 @@ # under the License. import ddt -from tempest import config from testtools import testcase as tc from manila_tempest_tests.tests.api import base from manila_tempest_tests import utils -CONF = config.CONF - @ddt.ddt class ShareInstancesTest(base.BaseSharesAdminTest): @@ -92,3 +89,26 @@ class ShareInstancesTest(base.BaseSharesAdminTest): 'Share instance %s returned incorrect keys; ' 'expected %s, got %s.' % ( si['id'], expected_keys, actual_keys)) + + @ddt.data('path', 'id') + @tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND) + @base.skip_if_microversion_lt("2.35") + def test_list_share_instances_with_export_location_path_and_id( + self, export_location_type): + share_instances_except = ( + self.shares_v2_client.get_instances_of_share( + self.share['id'])) + export_locations = ( + self.shares_v2_client.list_share_instance_export_locations( + share_instances_except[0]['id'])) + + filters = { + 'export_location_' + export_location_type: + export_locations[0][export_location_type], + } + share_instances = self.shares_v2_client.list_share_instances( + params=filters) + + self.assertEqual(1, len(share_instances)) + self.assertEqual(share_instances_except[0]['id'], + share_instances[0]['id']) diff --git a/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py b/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py new file mode 100644 index 00000000..b52a8a1b --- /dev/null +++ b/manila_tempest_tests/tests/api/admin/test_share_instances_negative.py @@ -0,0 +1,54 @@ +# 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. + +import ddt +from testtools import testcase as tc + +from manila_tempest_tests.tests.api import base + + +@ddt.ddt +class ShareInstancesNegativeTest(base.BaseSharesAdminTest): + + @classmethod + def resource_setup(cls): + super(ShareInstancesNegativeTest, cls).resource_setup() + cls.share = cls.create_share() + + @tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND) + @base.skip_if_microversion_not_supported("2.34") + @ddt.data('path', 'id') + def test_list_share_instances_with_export_location_and_invalid_version( + self, export_location_type): + # In API versions