Add update share type functional tests
Depends-on: I4c7bdd601d48b40c01639b5089d4bff259a7b3af
Part-of blueprint update-share-type-name-or-description
Change-Id: Id1073a964b6d034375b74fa89e3ebb39e2c56220
diff --git a/manila_tempest_tests/tests/api/admin/test_share_types.py b/manila_tempest_tests/tests/api/admin/test_share_types.py
index f06c70d..aef202b 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_types.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_types.py
@@ -99,6 +99,82 @@
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):
self.skip_if_microversion_not_supported(version)
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index eca162a..3afd6fb 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -870,6 +870,16 @@
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"""
diff --git a/manila_tempest_tests/tests/api/test_share_types_negative.py b/manila_tempest_tests/tests/api/test_share_types_negative.py
index 63b11d1..9b4f6ba 100644
--- a/manila_tempest_tests/tests/api/test_share_types_negative.py
+++ b/manila_tempest_tests/tests/api/test_share_types_negative.py
@@ -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 @@
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)