[srbac] Testing volumes metatada
Testing reader, member and admin users Change-Id: I50f62d025d34b862148922d4cdaeaef27a01e96f Signed-off-by: Yosi Ben Shimon <ybenshim@redhat.com>
This commit is contained in:
parent
dfe2c229ed
commit
557ebe146a
|
@ -13,7 +13,6 @@
|
|||
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common import api_microversion_fixture
|
||||
from tempest.lib.common import api_version_utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
|
@ -51,8 +50,6 @@ class VolumeV3RbacBaseTests(
|
|||
|
||||
def setUp(self):
|
||||
super(VolumeV3RbacBaseTests, self).setUp()
|
||||
self.useFixture(api_microversion_fixture.APIMicroversionFixture(
|
||||
volume_microversion=self.request_microversion))
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
|
@ -61,6 +58,8 @@ class VolumeV3RbacBaseTests(
|
|||
api_version_utils.select_request_microversion(
|
||||
cls.min_microversion,
|
||||
CONF.volume.min_microversion))
|
||||
cls.setup_api_microversion_fixture(
|
||||
volume_microversion=cls.request_microversion)
|
||||
|
||||
def do_request(self, method, expected_status=200, client=None, **payload):
|
||||
"""Perform API call
|
||||
|
|
|
@ -0,0 +1,272 @@
|
|||
# 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.
|
||||
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
|
||||
from cinder_tempest_plugin.rbac.v3 import base as rbac_base
|
||||
|
||||
|
||||
class VolumeV3RbacVolumesMetadataTests(rbac_base.VolumeV3RbacBaseTests):
|
||||
|
||||
min_microversion = '3.12'
|
||||
metadata = {"key1": "value1",
|
||||
"key2": "value2"}
|
||||
|
||||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super().setup_clients()
|
||||
cls.volumes_client = cls.os_project_admin.volumes_client_latest
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
super(VolumeV3RbacVolumesMetadataTests, cls).resource_setup()
|
||||
cls.volume_id = cls.create_volume(
|
||||
client=cls.volumes_client, metadata=cls.metadata
|
||||
)
|
||||
|
||||
def _create_volume_metadata(self, expected_status):
|
||||
"""Test create_volume_metadata operation.
|
||||
|
||||
Args:
|
||||
expected_status: The expected HTTP response code
|
||||
"""
|
||||
volume_id = self.create_volume(client=self.volumes_client)
|
||||
|
||||
self.do_request(
|
||||
method='create_volume_metadata', expected_status=expected_status,
|
||||
volume_id=volume_id, metadata={'key3': 'value3'}
|
||||
)
|
||||
if expected_status != exceptions.Forbidden:
|
||||
vol = self.volumes_client.show_volume(
|
||||
volume_id=volume_id
|
||||
)['volume']
|
||||
self.assertIn(
|
||||
'key3', vol['metadata'].keys(),
|
||||
"'key3' not found in volume metadata keys"
|
||||
)
|
||||
|
||||
def _show_volume_metadata(self, expected_status):
|
||||
"""Test show_volume_metadata operation.
|
||||
|
||||
Args:
|
||||
expected_status: The expected HTTP response code
|
||||
"""
|
||||
metadata = self.do_request(
|
||||
method='show_volume_metadata', expected_status=expected_status,
|
||||
volume_id=self.volume_id
|
||||
)['metadata']
|
||||
self.assertIn(
|
||||
'key1', metadata.keys(),
|
||||
"'key1' not found in volume metadata keys"
|
||||
)
|
||||
self.assertIn(
|
||||
'key2', metadata.keys(),
|
||||
"'key2' not found in volume metadata keys"
|
||||
)
|
||||
|
||||
def _update_volume_metadata(self, expected_status):
|
||||
"""Test update_volume_metadata operation.
|
||||
|
||||
Args:
|
||||
expected_status: The expected HTTP response code
|
||||
"""
|
||||
volume_id = self.create_volume(client=self.volumes_client)
|
||||
|
||||
self.do_request(
|
||||
method='update_volume_metadata', expected_status=expected_status,
|
||||
volume_id=volume_id, metadata={'key3': 'value3'}
|
||||
)
|
||||
if expected_status != exceptions.Forbidden:
|
||||
vol = self.volumes_client.show_volume(
|
||||
volume_id=volume_id
|
||||
)['volume']
|
||||
self.assertIn(
|
||||
'key3', vol['metadata'].keys(),
|
||||
"'key3' not found in volume metadata keys"
|
||||
)
|
||||
self.assertNotIn(
|
||||
'key1', vol['metadata'].keys(),
|
||||
"'key1' found in volume metadata keys"
|
||||
)
|
||||
|
||||
def _show_volume_metadata_item(self, expected_status):
|
||||
"""Test show_volume_metadata_item operation.
|
||||
|
||||
Args:
|
||||
expected_status: The expected HTTP response code
|
||||
"""
|
||||
meta = self.do_request(
|
||||
method='show_volume_metadata_item',
|
||||
expected_status=expected_status,
|
||||
volume_id=self.volume_id, id='key1'
|
||||
)['meta']
|
||||
self.assertNotEmpty(meta, "'key1' not found in volume metadata keys")
|
||||
|
||||
def _delete_volume_metadata_item(self, expected_status):
|
||||
"""Test delete_volume_metadata_item operation.
|
||||
|
||||
Args:
|
||||
expected_status: The expected HTTP response code
|
||||
"""
|
||||
volume_id = self.create_volume(
|
||||
client=self.volumes_client, metadata=self.metadata
|
||||
)
|
||||
|
||||
self.do_request(
|
||||
method='delete_volume_metadata_item',
|
||||
expected_status=expected_status,
|
||||
volume_id=volume_id, id='key1'
|
||||
)
|
||||
if expected_status != exceptions.Forbidden:
|
||||
vol = self.volumes_client.show_volume(
|
||||
volume_id=volume_id
|
||||
)['volume']
|
||||
self.assertNotIn(
|
||||
'key1', vol['metadata'].keys(),
|
||||
"'key1' found in volume metadata keys"
|
||||
)
|
||||
|
||||
def _update_volume_metadata_item(self, expected_status):
|
||||
"""Test update_volume_metadata_item operation.
|
||||
|
||||
Args:
|
||||
expected_status: The expected HTTP response code
|
||||
"""
|
||||
volume_id = self.create_volume(
|
||||
client=self.volumes_client, metadata=self.metadata
|
||||
)
|
||||
|
||||
self.do_request(
|
||||
method='update_volume_metadata_item',
|
||||
expected_status=expected_status,
|
||||
volume_id=volume_id, id='key1',
|
||||
meta_item={'key1': 'value1_updated'}
|
||||
)
|
||||
if expected_status != exceptions.Forbidden:
|
||||
vol = self.volumes_client.show_volume(
|
||||
volume_id=volume_id
|
||||
)['volume']
|
||||
self.assertIn(
|
||||
'key1', vol['metadata'].keys(),
|
||||
"'key1' not found in volume metadata keys"
|
||||
)
|
||||
self.assertEqual(
|
||||
'value1_updated', vol['metadata']['key1'],
|
||||
"'key1' value is not up-to-date"
|
||||
)
|
||||
|
||||
|
||||
class ProjectReaderTests(VolumeV3RbacVolumesMetadataTests):
|
||||
|
||||
credentials = ['project_reader', 'project_admin']
|
||||
|
||||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super().setup_clients()
|
||||
cls.client = cls.os_project_reader.volumes_client_latest
|
||||
|
||||
@decorators.skip_because(bug='2038369')
|
||||
@decorators.idempotent_id('6743fe4f-58bb-4b81-9054-272826e0525a')
|
||||
def test_create_volume_metadata(self):
|
||||
self._create_volume_metadata(expected_status=exceptions.Forbidden)
|
||||
|
||||
@decorators.idempotent_id('f15be3ed-ed44-41ba-a462-24dc17a1dd90')
|
||||
def test_show_volume_metadata(self):
|
||||
self._show_volume_metadata(expected_status=200)
|
||||
|
||||
@decorators.skip_because(bug='2038369')
|
||||
@decorators.idempotent_id('05335522-41b2-4377-a817-a1191c7ca71c')
|
||||
def test_update_volume_metadata(self):
|
||||
self._update_volume_metadata(expected_status=exceptions.Forbidden)
|
||||
|
||||
@decorators.idempotent_id('50dc3630-db40-4bfc-b2a5-049f77e11633')
|
||||
def test_show_volume_metadata_item(self):
|
||||
self._show_volume_metadata_item(expected_status=200)
|
||||
|
||||
@decorators.skip_because(bug='2038369')
|
||||
@decorators.idempotent_id('8ed21ba6-fb6c-46c8-8018-03cb4fc84023')
|
||||
def test_delete_volume_metadata_item(self):
|
||||
self._delete_volume_metadata_item(expected_status=exceptions.Forbidden)
|
||||
|
||||
@decorators.skip_because(bug='2038369')
|
||||
@decorators.idempotent_id('aa8626c0-2ab1-4c14-b881-2a8d1bfcd31e')
|
||||
def test_update_volume_metadata_item(self):
|
||||
self._update_volume_metadata_item(expected_status=exceptions.Forbidden)
|
||||
|
||||
|
||||
class ProjectMemberTests(VolumeV3RbacVolumesMetadataTests):
|
||||
|
||||
credentials = ['project_member', 'project_admin']
|
||||
|
||||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super().setup_clients()
|
||||
cls.client = cls.os_project_member.volumes_client_latest
|
||||
|
||||
@decorators.idempotent_id('69cf1a35-85ad-4ab0-bc5f-e262f327600b')
|
||||
def test_create_volume_metadata(self):
|
||||
self._create_volume_metadata(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('f7b5a594-6856-4b45-ba19-d8b36404147a')
|
||||
def test_show_volume_metadata(self):
|
||||
self._show_volume_metadata(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('11ec15b5-5198-4cb9-849a-5510328e41bb')
|
||||
def test_update_volume_metadata(self):
|
||||
self._update_volume_metadata(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('ed5a50d6-baea-4c10-9ce5-cd5b2929c29c')
|
||||
def test_show_volume_metadata_item(self):
|
||||
self._show_volume_metadata_item(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('c4c265e2-c71d-4a67-94dc-6da90d7bb79f')
|
||||
def test_delete_volume_metadata_item(self):
|
||||
self._delete_volume_metadata_item(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('c2fc1a82-9eb9-432e-9cd5-e894fe2f5d9d')
|
||||
def test_update_volume_metadata_item(self):
|
||||
self._update_volume_metadata_item(expected_status=200)
|
||||
|
||||
|
||||
class ProjectAdminTests(VolumeV3RbacVolumesMetadataTests):
|
||||
|
||||
credentials = ['project_admin']
|
||||
|
||||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super().setup_clients()
|
||||
cls.client = cls.os_project_admin.volumes_client_latest
|
||||
|
||||
@decorators.idempotent_id('ec623abe-9cca-42c7-9516-b26fca1c39e7')
|
||||
def test_create_volume_metadata(self):
|
||||
self._create_volume_metadata(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('93a45eda-2753-428c-b846-325eaee560a7')
|
||||
def test_show_volume_metadata(self):
|
||||
self._show_volume_metadata(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('d1ad8db6-0f63-420e-b945-e40de817f427')
|
||||
def test_update_volume_metadata(self):
|
||||
self._update_volume_metadata(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('37f2129e-a8fa-419f-81dc-3ee66edd3c0c')
|
||||
def test_show_volume_metadata_item(self):
|
||||
self._show_volume_metadata_item(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('ff7c632b-4a26-4242-80ef-6375bf153462')
|
||||
def test_delete_volume_metadata_item(self):
|
||||
self._delete_volume_metadata_item(expected_status=200)
|
||||
|
||||
@decorators.idempotent_id('310f41e5-534b-4556-a859-089774d912c2')
|
||||
def test_update_volume_metadata_item(self):
|
||||
self._update_volume_metadata_item(expected_status=200)
|
Loading…
Reference in New Issue