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:
Samantha Blanco 2017-04-25 16:32:54 -04:00
parent edcdbecd6b
commit f568d04215
3 changed files with 91 additions and 45 deletions

View File

@ -40,7 +40,6 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest):
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
@classmethod
def resource_setup(cls):
@ -119,28 +118,6 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest):
self.addCleanup(self.client.update_volume_readonly,
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')
@rbac_rule_validation.action(
service="cinder",
@ -149,7 +126,37 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest):
volume = self.create_volume()
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):

View File

@ -13,8 +13,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from oslo_log import log as logging
from tempest import config
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
CONF = config.CONF
LOG = logging.getLogger(__name__)
class VolumeMetadataRbacTest(rbac_base.BaseVolumeRbacTest):
@ -30,54 +27,88 @@ class VolumeMetadataRbacTest(rbac_base.BaseVolumeRbacTest):
def setup_clients(cls):
super(VolumeMetadataRbacTest, cls).setup_clients()
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
metadata = {"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "<value&special_chars>"}
self.volumes_client.create_volume_metadata(volume['id'],
metadata)['metadata']
cls.client.create_volume_metadata(cls.volume['id'],
metadata)['metadata']
@rbac_rule_validation.action(service="cinder",
rule="volume:update_volume_metadata")
@decorators.idempotent_id('232bbb8b-4c29-44dc-9077-b1398c20b738')
def test_create_volume_metadata(self):
volume = self.create_volume()
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",
rule="volume:get")
@decorators.idempotent_id('87ea37d9-23ab-47b2-a59c-16fc4d2c6dfa')
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.volumes_client.show_volume_metadata(volume['id'])['metadata']
self.client.show_volume_metadata(self.volume['id'])['metadata']
@rbac_rule_validation.action(service="cinder",
rule="volume:delete_volume_metadata")
@decorators.idempotent_id('7498dfc1-9db2-4423-ad20-e6dcb25d1beb')
def test_delete_volume_metadata(self):
volume = self.create_volume()
self._add_metadata(volume)
def test_delete_volume_metadata_item(self):
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
self.volumes_client.delete_volume_metadata_item(volume['id'],
"key1")
self.client.delete_volume_metadata_item(self.volume['id'], "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",
rule="volume:update_volume_metadata")
@decorators.idempotent_id('8ce2ff80-99ba-49ae-9bb1-7e96729ee5af')
def test_update_volume_metadata(self):
volume = self.create_volume()
self._add_metadata(volume)
def test_update_volume_metadata_item(self):
# Metadata to update
update_item = {"key3": "value3_update"}
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
self.volumes_client.update_volume_metadata_item(
volume['id'], "key3", update_item)['meta']
self.client.update_volume_metadata_item(self.volume['id'], "key3",
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):

View File

@ -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.