Merge "Add export-location filter in share and share instance list API"
This commit is contained in:
commit
7de63cf211
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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'])
|
||||
|
|
|
@ -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 <v2.35, querying the share instance API by export
|
||||
# location path or ID should have no effect. Those filters were
|
||||
# supported from v2.35
|
||||
filters = {
|
||||
'export_location_' + export_location_type: 'fake',
|
||||
}
|
||||
share_instances = self.shares_v2_client.list_share_instances(
|
||||
params=filters, version="2.34")
|
||||
|
||||
self.assertGreater(len(share_instances), 0)
|
||||
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
@base.skip_if_microversion_lt("2.35")
|
||||
@ddt.data('path', 'id')
|
||||
def test_list_share_instances_with_export_location_not_exist(
|
||||
self, export_location_type):
|
||||
filters = {
|
||||
'export_location_' + export_location_type: 'fake_not_exist',
|
||||
}
|
||||
share_instances = self.shares_v2_client.list_share_instances(
|
||||
params=filters)
|
||||
|
||||
self.assertEqual(0, len(share_instances))
|
|
@ -13,6 +13,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import ddt
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
import testtools
|
||||
|
@ -23,6 +24,7 @@ from manila_tempest_tests.tests.api import base
|
|||
CONF = config.CONF
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
"""Covers share functionality, that doesn't related to share type."""
|
||||
|
||||
|
@ -236,6 +238,32 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
|||
for share in shares:
|
||||
self.assertEqual(filters['host'], share['host'])
|
||||
|
||||
@base.skip_if_microversion_lt("2.35")
|
||||
@ddt.data(('path', True), ('id', True), ('path', False), ('id', False))
|
||||
@ddt.unpack
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_shares_or_with_detail_filter_by_export_location(
|
||||
self, export_location_type, enable_detail):
|
||||
export_locations = self.shares_v2_client.list_share_export_locations(
|
||||
self.shares[0]['id'])
|
||||
if not isinstance(export_locations, (list, tuple, set)):
|
||||
export_locations = (export_locations, )
|
||||
|
||||
filters = {
|
||||
'export_location_' + export_location_type:
|
||||
export_locations[0][export_location_type],
|
||||
}
|
||||
# list shares
|
||||
if enable_detail:
|
||||
shares = self.shares_v2_client.list_shares_with_detail(
|
||||
params=filters)
|
||||
else:
|
||||
shares = self.shares_v2_client.list_shares(params=filters)
|
||||
|
||||
# verify response
|
||||
self.assertEqual(1, len(shares))
|
||||
self.assertEqual(self.shares[0]['id'], shares[0]['id'])
|
||||
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
@testtools.skipIf(
|
||||
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import ddt
|
||||
from tempest import config
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
import testtools
|
||||
|
@ -23,6 +24,7 @@ from manila_tempest_tests.tests.api import base
|
|||
CONF = config.CONF
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
|
@ -134,3 +136,32 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
|||
self.shares_client.shrink_share,
|
||||
share['id'],
|
||||
new_size)
|
||||
|
||||
@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_shares_with_export_location_and_invalid_version(
|
||||
self, export_location_type):
|
||||
# In API versions <v2.35, querying the share API by export
|
||||
# location path or ID should have no effect. Those filters were
|
||||
# supported from v2.35
|
||||
filters = {
|
||||
'export_location_' + export_location_type: 'fake',
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(
|
||||
params=filters, version="2.34")
|
||||
|
||||
self.assertGreater(len(shares), 0)
|
||||
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
@base.skip_if_microversion_lt("2.35")
|
||||
@ddt.data('path', 'id')
|
||||
def test_list_shares_with_export_location_not_exist(
|
||||
self, export_location_type):
|
||||
filters = {
|
||||
'export_location_' + export_location_type: 'fake_not_exist',
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(
|
||||
params=filters)
|
||||
|
||||
self.assertEqual(0, len(shares))
|
||||
|
|
Loading…
Reference in New Issue