Adds missing volumes client tests
Adds missing volumes client tests for set bootable, reserve, unreserve, and update metadata actions, as well as renames update metadata item and delete metadata items tests to properly represent what actions they perform. Change-Id: I75bbf62635f3476e658f5b162f5bd65f9fcaab08 Implements: bp: test-volumes-rbac
This commit is contained in:
parent
edcdbecd6b
commit
f568d04215
|
@ -40,7 +40,6 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest):
|
||||||
cls.image_client = cls.os_primary.image_client
|
cls.image_client = cls.os_primary.image_client
|
||||||
elif CONF.image_feature_enabled.api_v2:
|
elif CONF.image_feature_enabled.api_v2:
|
||||||
cls.image_client = cls.os_primary.image_client_v2
|
cls.image_client = cls.os_primary.image_client_v2
|
||||||
cls.image_id = CONF.compute.image_ref
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
|
@ -119,28 +118,6 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest):
|
||||||
self.addCleanup(self.client.update_volume_readonly,
|
self.addCleanup(self.client.update_volume_readonly,
|
||||||
self.volume['id'], readonly=False)
|
self.volume['id'], readonly=False)
|
||||||
|
|
||||||
@decorators.idempotent_id('a9d9e825-5ea3-42e6-96f3-7ac4e97b2ed0')
|
|
||||||
@rbac_rule_validation.action(
|
|
||||||
service="cinder",
|
|
||||||
rule="volume:update_volume_metadata")
|
|
||||||
def test_update_volume_image_metadata(self):
|
|
||||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
|
||||||
|
|
||||||
self.volumes_client.update_volume_image_metadata(
|
|
||||||
self.volume['id'], image_id=self.image_id)
|
|
||||||
|
|
||||||
@decorators.idempotent_id('a41c8eed-2051-4a25-b401-df036faacbdc')
|
|
||||||
@rbac_rule_validation.action(
|
|
||||||
service="cinder",
|
|
||||||
rule="volume:delete_volume_metadata")
|
|
||||||
def test_delete_volume_image_metadata(self):
|
|
||||||
self.volumes_client.update_volume_image_metadata(
|
|
||||||
self.volume['id'], image_id=self.image_id)
|
|
||||||
|
|
||||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
|
||||||
self.volumes_client.delete_volume_image_metadata(
|
|
||||||
self.volume['id'], 'image_id')
|
|
||||||
|
|
||||||
@decorators.idempotent_id('72bab13c-dfaf-4b6d-a132-c83a85fb1776')
|
@decorators.idempotent_id('72bab13c-dfaf-4b6d-a132-c83a85fb1776')
|
||||||
@rbac_rule_validation.action(
|
@rbac_rule_validation.action(
|
||||||
service="cinder",
|
service="cinder",
|
||||||
|
@ -149,7 +126,37 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest):
|
||||||
volume = self.create_volume()
|
volume = self.create_volume()
|
||||||
|
|
||||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
self.volumes_client.unmanage_volume(volume['id'])
|
self.client.unmanage_volume(volume['id'])
|
||||||
|
|
||||||
|
@decorators.idempotent_id('59b783c0-f4ef-430c-8a90-1bad97d4ec5c')
|
||||||
|
@rbac_rule_validation.action(service="cinder",
|
||||||
|
rule="volume:update")
|
||||||
|
def test_volume_set_bootable(self):
|
||||||
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
|
self.client.set_bootable_volume(self.volume['id'], bootable=True)
|
||||||
|
|
||||||
|
@decorators.idempotent_id('41566922-75a1-4484-99c7-9c8782ee99ac')
|
||||||
|
@rbac_rule_validation.action(service="cinder",
|
||||||
|
rule="volume:reserve_volume")
|
||||||
|
def test_volume_reserve(self):
|
||||||
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
|
self.client.reserve_volume(self.volume['id'])
|
||||||
|
|
||||||
|
@decorators.idempotent_id('e5fa9564-77d9-4e57-b0c0-3e0ae4d08535')
|
||||||
|
@rbac_rule_validation.action(service="cinder",
|
||||||
|
rule="volume:unreserve_volume")
|
||||||
|
def test_volume_unreserve(self):
|
||||||
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
|
self.client.unreserve_volume(self.volume['id'])
|
||||||
|
|
||||||
|
@decorators.idempotent_id('c015c82f-7010-48cc-bd71-4ef542046f20')
|
||||||
|
@rbac_rule_validation.action(service="cinder",
|
||||||
|
rule="volume:retype")
|
||||||
|
def test_volume_retype(self):
|
||||||
|
volume = self.create_volume()
|
||||||
|
vol_type = self.create_volume_type()['name']
|
||||||
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
|
self.client.retype_volume(volume['id'], new_type=vol_type)
|
||||||
|
|
||||||
|
|
||||||
class VolumesActionsV3RbacTest(VolumesActionsRbacTest):
|
class VolumesActionsV3RbacTest(VolumesActionsRbacTest):
|
||||||
|
|
|
@ -13,8 +13,6 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from oslo_log import log as logging
|
|
||||||
|
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
|
@ -22,7 +20,6 @@ from patrole_tempest_plugin import rbac_rule_validation
|
||||||
from patrole_tempest_plugin.tests.api.volume import rbac_base
|
from patrole_tempest_plugin.tests.api.volume import rbac_base
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
LOG = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class VolumeMetadataRbacTest(rbac_base.BaseVolumeRbacTest):
|
class VolumeMetadataRbacTest(rbac_base.BaseVolumeRbacTest):
|
||||||
|
@ -30,54 +27,88 @@ class VolumeMetadataRbacTest(rbac_base.BaseVolumeRbacTest):
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
super(VolumeMetadataRbacTest, cls).setup_clients()
|
super(VolumeMetadataRbacTest, cls).setup_clients()
|
||||||
cls.client = cls.volumes_client
|
cls.client = cls.volumes_client
|
||||||
|
if CONF.image_feature_enabled.api_v1:
|
||||||
|
cls.image_client = cls.os_primary.image_client
|
||||||
|
elif CONF.image_feature_enabled.api_v2:
|
||||||
|
cls.image_client = cls.os_primary.image_client_v2
|
||||||
|
cls.image_id = CONF.compute.image_ref
|
||||||
|
|
||||||
def _add_metadata(self, volume):
|
@classmethod
|
||||||
|
def resource_setup(cls):
|
||||||
|
super(VolumeMetadataRbacTest, cls).resource_setup()
|
||||||
|
cls.volume = cls.create_volume()
|
||||||
|
cls._add_metadata(cls.volume)
|
||||||
|
cls.image_id = CONF.compute.image_ref
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _add_metadata(cls, volume):
|
||||||
# Create metadata for the volume
|
# Create metadata for the volume
|
||||||
metadata = {"key1": "value1",
|
metadata = {"key1": "value1",
|
||||||
"key2": "value2",
|
"key2": "value2",
|
||||||
"key3": "value3",
|
"key3": "value3",
|
||||||
"key4": "<value&special_chars>"}
|
"key4": "<value&special_chars>"}
|
||||||
self.volumes_client.create_volume_metadata(volume['id'],
|
cls.client.create_volume_metadata(cls.volume['id'],
|
||||||
metadata)['metadata']
|
metadata)['metadata']
|
||||||
|
|
||||||
@rbac_rule_validation.action(service="cinder",
|
@rbac_rule_validation.action(service="cinder",
|
||||||
rule="volume:update_volume_metadata")
|
rule="volume:update_volume_metadata")
|
||||||
@decorators.idempotent_id('232bbb8b-4c29-44dc-9077-b1398c20b738')
|
@decorators.idempotent_id('232bbb8b-4c29-44dc-9077-b1398c20b738')
|
||||||
def test_create_volume_metadata(self):
|
def test_create_volume_metadata(self):
|
||||||
volume = self.create_volume()
|
|
||||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
self._add_metadata(volume)
|
self._add_metadata(self.volume)
|
||||||
|
|
||||||
@rbac_rule_validation.action(service="cinder",
|
@rbac_rule_validation.action(service="cinder",
|
||||||
rule="volume:get")
|
rule="volume:get")
|
||||||
@decorators.idempotent_id('87ea37d9-23ab-47b2-a59c-16fc4d2c6dfa')
|
@decorators.idempotent_id('87ea37d9-23ab-47b2-a59c-16fc4d2c6dfa')
|
||||||
def test_get_volume_metadata(self):
|
def test_get_volume_metadata(self):
|
||||||
volume = self.create_volume()
|
|
||||||
self._add_metadata(volume)
|
|
||||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
self.volumes_client.show_volume_metadata(volume['id'])['metadata']
|
self.client.show_volume_metadata(self.volume['id'])['metadata']
|
||||||
|
|
||||||
@rbac_rule_validation.action(service="cinder",
|
@rbac_rule_validation.action(service="cinder",
|
||||||
rule="volume:delete_volume_metadata")
|
rule="volume:delete_volume_metadata")
|
||||||
@decorators.idempotent_id('7498dfc1-9db2-4423-ad20-e6dcb25d1beb')
|
@decorators.idempotent_id('7498dfc1-9db2-4423-ad20-e6dcb25d1beb')
|
||||||
def test_delete_volume_metadata(self):
|
def test_delete_volume_metadata_item(self):
|
||||||
volume = self.create_volume()
|
|
||||||
self._add_metadata(volume)
|
|
||||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
self.volumes_client.delete_volume_metadata_item(volume['id'],
|
self.client.delete_volume_metadata_item(self.volume['id'], "key1")
|
||||||
"key1")
|
|
||||||
|
@decorators.idempotent_id('a41c8eed-2051-4a25-b401-df036faacbdc')
|
||||||
|
@rbac_rule_validation.action(
|
||||||
|
service="cinder",
|
||||||
|
rule="volume:delete_volume_metadata")
|
||||||
|
def test_delete_volume_image_metadata(self):
|
||||||
|
self.client.update_volume_image_metadata(self.volume['id'],
|
||||||
|
image_id=self.image_id)
|
||||||
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
|
self.client.delete_volume_image_metadata(self.volume['id'], 'image_id')
|
||||||
|
|
||||||
@rbac_rule_validation.action(service="cinder",
|
@rbac_rule_validation.action(service="cinder",
|
||||||
rule="volume:update_volume_metadata")
|
rule="volume:update_volume_metadata")
|
||||||
@decorators.idempotent_id('8ce2ff80-99ba-49ae-9bb1-7e96729ee5af')
|
@decorators.idempotent_id('8ce2ff80-99ba-49ae-9bb1-7e96729ee5af')
|
||||||
def test_update_volume_metadata(self):
|
def test_update_volume_metadata_item(self):
|
||||||
volume = self.create_volume()
|
|
||||||
self._add_metadata(volume)
|
|
||||||
# Metadata to update
|
# Metadata to update
|
||||||
update_item = {"key3": "value3_update"}
|
update_item = {"key3": "value3_update"}
|
||||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
self.volumes_client.update_volume_metadata_item(
|
self.client.update_volume_metadata_item(self.volume['id'], "key3",
|
||||||
volume['id'], "key3", update_item)['meta']
|
update_item)['meta']
|
||||||
|
|
||||||
|
@decorators.idempotent_id('a231b445-97a5-4657-b05f-245895e88da9')
|
||||||
|
@rbac_rule_validation.action(service="cinder",
|
||||||
|
rule="volume:update_volume_metadata")
|
||||||
|
def test_update_volume_metadata(self):
|
||||||
|
# Metadata to update
|
||||||
|
update = {"key1": "value1",
|
||||||
|
"key3": "value3"}
|
||||||
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
|
self.client.update_volume_metadata(self.volume['id'], update)
|
||||||
|
|
||||||
|
@decorators.idempotent_id('a9d9e825-5ea3-42e6-96f3-7ac4e97b2ed0')
|
||||||
|
@rbac_rule_validation.action(
|
||||||
|
service="cinder",
|
||||||
|
rule="volume:update_volume_metadata")
|
||||||
|
def test_update_volume_image_metadata(self):
|
||||||
|
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||||
|
self.client.update_volume_image_metadata(self.volume['id'],
|
||||||
|
image_id=self.image_id)
|
||||||
|
|
||||||
|
|
||||||
class VolumeMetadataV3RbacTest(VolumeMetadataRbacTest):
|
class VolumeMetadataV3RbacTest(VolumeMetadataRbacTest):
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
features:
|
||||||
|
- Added tests for volumes client functions set
|
||||||
|
bootable, reserve, unreserve, and update metadata.
|
||||||
|
other:
|
||||||
|
- Renamed update metadata item and delete metadata
|
||||||
|
item tests to accurately reflect what actions are
|
||||||
|
being performed.
|
Loading…
Reference in New Issue