Add update share type functional tests

Depends-on: I4c7bdd601d48b40c01639b5089d4bff259a7b3af
Part-of blueprint update-share-type-name-or-description

Change-Id: Id1073a964b6d034375b74fa89e3ebb39e2c56220
This commit is contained in:
haixin 2019-08-02 16:50:45 +08:00
parent 90332bd7ae
commit 0d1d29f561
5 changed files with 150 additions and 1 deletions

View File

@ -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.49",
default="2.50",
help="The maximum api microversion is configured to be the "
"value of the latest microversion supported by Manila."),
cfg.StrOpt("region",

View File

@ -924,6 +924,22 @@ class SharesV2Client(shares_client.SharesClient):
self.expected_success(200, resp.status)
return self._parse_resp(body)
def update_share_type(self, share_type_id, name=None,
is_public=None, description=None,
version=LATEST_MICROVERSION):
post_body = {}
if is_public is not None:
post_body.update({"share_type_access:is_public": is_public})
if name is not None:
post_body.update({"name": name})
if description is not None:
post_body.update({"description": description})
post_body = json.dumps({'share_type': post_body})
resp, body = self.put("types/%s" % share_type_id, post_body,
version=version)
self.expected_success(200, resp.status)
return self._parse_resp(body)
def delete_share_type(self, share_type_id, version=LATEST_MICROVERSION):
resp, body = self.delete("types/%s" % share_type_id, version=version)
self.expected_success(202, resp.status)

View File

@ -98,6 +98,82 @@ class ShareTypesAdminTest(base.BaseSharesAdminTest):
# Check that backwards compatibility didn't break
self.assertDictMatch(get["volume_type"], get["share_type"])
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@ddt.data(
('2.50', data_utils.rand_name("type_updated"),
'description_updated', True),
('2.50', data_utils.rand_name("type_updated"), None, None),
('2.50', None, 'description_updated', None),
('2.50', None, None, True),
('2.50', None, None, False),
(LATEST_MICROVERSION, data_utils.rand_name("type_updated"),
'description_updated', True),
(LATEST_MICROVERSION, data_utils.rand_name("type_updated"),
None, None),
(LATEST_MICROVERSION, None, 'description_updated', None),
(LATEST_MICROVERSION, None, None, True),
(LATEST_MICROVERSION, None, None, False),
)
@ddt.unpack
def test_share_type_create_update(self, version, st_name,
st_description, st_is_public):
name = data_utils.rand_name("tempest-manila")
description = "Description for share type"
extra_specs = self.add_extra_specs_to_dict({"key": "value", })
# Create share type
st_create = self.create_share_type(
name, extra_specs=extra_specs, version=version,
description=description)
self.assertEqual(name, st_create['share_type']['name'])
self._verify_description(
description, st_create['share_type'], version)
self._verify_is_public_key_name(st_create['share_type'], version)
st_id = st_create["share_type"]["id"]
# Update share type
updated_st = self.shares_v2_client.update_share_type(
st_id, name=st_name, is_public=st_is_public,
description=st_description, version=version)
if st_name is not None:
self.assertEqual(st_name, updated_st["share_type"]["name"])
if st_description is not None:
self._verify_description(st_description,
updated_st['share_type'], version)
if st_is_public is not None:
self.assertEqual(
st_is_public,
updated_st["share_type"]["share_type_access:is_public"])
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@ddt.data(
('2.50', None, '', None),
(LATEST_MICROVERSION, None, '', None),
)
@ddt.unpack
def test_share_type_unset_description(
self, version, st_name, st_description, st_is_public):
name = data_utils.rand_name("tempest-manila")
description = "Description for share type"
extra_specs = self.add_extra_specs_to_dict({"key": "value", })
# Create share type
st_create = self.create_share_type(
name, extra_specs=extra_specs, version=version,
description=description)
self.assertEqual(name, st_create['share_type']['name'])
self._verify_description(
description, st_create['share_type'], version)
self._verify_is_public_key_name(st_create['share_type'], version)
st_id = st_create["share_type"]["id"]
# Update share type
updated_st = self.shares_v2_client.update_share_type(
st_id, name=st_name, is_public=st_is_public,
description=st_description, version=version)
self._verify_description(None, updated_st['share_type'], version)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@ddt.data('2.0', '2.6', '2.7', '2.40', '2.41')
def test_share_type_create_list(self, version):

View File

@ -870,6 +870,16 @@ class BaseSharesTest(test.BaseTestCase):
cls.method_resources.insert(0, resource)
return share_type
@classmethod
def update_share_type(cls, share_type_id, name=None,
is_public=None, description=None,
client=None):
if client is None:
client = cls.shares_v2_client
share_type = client.update_share_type(share_type_id, name,
is_public, description)
return share_type
@staticmethod
def add_extra_specs_to_dict(extra_specs=None):
"""Add any required extra-specs to share type dictionary"""

View File

@ -13,19 +13,37 @@
# License for the specific language governing permissions and limitations
# under the License.
import ddt
import random
from tempest import config
from tempest.lib.common.utils import data_utils
from tempest.lib import exceptions as lib_exc
from testtools import testcase as tc
from manila_tempest_tests.tests.api import base
CONF = config.CONF
LATEST_MICROVERSION = CONF.share.max_api_microversion
def generate_long_description(des_length=256):
random_str = ''
base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz'
length = len(base_str) - 1
for i in range(des_length):
random_str += base_str[random.randint(0, length)]
return random_str
@ddt.ddt
class ShareTypesNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ShareTypesNegativeTest, cls).resource_setup()
cls.st = cls._create_share_type()
cls.st2 = cls._create_share_type()
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_create_share_type_with_user(self):
@ -53,3 +71,32 @@ class ShareTypesNegativeTest(base.BaseSharesMixedTest):
self.shares_client.remove_access_from_share_type,
self.st['id'],
self.shares_client.tenant_id)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ddt.data(
('2.50', '', None, None),
(LATEST_MICROVERSION, '', None, None),
('2.50', None, None, 'not_bool'),
(LATEST_MICROVERSION, None, None, 'not_bool'),
('2.50', None, generate_long_description(256), None),
(LATEST_MICROVERSION, None, generate_long_description(256), None),
)
@ddt.unpack
def test_share_type_update_bad_request(
self, version, st_name, st_description, st_is_public):
st_id = self.st['id']
# Update share type
self.assertRaises(lib_exc.BadRequest,
self.admin_shares_v2_client.update_share_type,
st_id, st_name, st_is_public, st_description,
version)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ddt.data('2.50', LATEST_MICROVERSION)
def test_share_type_update_conflict(self, version):
name_1 = self.st['name']
st_id_2 = self.st2['id']
# Update share type
self.assertRaises(lib_exc.Conflict,
self.admin_shares_v2_client.update_share_type,
st_id_2, name_1, None, None, version)