diff --git a/releasenotes/notes/add-show-volume-metadata-item-api-to-v2-volumes-client-47d59ecd999ca9df.yaml b/releasenotes/notes/add-show-volume-metadata-item-api-to-v2-volumes-client-47d59ecd999ca9df.yaml new file mode 100644 index 0000000000..49a935ccec --- /dev/null +++ b/releasenotes/notes/add-show-volume-metadata-item-api-to-v2-volumes-client-47d59ecd999ca9df.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Add show volume metadata item API to v2 volumes_client library. + This feature enables the possibility to show a volume's metadata for + a specific key. diff --git a/tempest/api/volume/test_volume_metadata.py b/tempest/api/volume/test_volume_metadata.py index 5e9a956cc4..d203b2d609 100644 --- a/tempest/api/volume/test_volume_metadata.py +++ b/tempest/api/volume/test_volume_metadata.py @@ -70,7 +70,7 @@ class VolumesMetadataTest(base.BaseVolumeTest): 'Delete one item metadata of the volume failed') @decorators.idempotent_id('862261c5-8df4-475a-8c21-946e50e36a20') - def test_update_volume_metadata_item(self): + def test_update_show_volume_metadata_item(self): # Update metadata item for the volume metadata = {"key1": "value1", "key2": "value2", @@ -88,6 +88,12 @@ class VolumesMetadataTest(base.BaseVolumeTest): body = self.volumes_client.update_volume_metadata_item( self.volume['id'], "key3", update_item)['meta'] self.assertEqual(update_item, body) + + # Get a specific metadata item of the volume + body = self.volumes_client.show_volume_metadata_item( + self.volume['id'], "key3")['meta'] + self.assertEqual({"key3": expect['key3']}, body) + # Get the metadata of the volume body = self.volumes_client.show_volume_metadata( self.volume['id'])['metadata'] diff --git a/tempest/lib/services/volume/v2/volumes_client.py b/tempest/lib/services/volume/v2/volumes_client.py index cfff16a083..d31259f2a8 100644 --- a/tempest/lib/services/volume/v2/volumes_client.py +++ b/tempest/lib/services/volume/v2/volumes_client.py @@ -284,6 +284,14 @@ class VolumesClient(base_client.BaseClient): self.expected_success(200, resp.status) return rest_client.ResponseBody(resp, body) + def show_volume_metadata_item(self, volume_id, id): + """Show metadata item for the volume.""" + url = "volumes/%s/metadata/%s" % (volume_id, id) + resp, body = self.get(url) + body = json.loads(body) + self.expected_success(200, resp.status) + return rest_client.ResponseBody(resp, body) + def update_volume_metadata_item(self, volume_id, id, meta_item): """Update metadata item for the volume.""" put_body = json.dumps({'meta': meta_item}) diff --git a/tempest/tests/lib/services/volume/v2/test_volumes_client.py b/tempest/tests/lib/services/volume/v2/test_volumes_client.py index 498b963626..befb1f6d3b 100644 --- a/tempest/tests/lib/services/volume/v2/test_volumes_client.py +++ b/tempest/tests/lib/services/volume/v2/test_volumes_client.py @@ -20,6 +20,12 @@ from tempest.tests.lib.services import base class TestVolumesClient(base.BaseServiceTest): + FAKE_VOLUME_METADATA_ITEM = { + "meta": { + "key1": "value1" + } + } + def setUp(self): super(TestVolumesClient, self).setUp() fake_auth = fake_auth_provider.FakeAuthProvider() @@ -45,8 +51,23 @@ class TestVolumesClient(base.BaseServiceTest): **kwargs ) + def _test_show_volume_metadata_item(self, bytes_body=False): + self.check_service_client_function( + self.client.show_volume_metadata_item, + 'tempest.lib.common.rest_client.RestClient.get', + self.FAKE_VOLUME_METADATA_ITEM, + to_utf=bytes_body, + volume_id="a3be971b-8de5-4bdf-bdb8-3d8eb0fb69f8", + id="key1") + def test_force_detach_volume_with_str_body(self): self._test_force_detach_volume() def test_force_detach_volume_with_bytes_body(self): self._test_force_detach_volume(bytes_body=True) + + def test_show_volume_metadata_item_with_str_body(self): + self._test_show_volume_metadata_item() + + def test_show_volume_metadata_item_with_bytes_body(self): + self._test_show_volume_metadata_item(bytes_body=True)