From c471d41fdb6d79ae3fa7f7b61a5c1133564853bb Mon Sep 17 00:00:00 2001 From: Felipe Monteiro Date: Fri, 9 Jun 2017 04:05:33 +0100 Subject: [PATCH] Volume test for volume_extension:volume_actions:upload_public This commit adds a test for testing the policy action: volume_extension:volume_actions:upload_public. Specifically: - adds test for volume_extension:volume_actions:upload_public whose minimum microversion is 3.10 [0] - changes the image_client for related test for test_volume_upload to use the admin image client for waiting for status change - tags this test and related test_volume_upload test as slow since they both take 20 secs or more to complete [0] https://github.com/openstack/cinder/blob/a98a16a658244814c079b01a0c4d05e2a1deca43/cinder/api/contrib/volume_actions.py#L272 Change-Id: I2d69b48202b4dc6b4ef4adcb5bf2388353ccbd9d --- .../api/volume/test_volume_actions_rbac.py | 46 ++++++++++++++++--- ...e-upload-public-test-f8e741a838ae7607.yaml | 5 ++ 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/volume-upload-public-test-f8e741a838ae7607.yaml diff --git a/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py index f27b8a83..7916c8c6 100644 --- a/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py +++ b/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py @@ -29,13 +29,10 @@ CONF = config.CONF class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest): - # TODO(felipemonteiro): "volume_extension:volume_actions:upload_public" - # test can be created once volumes v3 client is created in Tempest. - @classmethod def setup_clients(cls): super(VolumesActionsRbacTest, cls).setup_clients() - cls.image_client = cls.os_primary.image_client_v2 + cls.admin_image_client = cls.os_admin.image_client_v2 @classmethod def resource_setup(cls): @@ -87,6 +84,7 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest): self.rbac_utils.switch_role(self, toggle_rbac_role=True) self._detach_volume() + @test.attr(type=["slow"]) @test.services('image') @rbac_rule_validation.action( service="cinder", @@ -104,9 +102,10 @@ class VolumesActionsRbacTest(rbac_base.BaseVolumeRbacTest): disk_format=CONF.volume.disk_format)['os-volume_upload_image'] image_id = body["image_id"] self.addCleanup(test_utils.call_and_ignore_notfound_exc, - self.image_client.delete_image, + self.admin_image_client.delete_image, image_id) - waiters.wait_for_image_status(self.image_client, image_id, 'active') + waiters.wait_for_image_status(self.admin_image_client, image_id, + 'active') waiters.wait_for_volume_resource_status(self.os_admin.volumes_client, self.volume['id'], 'available') @@ -210,6 +209,41 @@ class VolumesActionsV3RbacTest(VolumesActionsRbacTest): _api_version = 3 +class VolumesActionsV310RbacTest(rbac_base.BaseVolumeRbacTest): + _api_version = 3 + min_microversion = '3.10' + max_microversion = 'latest' + + @classmethod + def setup_clients(cls): + super(VolumesActionsV310RbacTest, cls).setup_clients() + cls.admin_image_client = cls.os_admin.image_client_v2 + + @test.attr(type=["slow"]) + @test.services('image') + @rbac_rule_validation.action( + service="cinder", + rule="volume_extension:volume_actions:upload_public") + @decorators.idempotent_id('578a84dd-a6bd-4f97-a418-4a0c3c272c08') + def test_volume_upload_public(self): + # This also enforces "volume_extension:volume_actions:upload_image". + volume = self.create_volume() + image_name = data_utils.rand_name(self.__class__.__name__ + '-Image') + + self.rbac_utils.switch_role(self, toggle_rbac_role=True) + body = self.volumes_client.upload_volume( + volume['id'], image_name=image_name, visibility="public", + disk_format=CONF.volume.disk_format)['os-volume_upload_image'] + image_id = body["image_id"] + self.addCleanup(test_utils.call_and_ignore_notfound_exc, + self.admin_image_client.delete_image, + image_id) + waiters.wait_for_image_status(self.admin_image_client, image_id, + 'active') + waiters.wait_for_volume_resource_status(self.os_admin.volumes_client, + volume['id'], 'available') + + class VolumesActionsV312RbacTest(rbac_base.BaseVolumeRbacTest): _api_version = 3 min_microversion = '3.12' diff --git a/releasenotes/notes/volume-upload-public-test-f8e741a838ae7607.yaml b/releasenotes/notes/volume-upload-public-test-f8e741a838ae7607.yaml new file mode 100644 index 00000000..c8c0ecd2 --- /dev/null +++ b/releasenotes/notes/volume-upload-public-test-f8e741a838ae7607.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add RBAC test to provide coverage for the following cinder policy: + "volume_extension:volume_actions:upload_public".