Codebase list cinder-tempest-plugin / b57a8dd
Test srbac on user_messages Test 'reader', 'member' and 'admin' roles for 'list', 'show' and 'delete'. Signed-off-by: Yosi Ben Shimon <ybenshim@redhat.com> Change-Id: I1273af9f12b6785fe2c648d53c66cf4d5a748243 Yosi Ben Shimon 2 years ago
1 changed file(s) with 168 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
0 # Licensed under the Apache License, Version 2.0 (the "License"); you may
1 # not use this file except in compliance with the License. You may obtain
2 # a copy of the License at
3 #
4 # http://www.apache.org/licenses/LICENSE-2.0
5 #
6 # Unless required by applicable law or agreed to in writing, software
7 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
8 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
9 # License for the specific language governing permissions and limitations
10 # under the License.
11
12 from tempest.common import waiters
13 from tempest import config
14 from tempest.lib.common.utils import data_utils
15 from tempest.lib.common.utils import test_utils
16 from tempest.lib import decorators
17 from tempest.lib import exceptions
18
19 from cinder_tempest_plugin.rbac.v3 import base as rbac_base
20
21 CONF = config.CONF
22
23
24 class RbacV3UserMessagesTests(rbac_base.VolumeV3RbacBaseTests):
25 min_microversion = '3.3'
26
27 @classmethod
28 def setup_clients(cls):
29 super().setup_clients()
30 admin_client = cls.os_project_admin
31 cls.admin_messages_client = admin_client.volume_messages_client_latest
32 cls.admin_volumes_client = admin_client.volumes_client_latest
33 cls.admin_types_client = admin_client.volume_types_client_latest
34
35 def create_user_message(self):
36 """Trigger a 'no valid host' situation to generate a message."""
37 bad_protocol = data_utils.rand_name('storage_protocol')
38 bad_vendor = data_utils.rand_name('vendor_name')
39 extra_specs = {'storage_protocol': bad_protocol,
40 'vendor_name': bad_vendor}
41 vol_type_name = data_utils.rand_name(
42 self.__class__.__name__ + '-volume-type'
43 )
44 bogus_type = self.admin_types_client.create_volume_type(
45 name=vol_type_name, extra_specs=extra_specs
46 )['volume_type']
47 self.addCleanup(
48 self.admin_types_client.delete_volume_type, bogus_type['id']
49 )
50
51 params = {
52 'volume_type': bogus_type['id'], 'size': CONF.volume.volume_size
53 }
54 volume = self.admin_volumes_client.create_volume(**params)['volume']
55 waiters.wait_for_volume_resource_status(
56 self.admin_volumes_client, volume['id'], 'error'
57 )
58 self.addCleanup(
59 test_utils.call_and_ignore_notfound_exc,
60 self.admin_volumes_client.delete_volume,
61 volume['id']
62 )
63
64 messages = self.admin_messages_client.list_messages()['messages']
65 message_id = None
66 for message in messages:
67 if message['resource_uuid'] == volume['id']:
68 message_id = message['id']
69 break
70 self.assertIsNotNone(
71 message_id, f"No user message generated for volume {volume['id']}"
72 )
73 return message_id
74
75 def _list_messages(self, expected_status):
76 message_id = self.create_user_message()
77 self.addCleanup(
78 self.admin_messages_client.delete_message, message_id
79 )
80 self.do_request(
81 method='list_messages', expected_status=expected_status
82 )
83
84 def _show_message(self, expected_status):
85 message_id = self.create_user_message()
86 self.addCleanup(self.admin_messages_client.delete_message, message_id)
87 self.do_request(
88 method='show_message', expected_status=expected_status,
89 message_id=message_id
90 )
91
92 def _delete_message(self, expected_status):
93 message_id = self.create_user_message()
94 self.do_request(
95 method='delete_message', expected_status=expected_status,
96 message_id=message_id
97 )
98 if expected_status == exceptions.Forbidden:
99 self.addCleanup(
100 self.admin_messages_client.delete_message, message_id
101 )
102 else:
103 self.client.wait_for_resource_deletion(id=message_id)
104
105
106 class ProjectReaderTests(RbacV3UserMessagesTests):
107 credentials = ['project_reader', 'project_admin']
108
109 @classmethod
110 def setup_clients(cls):
111 super().setup_clients()
112 cls.client = cls.os_project_reader.volume_messages_client_latest
113
114 @decorators.idempotent_id('1bef8bf9-6457-40f8-ada2-bc4d27602a07')
115 def test_list_messages(self):
116 self._list_messages(expected_status=200)
117
118 @decorators.idempotent_id('689c53a9-6db9-44a8-9878-41d28899e0af')
119 def test_show_message(self):
120 self._show_message(expected_status=200)
121
122 @decorators.skip_because(bug='2009818')
123 @decorators.idempotent_id('c6e8744b-7749-425f-81b6-b1c3df6c7162')
124 def test_delete_message(self):
125 self._delete_message(expected_status=exceptions.Forbidden)
126
127
128 class ProjectMemberTests(RbacV3UserMessagesTests):
129 credentials = ['project_member', 'project_admin']
130
131 @classmethod
132 def setup_clients(cls):
133 super().setup_clients()
134 cls.client = cls.os_project_member.volume_messages_client_latest
135
136 @decorators.idempotent_id('fb470249-a482-49c6-84af-eda34891a714')
137 def test_list_messages(self):
138 self._list_messages(expected_status=200)
139
140 @decorators.idempotent_id('43d248ef-008d-4aff-8c7f-37959a0fa195')
141 def test_show_message(self):
142 self._show_message(expected_status=200)
143
144 @decorators.idempotent_id('a77cd089-cb74-4b44-abcb-06f1a6f80378')
145 def test_delete_message(self):
146 self._delete_message(expected_status=204)
147
148
149 class ProjectAdminTests(RbacV3UserMessagesTests):
150 credentials = ['project_admin']
151
152 @classmethod
153 def setup_clients(cls):
154 super().setup_clients()
155 cls.client = cls.os_project_admin.volume_messages_client_latest
156
157 @decorators.idempotent_id('f3567efc-863c-4668-8fb1-6aa3f836451d')
158 def test_list_messages(self):
159 self._list_messages(expected_status=200)
160
161 @decorators.idempotent_id('eecc7045-017b-492c-8594-2d40f5fda139')
162 def test_show_message(self):
163 self._show_message(expected_status=200)
164
165 @decorators.idempotent_id('1f2db6f2-148f-44c2-97ef-dcff0fccd49a')
166 def test_delete_message(self):
167 self._delete_message(expected_status=204)