diff --git a/releasenotes/notes/add-update-api-to-group-types-client-09c06ccdf80d5003.yaml b/releasenotes/notes/add-update-api-to-group-types-client-09c06ccdf80d5003.yaml new file mode 100644 index 0000000000..14458d696e --- /dev/null +++ b/releasenotes/notes/add-update-api-to-group-types-client-09c06ccdf80d5003.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add update group types API to v3 ``group_types_client`` library; + min_microversion of this API is 3.11. diff --git a/tempest/api/volume/admin/test_group_types.py b/tempest/api/volume/admin/test_group_types.py index 0df5fbd881..67232078e1 100644 --- a/tempest/api/volume/admin/test_group_types.py +++ b/tempest/api/volume/admin/test_group_types.py @@ -24,7 +24,7 @@ class GroupTypesTest(base.BaseVolumeAdminTest): max_microversion = 'latest' @decorators.idempotent_id('dd71e5f9-393e-4d4f-90e9-fa1b8d278864') - def test_group_type_create_list_show(self): + def test_group_type_create_list_update_show(self): # Create/list/show group type. name = data_utils.rand_name(self.__class__.__name__ + '-group-type') description = data_utils.rand_name("group-type-description") @@ -46,8 +46,19 @@ class GroupTypesTest(base.BaseVolumeAdminTest): self.assertIsInstance(group_list, list) self.assertNotEmpty(group_list) + update_params = { + 'name': data_utils.rand_name( + self.__class__.__name__ + '-updated-group-type'), + 'description': 'updated-group-type-desc' + } + updated_group_type = self.admin_group_types_client.update_group_type( + body['id'], **update_params)['group_type'] + for key, expected_val in update_params.items(): + self.assertEqual(expected_val, updated_group_type[key]) + fetched_group_type = self.admin_group_types_client.show_group_type( body['id'])['group_type'] + params.update(update_params) # Add updated params to original params. for key in params.keys(): self.assertEqual(params[key], fetched_group_type[key], '%s of the fetched group_type is different ' diff --git a/tempest/lib/services/volume/v3/group_types_client.py b/tempest/lib/services/volume/v3/group_types_client.py index 97bac4847f..6181472b4c 100644 --- a/tempest/lib/services/volume/v3/group_types_client.py +++ b/tempest/lib/services/volume/v3/group_types_client.py @@ -75,3 +75,16 @@ class GroupTypesClient(base_client.BaseClient): body = json.loads(body) self.expected_success(200, resp.status) return rest_client.ResponseBody(resp, body) + + def update_group_type(self, group_type_id, **kwargs): + """Updates a group type. + + For a full list of available parameters, please refer to the official + API reference: + https://developer.openstack.org/api-ref/block-storage/v3/#update-group-type + """ + post_body = json.dumps({'group_type': kwargs}) + resp, body = self.put('group_types/%s' % group_type_id, post_body) + self.expected_success(200, resp.status) + body = json.loads(body) + return rest_client.ResponseBody(resp, body) diff --git a/tempest/tests/lib/services/volume/v3/test_group_types_client.py b/tempest/tests/lib/services/volume/v3/test_group_types_client.py index 0f456a26bc..e86594eb2f 100644 --- a/tempest/tests/lib/services/volume/v3/test_group_types_client.py +++ b/tempest/tests/lib/services/volume/v3/test_group_types_client.py @@ -12,6 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. +import copy + from tempest.lib.services.volume.v3 import group_types_client from tempest.tests.lib import fake_auth_provider from tempest.tests.lib.services import base @@ -97,6 +99,18 @@ class TestGroupTypesClient(base.BaseServiceTest): self.FAKE_LIST_GROUP_TYPES, bytes_body) + def _test_update_group_types(self, bytes_body=False): + resp_body = copy.deepcopy(self.FAKE_INFO_GROUP_TYPE) + resp_body['group_type'].pop('created_at') + + self.check_service_client_function( + self.client.update_group_type, + 'tempest.lib.common.rest_client.RestClient.put', + resp_body, + bytes_body, + group_type_id="3fbbcccf-d058-4502-8844-6feeffdf4cb5", + name='updated-group-type-name') + def test_create_group_type_with_str_body(self): self._test_create_group_type() @@ -122,3 +136,9 @@ class TestGroupTypesClient(base.BaseServiceTest): def test_list_group_types_with_bytes_body(self): self._test_list_group_types(bytes_body=True) + + def test_update_group_types_with_str_body(self): + self._test_update_group_types() + + def test_update_group_types_with_bytes_body(self): + self._test_update_group_types(bytes_body=True)