python-openstackclient 7.2.1__py3-none-any.whl → 7.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. openstackclient/common/limits.py +1 -1
  2. openstackclient/common/quota.py +7 -2
  3. openstackclient/compute/v2/server.py +38 -22
  4. openstackclient/compute/v2/usage.py +2 -2
  5. openstackclient/identity/common.py +22 -34
  6. openstackclient/identity/v3/credential.py +45 -28
  7. openstackclient/identity/v3/limit.py +15 -0
  8. openstackclient/identity/v3/region.py +23 -22
  9. openstackclient/identity/v3/registered_limit.py +18 -0
  10. openstackclient/identity/v3/role.py +287 -117
  11. openstackclient/identity/v3/role_assignment.py +1 -1
  12. openstackclient/identity/v3/service_provider.py +95 -45
  13. openstackclient/identity/v3/trust.py +114 -75
  14. openstackclient/image/v2/image.py +3 -0
  15. openstackclient/network/v2/network.py +33 -0
  16. openstackclient/network/v2/network_flavor_profile.py +1 -17
  17. openstackclient/network/v2/port.py +73 -19
  18. openstackclient/tests/functional/compute/v2/test_server.py +87 -1
  19. openstackclient/tests/functional/identity/v3/common.py +1 -1
  20. openstackclient/tests/functional/identity/v3/test_application_credential.py +2 -1
  21. openstackclient/tests/functional/identity/v3/test_role.py +24 -0
  22. openstackclient/tests/functional/identity/v3/test_role_assignment.py +8 -0
  23. openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -5
  24. openstackclient/tests/functional/network/v2/test_port.py +28 -1
  25. openstackclient/tests/unit/compute/v2/fakes.py +0 -304
  26. openstackclient/tests/unit/compute/v2/test_aggregate.py +40 -31
  27. openstackclient/tests/unit/compute/v2/test_console.py +7 -3
  28. openstackclient/tests/unit/compute/v2/test_hypervisor.py +60 -53
  29. openstackclient/tests/unit/compute/v2/test_keypair.py +57 -69
  30. openstackclient/tests/unit/compute/v2/test_server.py +63 -5
  31. openstackclient/tests/unit/compute/v2/test_server_group.py +99 -105
  32. openstackclient/tests/unit/compute/v2/test_server_volume.py +12 -5
  33. openstackclient/tests/unit/compute/v2/test_service.py +83 -37
  34. openstackclient/tests/unit/compute/v2/test_usage.py +12 -7
  35. openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -6
  36. openstackclient/tests/unit/identity/v2_0/test_role.py +1 -2
  37. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +2 -1
  38. openstackclient/tests/unit/identity/v2_0/test_token.py +6 -20
  39. openstackclient/tests/unit/identity/v3/test_catalog.py +2 -5
  40. openstackclient/tests/unit/identity/v3/test_credential.py +74 -63
  41. openstackclient/tests/unit/identity/v3/test_project.py +1 -3
  42. openstackclient/tests/unit/identity/v3/test_region.py +74 -96
  43. openstackclient/tests/unit/identity/v3/test_role.py +679 -603
  44. openstackclient/tests/unit/identity/v3/test_role_assignment.py +263 -1
  45. openstackclient/tests/unit/identity/v3/test_service_provider.py +159 -209
  46. openstackclient/tests/unit/identity/v3/test_token.py +5 -20
  47. openstackclient/tests/unit/identity/v3/test_trust.py +137 -155
  48. openstackclient/tests/unit/image/v2/test_image.py +6 -0
  49. openstackclient/tests/unit/network/v2/fakes.py +3 -0
  50. openstackclient/tests/unit/network/v2/test_network.py +25 -0
  51. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +0 -35
  52. openstackclient/tests/unit/network/v2/test_port.py +129 -16
  53. openstackclient/tests/unit/utils.py +8 -2
  54. openstackclient/tests/unit/volume/v2/test_volume_backup.py +31 -13
  55. openstackclient/tests/unit/volume/v3/test_volume_backup.py +34 -13
  56. openstackclient/volume/v2/volume_backup.py +11 -2
  57. openstackclient/volume/v3/volume_backup.py +13 -2
  58. {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.0.dist-info}/AUTHORS +2 -0
  59. {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.0.dist-info}/METADATA +14 -16
  60. {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.0.dist-info}/RECORD +65 -65
  61. {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.0.dist-info}/WHEEL +1 -1
  62. {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.0.dist-info}/entry_points.txt +0 -1
  63. python_openstackclient-7.3.0.dist-info/pbr.json +1 -0
  64. python_openstackclient-7.2.1.dist-info/pbr.json +0 -1
  65. {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.0.dist-info}/LICENSE +0 -0
  66. {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.0.dist-info}/top_level.txt +0 -0
@@ -13,110 +13,177 @@
13
13
  # under the License.
14
14
  #
15
15
 
16
- import copy
17
16
  from unittest import mock
18
17
 
19
18
  from osc_lib import exceptions
20
- from osc_lib import utils
21
19
 
22
- from openstackclient.identity import common
20
+ from openstack import exceptions as sdk_exc
21
+ from openstack.identity.v3 import domain as _domain
22
+ from openstack.identity.v3 import group as _group
23
+ from openstack.identity.v3 import project as _project
24
+ from openstack.identity.v3 import role as _role
25
+ from openstack.identity.v3 import system as _system
26
+ from openstack.identity.v3 import user as _user
27
+ from openstack.test import fakes as sdk_fakes
28
+
23
29
  from openstackclient.identity.v3 import role
24
- from openstackclient.tests.unit import fakes
25
30
  from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
31
+ from openstackclient.tests.unit import utils as test_utils
32
+
33
+
34
+ class TestRoleInherited(identity_fakes.TestIdentityv3):
35
+ def _is_inheritance_testcase(self):
36
+ return True
26
37
 
27
38
 
28
- class TestRole(identity_fakes.TestIdentityv3):
39
+ class TestFindSDKId(test_utils.TestCase):
29
40
  def setUp(self):
30
41
  super().setUp()
42
+ self.user = sdk_fakes.generate_fake_resource(_user.User)
43
+ self.identity_sdk_client = mock.Mock()
44
+ self.identity_sdk_client.find_user = mock.Mock()
31
45
 
32
- # Get a shortcut to the UserManager Mock
33
- self.users_mock = self.identity_client.users
34
- self.users_mock.reset_mock()
46
+ def test_find_sdk_id_validate(self):
47
+ self.identity_sdk_client.find_user.side_effect = [self.user]
35
48
 
36
- # Get a shortcut to the UserManager Mock
37
- self.groups_mock = self.identity_client.groups
38
- self.groups_mock.reset_mock()
49
+ result = role._find_sdk_id(
50
+ self.identity_sdk_client.find_user,
51
+ name_or_id=self.user.id,
52
+ validate_actor_existence=True,
53
+ )
54
+ self.assertEqual(self.user.id, result)
39
55
 
40
- # Get a shortcut to the DomainManager Mock
41
- self.domains_mock = self.identity_client.domains
42
- self.domains_mock.reset_mock()
56
+ def test_find_sdk_id_no_validate(self):
57
+ self.identity_sdk_client.find_user.side_effect = [self.user]
43
58
 
44
- # Get a shortcut to the ProjectManager Mock
45
- self.projects_mock = self.identity_client.projects
46
- self.projects_mock.reset_mock()
59
+ result = role._find_sdk_id(
60
+ self.identity_sdk_client.find_user,
61
+ name_or_id=self.user.id,
62
+ validate_actor_existence=False,
63
+ )
64
+ self.assertEqual(self.user.id, result)
47
65
 
48
- # Get a shortcut to the RoleManager Mock
49
- self.roles_mock = self.identity_client.roles
50
- self.roles_mock.reset_mock()
66
+ def test_find_sdk_id_not_found_validate(self):
67
+ self.identity_sdk_client.find_user.side_effect = [
68
+ sdk_exc.ResourceNotFound,
69
+ ]
51
70
 
52
- def _is_inheritance_testcase(self):
53
- return False
71
+ self.assertRaises(
72
+ exceptions.CommandError,
73
+ role._find_sdk_id,
74
+ self.identity_sdk_client.find_user,
75
+ name_or_id=self.user.id,
76
+ validate_actor_existence=True,
77
+ )
78
+
79
+ def test_find_sdk_id_not_found_no_validate(self):
80
+ self.identity_sdk_client.find_user.side_effect = [
81
+ sdk_exc.ResourceNotFound,
82
+ ]
83
+
84
+ result = role._find_sdk_id(
85
+ self.identity_sdk_client.find_user,
86
+ name_or_id=self.user.id,
87
+ validate_actor_existence=False,
88
+ )
89
+ self.assertEqual(self.user.id, result)
90
+
91
+ def test_find_sdk_id_forbidden_validate(self):
92
+ self.identity_sdk_client.find_user.side_effect = [
93
+ sdk_exc.ForbiddenException,
94
+ ]
95
+
96
+ result = role._find_sdk_id(
97
+ self.identity_sdk_client.find_user,
98
+ name_or_id=self.user.id,
99
+ validate_actor_existence=True,
100
+ )
101
+
102
+ self.assertEqual(self.user.id, result)
103
+
104
+ def test_find_sdk_id_forbidden_no_validate(self):
105
+ self.identity_sdk_client.find_user.side_effect = [
106
+ sdk_exc.ForbiddenException,
107
+ ]
108
+
109
+ result = role._find_sdk_id(
110
+ self.identity_sdk_client.find_user,
111
+ name_or_id=self.user.id,
112
+ validate_actor_existence=False,
113
+ )
114
+
115
+ self.assertEqual(self.user.id, result)
54
116
 
55
117
 
56
- class TestRoleInherited(TestRole):
118
+ class TestRoleAdd(identity_fakes.TestIdentityv3):
57
119
  def _is_inheritance_testcase(self):
58
- return True
120
+ return False
59
121
 
122
+ user = sdk_fakes.generate_fake_resource(_user.User)
123
+ group = sdk_fakes.generate_fake_resource(_group.Group)
124
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
125
+ project = sdk_fakes.generate_fake_resource(_project.Project)
60
126
 
61
- class TestRoleAdd(TestRole):
62
127
  def setUp(self):
63
128
  super().setUp()
64
129
 
65
- self.users_mock.get.return_value = fakes.FakeResource(
66
- None,
67
- copy.deepcopy(identity_fakes.USER),
68
- loaded=True,
69
- )
130
+ self.identity_sdk_client.find_user.return_value = self.user
131
+ self.identity_sdk_client.find_group.return_value = self.group
132
+ self.identity_sdk_client.find_domain.return_value = self.domain
133
+ self.identity_sdk_client.find_project.return_value = self.project
70
134
 
71
- self.groups_mock.get.return_value = fakes.FakeResource(
72
- None,
73
- copy.deepcopy(identity_fakes.GROUP),
74
- loaded=True,
135
+ self.role = sdk_fakes.generate_fake_resource(
136
+ resource_type=_role.Role,
137
+ domain_id=None,
138
+ description=None,
75
139
  )
76
-
77
- self.domains_mock.get.return_value = fakes.FakeResource(
78
- None,
79
- copy.deepcopy(identity_fakes.DOMAIN),
80
- loaded=True,
140
+ self.identity_sdk_client.find_role.return_value = self.role
141
+ self.role_with_domain = sdk_fakes.generate_fake_resource(
142
+ resource_type=_role.Role,
143
+ domain_id=self.domain.id,
144
+ description=None,
81
145
  )
82
146
 
83
- self.projects_mock.get.return_value = fakes.FakeResource(
84
- None,
85
- copy.deepcopy(identity_fakes.PROJECT),
86
- loaded=True,
147
+ self.identity_sdk_client.assign_domain_role_to_user.return_value = (
148
+ self.role
87
149
  )
88
-
89
- self.roles_mock.get.return_value = fakes.FakeResource(
90
- None,
91
- copy.deepcopy(identity_fakes.ROLE),
92
- loaded=True,
150
+ self.identity_sdk_client.assign_domain_role_to_group.return_value = (
151
+ self.role
93
152
  )
94
- self.roles_mock.grant.return_value = fakes.FakeResource(
95
- None,
96
- copy.deepcopy(identity_fakes.ROLE),
97
- loaded=True,
153
+ self.identity_sdk_client.assign_project_role_to_user.return_value = (
154
+ self.role
155
+ )
156
+ self.identity_sdk_client.assign_project_role_to_group.return_value = (
157
+ self.role
158
+ )
159
+ self.identity_sdk_client.assign_system_role_to_user.return_value = (
160
+ self.role
161
+ )
162
+ self.identity_sdk_client.assign_system_role_to_group.return_value = (
163
+ self.role
98
164
  )
99
165
 
100
166
  # Get the command object to test
101
167
  self.cmd = role.AddRole(self.app, None)
102
168
 
103
- def test_role_add_user_system(self):
169
+ @mock.patch.object(role.LOG, 'warning')
170
+ def test_role_add_user_system(self, mock_warning):
104
171
  arglist = [
105
172
  '--user',
106
- identity_fakes.user_name,
173
+ self.user.name,
107
174
  '--system',
108
175
  'all',
109
- identity_fakes.role_name,
176
+ self.role.name,
110
177
  ]
111
178
  if self._is_inheritance_testcase():
112
179
  arglist.append('--inherited')
113
180
  verifylist = [
114
- ('user', identity_fakes.user_name),
181
+ ('user', self.user.name),
115
182
  ('group', None),
116
183
  ('system', 'all'),
117
184
  ('domain', None),
118
185
  ('project', None),
119
- ('role', identity_fakes.role_name),
186
+ ('role', self.role.name),
120
187
  ('inherited', self._is_inheritance_testcase()),
121
188
  ]
122
189
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -125,32 +192,36 @@ class TestRoleAdd(TestRole):
125
192
 
126
193
  # Set expected values
127
194
  kwargs = {
128
- 'user': identity_fakes.user_id,
129
195
  'system': 'all',
130
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
196
+ 'user': self.user.id,
197
+ 'role': self.role.id,
131
198
  }
132
- # RoleManager.grant(role, user=, group=, domain=, project=)
133
- self.roles_mock.grant.assert_called_with(
134
- identity_fakes.role_id, **kwargs
199
+ self.identity_sdk_client.assign_system_role_to_user.assert_called_with(
200
+ **kwargs
135
201
  )
136
202
  self.assertIsNone(result)
137
203
 
204
+ if self._is_inheritance_testcase():
205
+ mock_warning.assert_called_with(
206
+ "'--inherited' was given, which is not supported when adding a system role; this will be an error in a future release"
207
+ )
208
+
138
209
  def test_role_add_user_domain(self):
139
210
  arglist = [
140
211
  '--user',
141
- identity_fakes.user_name,
212
+ self.user.name,
142
213
  '--domain',
143
- identity_fakes.domain_name,
144
- identity_fakes.role_name,
214
+ self.domain.name,
215
+ self.role.name,
145
216
  ]
146
217
  if self._is_inheritance_testcase():
147
218
  arglist.append('--inherited')
148
219
  verifylist = [
149
- ('user', identity_fakes.user_name),
220
+ ('user', self.user.name),
150
221
  ('group', None),
151
- ('domain', identity_fakes.domain_name),
222
+ ('domain', self.domain.name),
152
223
  ('project', None),
153
- ('role', identity_fakes.role_name),
224
+ ('role', self.role.name),
154
225
  ('inherited', self._is_inheritance_testcase()),
155
226
  ]
156
227
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -159,32 +230,32 @@ class TestRoleAdd(TestRole):
159
230
 
160
231
  # Set expected values
161
232
  kwargs = {
162
- 'user': identity_fakes.user_id,
163
- 'domain': identity_fakes.domain_id,
164
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
233
+ 'domain': self.domain.id,
234
+ 'user': self.user.id,
235
+ 'role': self.role.id,
236
+ 'inherited': self._is_inheritance_testcase(),
165
237
  }
166
- # RoleManager.grant(role, user=, group=, domain=, project=)
167
- self.roles_mock.grant.assert_called_with(
168
- identity_fakes.role_id, **kwargs
238
+ self.identity_sdk_client.assign_domain_role_to_user.assert_called_with(
239
+ **kwargs
169
240
  )
170
241
  self.assertIsNone(result)
171
242
 
172
243
  def test_role_add_user_project(self):
173
244
  arglist = [
174
245
  '--user',
175
- identity_fakes.user_name,
246
+ self.user.name,
176
247
  '--project',
177
- identity_fakes.project_name,
178
- identity_fakes.role_name,
248
+ self.project.name,
249
+ self.role.name,
179
250
  ]
180
251
  if self._is_inheritance_testcase():
181
252
  arglist.append('--inherited')
182
253
  verifylist = [
183
- ('user', identity_fakes.user_name),
254
+ ('user', self.user.name),
184
255
  ('group', None),
185
256
  ('domain', None),
186
- ('project', identity_fakes.project_name),
187
- ('role', identity_fakes.role_name),
257
+ ('project', self.project.name),
258
+ ('role', self.role.name),
188
259
  ('inherited', self._is_inheritance_testcase()),
189
260
  ]
190
261
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -193,33 +264,34 @@ class TestRoleAdd(TestRole):
193
264
 
194
265
  # Set expected values
195
266
  kwargs = {
196
- 'user': identity_fakes.user_id,
197
- 'project': identity_fakes.project_id,
198
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
267
+ 'project': self.project.id,
268
+ 'user': self.user.id,
269
+ 'role': self.role.id,
270
+ 'inherited': self._is_inheritance_testcase(),
199
271
  }
200
- # RoleManager.grant(role, user=, group=, domain=, project=)
201
- self.roles_mock.grant.assert_called_with(
202
- identity_fakes.role_id, **kwargs
272
+ self.identity_sdk_client.assign_project_role_to_user.assert_called_with(
273
+ **kwargs
203
274
  )
204
275
  self.assertIsNone(result)
205
276
 
206
- def test_role_add_group_system(self):
277
+ @mock.patch.object(role.LOG, 'warning')
278
+ def test_role_add_group_system(self, mock_warning):
207
279
  arglist = [
208
280
  '--group',
209
- identity_fakes.group_name,
281
+ self.group.name,
210
282
  '--system',
211
283
  'all',
212
- identity_fakes.role_name,
284
+ self.role.name,
213
285
  ]
214
286
  if self._is_inheritance_testcase():
215
287
  arglist.append('--inherited')
216
288
  verifylist = [
217
289
  ('user', None),
218
- ('group', identity_fakes.group_name),
290
+ ('group', self.group.name),
219
291
  ('system', 'all'),
220
292
  ('domain', None),
221
293
  ('project', None),
222
- ('role', identity_fakes.role_name),
294
+ ('role', self.role.name),
223
295
  ('inherited', self._is_inheritance_testcase()),
224
296
  ]
225
297
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -228,32 +300,36 @@ class TestRoleAdd(TestRole):
228
300
 
229
301
  # Set expected values
230
302
  kwargs = {
231
- 'group': identity_fakes.group_id,
232
303
  'system': 'all',
233
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
304
+ 'group': self.group.id,
305
+ 'role': self.role.id,
234
306
  }
235
- # RoleManager.grant(role, user=, group=, domain=, project=)
236
- self.roles_mock.grant.assert_called_with(
237
- identity_fakes.role_id, **kwargs
307
+ self.identity_sdk_client.assign_system_role_to_group.assert_called_with(
308
+ **kwargs
238
309
  )
239
310
  self.assertIsNone(result)
240
311
 
312
+ if self._is_inheritance_testcase():
313
+ mock_warning.assert_called_with(
314
+ "'--inherited' was given, which is not supported when adding a system role; this will be an error in a future release"
315
+ )
316
+
241
317
  def test_role_add_group_domain(self):
242
318
  arglist = [
243
319
  '--group',
244
- identity_fakes.group_name,
320
+ self.group.name,
245
321
  '--domain',
246
- identity_fakes.domain_name,
247
- identity_fakes.role_name,
322
+ self.domain.name,
323
+ self.role.name,
248
324
  ]
249
325
  if self._is_inheritance_testcase():
250
326
  arglist.append('--inherited')
251
327
  verifylist = [
252
328
  ('user', None),
253
- ('group', identity_fakes.group_name),
254
- ('domain', identity_fakes.domain_name),
329
+ ('group', self.group.name),
330
+ ('domain', self.domain.name),
255
331
  ('project', None),
256
- ('role', identity_fakes.role_name),
332
+ ('role', self.role.name),
257
333
  ('inherited', self._is_inheritance_testcase()),
258
334
  ]
259
335
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -262,32 +338,32 @@ class TestRoleAdd(TestRole):
262
338
 
263
339
  # Set expected values
264
340
  kwargs = {
265
- 'group': identity_fakes.group_id,
266
- 'domain': identity_fakes.domain_id,
267
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
341
+ 'domain': self.domain.id,
342
+ 'group': self.group.id,
343
+ 'role': self.role.id,
344
+ 'inherited': self._is_inheritance_testcase(),
268
345
  }
269
- # RoleManager.grant(role, user=, group=, domain=, project=)
270
- self.roles_mock.grant.assert_called_with(
271
- identity_fakes.role_id, **kwargs
346
+ self.identity_sdk_client.assign_domain_role_to_group.assert_called_with(
347
+ **kwargs
272
348
  )
273
349
  self.assertIsNone(result)
274
350
 
275
351
  def test_role_add_group_project(self):
276
352
  arglist = [
277
353
  '--group',
278
- identity_fakes.group_name,
354
+ self.group.name,
279
355
  '--project',
280
- identity_fakes.project_name,
281
- identity_fakes.role_name,
356
+ self.project.name,
357
+ self.role.name,
282
358
  ]
283
359
  if self._is_inheritance_testcase():
284
360
  arglist.append('--inherited')
285
361
  verifylist = [
286
362
  ('user', None),
287
- ('group', identity_fakes.group_name),
363
+ ('group', self.group.name),
288
364
  ('domain', None),
289
- ('project', identity_fakes.project_name),
290
- ('role', identity_fakes.role_name),
365
+ ('project', self.project.name),
366
+ ('role', self.role.name),
291
367
  ('inherited', self._is_inheritance_testcase()),
292
368
  ]
293
369
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -296,39 +372,36 @@ class TestRoleAdd(TestRole):
296
372
 
297
373
  # Set expected values
298
374
  kwargs = {
299
- 'group': identity_fakes.group_id,
300
- 'project': identity_fakes.project_id,
301
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
375
+ 'project': self.project.id,
376
+ 'group': self.group.id,
377
+ 'role': self.role.id,
378
+ 'inherited': self._is_inheritance_testcase(),
302
379
  }
303
- # RoleManager.grant(role, user=, group=, domain=, project=)
304
- self.roles_mock.grant.assert_called_with(
305
- identity_fakes.role_id, **kwargs
380
+ self.identity_sdk_client.assign_project_role_to_group.assert_called_with(
381
+ **kwargs
306
382
  )
307
383
  self.assertIsNone(result)
308
384
 
309
385
  def test_role_add_domain_role_on_user_project(self):
310
- self.roles_mock.get.return_value = fakes.FakeResource(
311
- None,
312
- copy.deepcopy(identity_fakes.ROLE_2),
313
- loaded=True,
314
- )
386
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
387
+
315
388
  arglist = [
316
389
  '--user',
317
- identity_fakes.user_name,
390
+ self.user.name,
318
391
  '--project',
319
- identity_fakes.project_name,
392
+ self.project.name,
320
393
  '--role-domain',
321
- identity_fakes.domain_name,
322
- identity_fakes.ROLE_2['name'],
394
+ self.domain.name,
395
+ self.role_with_domain.name,
323
396
  ]
324
397
  if self._is_inheritance_testcase():
325
398
  arglist.append('--inherited')
326
399
  verifylist = [
327
- ('user', identity_fakes.user_name),
400
+ ('user', self.user.name),
328
401
  ('group', None),
329
402
  ('domain', None),
330
- ('project', identity_fakes.project_name),
331
- ('role', identity_fakes.ROLE_2['name']),
403
+ ('project', self.project.name),
404
+ ('role', self.role_with_domain.name),
332
405
  ('inherited', self._is_inheritance_testcase()),
333
406
  ]
334
407
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -337,26 +410,26 @@ class TestRoleAdd(TestRole):
337
410
 
338
411
  # Set expected values
339
412
  kwargs = {
340
- 'user': identity_fakes.user_id,
341
- 'project': identity_fakes.project_id,
342
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
413
+ 'project': self.project.id,
414
+ 'user': self.user.id,
415
+ 'role': self.role_with_domain.id,
416
+ 'inherited': self._is_inheritance_testcase(),
343
417
  }
344
- # RoleManager.grant(role, user=, group=, domain=, project=)
345
- self.roles_mock.grant.assert_called_with(
346
- identity_fakes.ROLE_2['id'], **kwargs
418
+ self.identity_sdk_client.assign_project_role_to_user.assert_called_with(
419
+ **kwargs
347
420
  )
348
421
  self.assertIsNone(result)
349
422
 
350
423
  def test_role_add_with_error(self):
351
424
  arglist = [
352
- identity_fakes.role_name,
425
+ self.role.name,
353
426
  ]
354
427
  verifylist = [
355
428
  ('user', None),
356
429
  ('group', None),
357
430
  ('domain', None),
358
431
  ('project', None),
359
- ('role', identity_fakes.role_name),
432
+ ('role', self.role.name),
360
433
  ('inherited', False),
361
434
  ]
362
435
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -369,31 +442,47 @@ class TestRoleAddInherited(TestRoleAdd, TestRoleInherited):
369
442
  pass
370
443
 
371
444
 
372
- class TestRoleCreate(TestRole):
445
+ class TestRoleCreate(identity_fakes.TestIdentityv3):
446
+ collist = ('id', 'name', 'domain_id', 'description')
447
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
448
+
373
449
  def setUp(self):
374
450
  super().setUp()
375
451
 
376
- self.domains_mock.get.return_value = fakes.FakeResource(
377
- None,
378
- copy.deepcopy(identity_fakes.DOMAIN),
379
- loaded=True,
452
+ self.role = sdk_fakes.generate_fake_resource(
453
+ resource_type=_role.Role,
454
+ domain_id=None,
455
+ description=None,
380
456
  )
381
-
382
- self.roles_mock.create.return_value = fakes.FakeResource(
383
- None,
384
- copy.deepcopy(identity_fakes.ROLE),
385
- loaded=True,
457
+ self.role_with_domain = sdk_fakes.generate_fake_resource(
458
+ resource_type=_role.Role,
459
+ domain_id=self.domain.id,
460
+ description=None,
461
+ )
462
+ self.role_with_description = sdk_fakes.generate_fake_resource(
463
+ resource_type=_role.Role,
464
+ domain_id=None,
465
+ description='role description',
386
466
  )
467
+ self.role_with_immutable_option = sdk_fakes.generate_fake_resource(
468
+ resource_type=_role.Role,
469
+ domain_id=None,
470
+ description=None,
471
+ options={'immutable': True},
472
+ )
473
+ self.identity_sdk_client.find_domain.return_value = self.domain
387
474
 
388
475
  # Get the command object to test
389
476
  self.cmd = role.CreateRole(self.app, None)
390
477
 
391
478
  def test_role_create_no_options(self):
479
+ self.identity_sdk_client.create_role.return_value = self.role
480
+
392
481
  arglist = [
393
- identity_fakes.role_name,
482
+ self.role.name,
394
483
  ]
395
484
  verifylist = [
396
- ('name', identity_fakes.role_name),
485
+ ('name', self.role.name),
397
486
  ]
398
487
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
399
488
 
@@ -404,39 +493,34 @@ class TestRoleCreate(TestRole):
404
493
 
405
494
  # Set expected values
406
495
  kwargs = {
407
- 'domain': None,
408
- 'name': identity_fakes.role_name,
409
- 'description': None,
496
+ 'name': self.role.name,
410
497
  'options': {},
411
498
  }
412
499
 
413
- # RoleManager.create(name=, domain=)
414
- self.roles_mock.create.assert_called_with(**kwargs)
500
+ self.identity_sdk_client.create_role.assert_called_with(**kwargs)
415
501
 
416
- collist = ('domain', 'id', 'name')
417
- self.assertEqual(collist, columns)
502
+ self.assertEqual(self.collist, columns)
418
503
  datalist = (
504
+ self.role.id,
505
+ self.role.name,
506
+ None,
419
507
  None,
420
- identity_fakes.role_id,
421
- identity_fakes.role_name,
422
508
  )
423
509
  self.assertEqual(datalist, data)
424
510
 
425
511
  def test_role_create_with_domain(self):
426
- self.roles_mock.create.return_value = fakes.FakeResource(
427
- None,
428
- copy.deepcopy(identity_fakes.ROLE_2),
429
- loaded=True,
512
+ self.identity_sdk_client.create_role.return_value = (
513
+ self.role_with_domain
430
514
  )
431
515
 
432
516
  arglist = [
433
517
  '--domain',
434
- identity_fakes.domain_name,
435
- identity_fakes.ROLE_2['name'],
518
+ self.domain.name,
519
+ self.role_with_domain.name,
436
520
  ]
437
521
  verifylist = [
438
- ('domain', identity_fakes.domain_name),
439
- ('name', identity_fakes.ROLE_2['name']),
522
+ ('domain', self.domain.name),
523
+ ('name', self.role_with_domain.name),
440
524
  ]
441
525
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
442
526
 
@@ -447,38 +531,35 @@ class TestRoleCreate(TestRole):
447
531
 
448
532
  # Set expected values
449
533
  kwargs = {
450
- 'domain': identity_fakes.domain_id,
451
- 'name': identity_fakes.ROLE_2['name'],
452
- 'description': None,
534
+ 'domain_id': self.domain.id,
535
+ 'name': self.role_with_domain.name,
453
536
  'options': {},
454
537
  }
455
538
 
456
- # RoleManager.create(name=, domain=)
457
- self.roles_mock.create.assert_called_with(**kwargs)
539
+ self.identity_sdk_client.create_role.assert_called_with(**kwargs)
458
540
 
459
- collist = ('domain', 'id', 'name')
460
- self.assertEqual(collist, columns)
541
+ self.assertEqual(self.collist, columns)
461
542
  datalist = (
462
- identity_fakes.domain_id,
463
- identity_fakes.ROLE_2['id'],
464
- identity_fakes.ROLE_2['name'],
543
+ self.role_with_domain.id,
544
+ self.role_with_domain.name,
545
+ self.domain.id,
546
+ None,
465
547
  )
466
548
  self.assertEqual(datalist, data)
467
549
 
468
550
  def test_role_create_with_description(self):
469
- self.roles_mock.create.return_value = fakes.FakeResource(
470
- None,
471
- copy.deepcopy(identity_fakes.ROLE_2),
472
- loaded=True,
551
+ self.identity_sdk_client.create_role.return_value = (
552
+ self.role_with_description
473
553
  )
554
+
474
555
  arglist = [
475
556
  '--description',
476
- identity_fakes.role_description,
477
- identity_fakes.ROLE_2['name'],
557
+ self.role_with_description.description,
558
+ self.role_with_description.name,
478
559
  ]
479
560
  verifylist = [
480
- ('description', identity_fakes.role_description),
481
- ('name', identity_fakes.ROLE_2['name']),
561
+ ('description', self.role_with_description.description),
562
+ ('name', self.role_with_description.name),
482
563
  ]
483
564
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
484
565
 
@@ -489,37 +570,32 @@ class TestRoleCreate(TestRole):
489
570
 
490
571
  # Set expected values
491
572
  kwargs = {
492
- 'description': identity_fakes.role_description,
493
- 'name': identity_fakes.ROLE_2['name'],
494
- 'domain': None,
573
+ 'name': self.role_with_description.name,
574
+ 'description': self.role_with_description.description,
495
575
  'options': {},
496
576
  }
497
577
 
498
- # RoleManager.create(name=, domain=)
499
- self.roles_mock.create.assert_called_with(**kwargs)
578
+ self.identity_sdk_client.create_role.assert_called_with(**kwargs)
500
579
 
501
- collist = ('domain', 'id', 'name')
502
- self.assertEqual(collist, columns)
580
+ self.assertEqual(self.collist, columns)
503
581
  datalist = (
504
- 'd1',
505
- identity_fakes.ROLE_2['id'],
506
- identity_fakes.ROLE_2['name'],
582
+ self.role_with_description.id,
583
+ self.role_with_description.name,
584
+ None,
585
+ self.role_with_description.description,
507
586
  )
508
587
  self.assertEqual(datalist, data)
509
588
 
510
589
  def test_role_create_with_immutable_option(self):
511
- self.roles_mock.create.return_value = fakes.FakeResource(
512
- None,
513
- copy.deepcopy(identity_fakes.ROLE_2),
514
- loaded=True,
515
- )
590
+ self.identity_sdk_client.create_role.return_value = self.role
591
+
516
592
  arglist = [
517
593
  '--immutable',
518
- identity_fakes.ROLE_2['name'],
594
+ self.role.name,
519
595
  ]
520
596
  verifylist = [
521
597
  ('immutable', True),
522
- ('name', identity_fakes.ROLE_2['name']),
598
+ ('name', self.role.name),
523
599
  ]
524
600
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
525
601
 
@@ -531,36 +607,30 @@ class TestRoleCreate(TestRole):
531
607
  # Set expected values
532
608
  kwargs = {
533
609
  'options': {'immutable': True},
534
- 'description': None,
535
- 'name': identity_fakes.ROLE_2['name'],
536
- 'domain': None,
610
+ 'name': self.role.name,
537
611
  }
538
612
 
539
- # RoleManager.create(name=, domain=)
540
- self.roles_mock.create.assert_called_with(**kwargs)
613
+ self.identity_sdk_client.create_role.assert_called_with(**kwargs)
541
614
 
542
- collist = ('domain', 'id', 'name')
543
- self.assertEqual(collist, columns)
615
+ self.assertEqual(self.collist, columns)
544
616
  datalist = (
545
- 'd1',
546
- identity_fakes.ROLE_2['id'],
547
- identity_fakes.ROLE_2['name'],
617
+ self.role.id,
618
+ self.role.name,
619
+ None,
620
+ None,
548
621
  )
549
622
  self.assertEqual(datalist, data)
550
623
 
551
624
  def test_role_create_with_no_immutable_option(self):
552
- self.roles_mock.create.return_value = fakes.FakeResource(
553
- None,
554
- copy.deepcopy(identity_fakes.ROLE_2),
555
- loaded=True,
556
- )
625
+ self.identity_sdk_client.create_role.return_value = self.role
626
+
557
627
  arglist = [
558
628
  '--no-immutable',
559
- identity_fakes.ROLE_2['name'],
629
+ self.role.name,
560
630
  ]
561
631
  verifylist = [
562
632
  ('no_immutable', True),
563
- ('name', identity_fakes.ROLE_2['name']),
633
+ ('name', self.role.name),
564
634
  ]
565
635
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
566
636
 
@@ -572,88 +642,94 @@ class TestRoleCreate(TestRole):
572
642
  # Set expected values
573
643
  kwargs = {
574
644
  'options': {'immutable': False},
575
- 'description': None,
576
- 'name': identity_fakes.ROLE_2['name'],
577
- 'domain': None,
645
+ 'name': self.role.name,
578
646
  }
579
647
 
580
- # RoleManager.create(name=, domain=)
581
- self.roles_mock.create.assert_called_with(**kwargs)
648
+ self.identity_sdk_client.create_role.assert_called_with(**kwargs)
582
649
 
583
- collist = ('domain', 'id', 'name')
584
- self.assertEqual(collist, columns)
650
+ self.assertEqual(self.collist, columns)
585
651
  datalist = (
586
- 'd1',
587
- identity_fakes.ROLE_2['id'],
588
- identity_fakes.ROLE_2['name'],
652
+ self.role.id,
653
+ self.role.name,
654
+ None,
655
+ None,
589
656
  )
590
657
  self.assertEqual(datalist, data)
591
658
 
592
659
 
593
- class TestRoleDelete(TestRole):
660
+ class TestRoleDelete(identity_fakes.TestIdentityv3):
594
661
  def setUp(self):
595
662
  super().setUp()
596
663
 
597
- self.roles_mock.get.return_value = fakes.FakeResource(
598
- None,
599
- copy.deepcopy(identity_fakes.ROLE),
600
- loaded=True,
601
- )
602
- self.roles_mock.delete.return_value = None
603
-
604
664
  # Get the command object to test
605
665
  self.cmd = role.DeleteRole(self.app, None)
606
666
 
607
667
  def test_role_delete_no_options(self):
668
+ self.role = sdk_fakes.generate_fake_resource(
669
+ resource_type=_role.Role,
670
+ domain_id=None,
671
+ description=None,
672
+ )
673
+ self.identity_sdk_client.find_role.return_value = self.role
674
+ self.identity_sdk_client.delete_role.return_value = None
675
+
608
676
  arglist = [
609
- identity_fakes.role_name,
677
+ self.role.name,
610
678
  ]
611
679
  verifylist = [
612
- ('roles', [identity_fakes.role_name]),
680
+ ('roles', [self.role.name]),
613
681
  ]
614
682
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
615
683
 
616
684
  result = self.cmd.take_action(parsed_args)
617
685
 
618
- self.roles_mock.delete.assert_called_with(
619
- identity_fakes.role_id,
686
+ self.identity_sdk_client.delete_role.assert_called_with(
687
+ role=self.role.id,
688
+ ignore_missing=False,
620
689
  )
621
690
  self.assertIsNone(result)
622
691
 
623
692
  def test_role_delete_with_domain(self):
624
- self.roles_mock.get.return_value = fakes.FakeResource(
625
- None,
626
- copy.deepcopy(identity_fakes.ROLE_2),
627
- loaded=True,
693
+ self.domain = sdk_fakes.generate_fake_resource(_domain.Domain)
694
+ self.role_with_domain = sdk_fakes.generate_fake_resource(
695
+ resource_type=_role.Role,
696
+ domain_id=self.domain.id,
697
+ description=None,
628
698
  )
629
- self.roles_mock.delete.return_value = None
699
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
700
+ self.identity_sdk_client.delete_role.return_value = None
630
701
 
631
702
  arglist = [
632
703
  '--domain',
633
- identity_fakes.domain_name,
634
- identity_fakes.ROLE_2['name'],
704
+ self.domain.name,
705
+ self.role_with_domain.name,
635
706
  ]
636
707
  verifylist = [
637
- ('roles', [identity_fakes.ROLE_2['name']]),
638
- ('domain', identity_fakes.domain_name),
708
+ ('roles', [self.role_with_domain.name]),
709
+ ('domain', self.domain.name),
639
710
  ]
640
711
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
641
712
 
642
713
  result = self.cmd.take_action(parsed_args)
643
714
 
644
- self.roles_mock.delete.assert_called_with(
645
- identity_fakes.ROLE_2['id'],
715
+ self.identity_sdk_client.delete_role.assert_called_with(
716
+ role=self.role_with_domain.id,
717
+ ignore_missing=False,
646
718
  )
647
719
  self.assertIsNone(result)
648
720
 
649
- @mock.patch.object(utils, 'find_resource')
650
- def test_delete_multi_roles_with_exception(self, find_mock):
651
- find_mock.side_effect = [
652
- self.roles_mock.get.return_value,
653
- exceptions.CommandError,
721
+ def test_delete_multi_roles_with_exception(self):
722
+ self.role = sdk_fakes.generate_fake_resource(
723
+ resource_type=_role.Role,
724
+ domain_id=None,
725
+ description=None,
726
+ )
727
+ self.identity_sdk_client.find_role.side_effect = [
728
+ self.role,
729
+ sdk_exc.ResourceNotFound,
654
730
  ]
655
731
  arglist = [
656
- identity_fakes.role_name,
732
+ self.role.id,
657
733
  'unexist_role',
658
734
  ]
659
735
  verifylist = [
@@ -667,44 +743,62 @@ class TestRoleDelete(TestRole):
667
743
  except exceptions.CommandError as e:
668
744
  self.assertEqual('1 of 2 roles failed to delete.', str(e))
669
745
 
670
- find_mock.assert_any_call(
671
- self.roles_mock, identity_fakes.role_name, domain_id=None
672
- )
673
- find_mock.assert_any_call(
674
- self.roles_mock, 'unexist_role', domain_id=None
746
+ self.identity_sdk_client.find_role.assert_has_calls(
747
+ [
748
+ mock.call(
749
+ name_or_id=self.role.id,
750
+ ignore_missing=False,
751
+ domain_id=None,
752
+ ),
753
+ mock.call(
754
+ name_or_id='unexist_role',
755
+ ignore_missing=False,
756
+ domain_id=None,
757
+ ),
758
+ ]
675
759
  )
676
760
 
677
- self.assertEqual(2, find_mock.call_count)
678
- self.roles_mock.delete.assert_called_once_with(identity_fakes.role_id)
761
+ self.assertEqual(2, self.identity_sdk_client.find_role.call_count)
762
+ self.identity_sdk_client.delete_role.assert_called_once_with(
763
+ role=self.role.id, ignore_missing=False
764
+ )
679
765
 
680
766
 
681
- class TestRoleList(TestRole):
767
+ class TestRoleList(identity_fakes.TestIdentityv3):
682
768
  columns = (
683
769
  'ID',
684
770
  'Name',
685
771
  )
686
- datalist = (
687
- (
688
- identity_fakes.role_id,
689
- identity_fakes.role_name,
690
- ),
691
- )
772
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
692
773
 
693
774
  def setUp(self):
694
775
  super().setUp()
695
776
 
696
- self.roles_mock.list.return_value = [
697
- fakes.FakeResource(
698
- None,
699
- copy.deepcopy(identity_fakes.ROLE),
700
- loaded=True,
701
- ),
777
+ self.role = sdk_fakes.generate_fake_resource(
778
+ resource_type=_role.Role,
779
+ domain_id=None,
780
+ description=None,
781
+ )
782
+ self.role_with_domain = sdk_fakes.generate_fake_resource(
783
+ resource_type=_role.Role,
784
+ domain_id=self.domain.id,
785
+ description=None,
786
+ )
787
+ self.identity_sdk_client.roles.return_value = [
788
+ self.role,
789
+ self.role_with_domain,
702
790
  ]
791
+ self.identity_sdk_client.find_domain.return_value = self.domain
703
792
 
704
- self.domains_mock.get.return_value = fakes.FakeResource(
705
- None,
706
- copy.deepcopy(identity_fakes.DOMAIN),
707
- loaded=True,
793
+ self.datalist = (
794
+ (
795
+ self.role.id,
796
+ self.role.name,
797
+ ),
798
+ (
799
+ self.role_with_domain.id,
800
+ self.role_with_domain.name,
801
+ ),
708
802
  )
709
803
 
710
804
  # Get the command object to test
@@ -720,25 +814,19 @@ class TestRoleList(TestRole):
720
814
  # containing the data to be listed.
721
815
  columns, data = self.cmd.take_action(parsed_args)
722
816
 
723
- self.roles_mock.list.assert_called_with()
817
+ self.identity_sdk_client.roles.assert_called_with()
724
818
 
725
819
  self.assertEqual(self.columns, columns)
726
820
  self.assertEqual(self.datalist, tuple(data))
727
821
 
728
822
  def test_role_list_domain_role(self):
729
- self.roles_mock.list.return_value = [
730
- fakes.FakeResource(
731
- None,
732
- copy.deepcopy(identity_fakes.ROLE_2),
733
- loaded=True,
734
- ),
735
- ]
823
+ self.identity_sdk_client.roles.return_value = [self.role_with_domain]
736
824
  arglist = [
737
825
  '--domain',
738
- identity_fakes.domain_name,
826
+ self.domain.name,
739
827
  ]
740
828
  verifylist = [
741
- ('domain', identity_fakes.domain_name),
829
+ ('domain', self.domain.name),
742
830
  ]
743
831
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
744
832
 
@@ -748,56 +836,51 @@ class TestRoleList(TestRole):
748
836
  columns, data = self.cmd.take_action(parsed_args)
749
837
 
750
838
  # Set expected values
751
- kwargs = {'domain_id': identity_fakes.domain_id}
752
- # RoleManager.list(user=, group=, domain=, project=, **kwargs)
753
- self.roles_mock.list.assert_called_with(**kwargs)
839
+ kwargs = {'domain_id': self.domain.id}
840
+ self.identity_sdk_client.roles.assert_called_with(**kwargs)
754
841
 
755
842
  collist = ('ID', 'Name', 'Domain')
756
843
  self.assertEqual(collist, columns)
757
844
  datalist = (
758
845
  (
759
- identity_fakes.ROLE_2['id'],
760
- identity_fakes.ROLE_2['name'],
761
- identity_fakes.domain_name,
846
+ self.role_with_domain.id,
847
+ self.role_with_domain.name,
848
+ self.domain.name,
762
849
  ),
763
850
  )
764
851
  self.assertEqual(datalist, tuple(data))
765
852
 
766
853
 
767
- class TestRoleRemove(TestRole):
768
- def setUp(self):
769
- super().setUp()
854
+ class TestRoleRemove(identity_fakes.TestIdentityv3):
855
+ def _is_inheritance_testcase(self):
856
+ return False
770
857
 
771
- self.users_mock.get.return_value = fakes.FakeResource(
772
- None,
773
- copy.deepcopy(identity_fakes.USER),
774
- loaded=True,
775
- )
858
+ user = sdk_fakes.generate_fake_resource(_user.User)
859
+ group = sdk_fakes.generate_fake_resource(_group.Group)
860
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
861
+ project = sdk_fakes.generate_fake_resource(_project.Project)
862
+ system = sdk_fakes.generate_fake_resource(_system.System)
776
863
 
777
- self.groups_mock.get.return_value = fakes.FakeResource(
778
- None,
779
- copy.deepcopy(identity_fakes.GROUP),
780
- loaded=True,
781
- )
864
+ def setUp(self):
865
+ super().setUp()
782
866
 
783
- self.domains_mock.get.return_value = fakes.FakeResource(
784
- None,
785
- copy.deepcopy(identity_fakes.DOMAIN),
786
- loaded=True,
867
+ self.role = sdk_fakes.generate_fake_resource(
868
+ resource_type=_role.Role,
869
+ domain_id=None,
870
+ description=None,
787
871
  )
872
+ self.identity_sdk_client.find_role.return_value = self.role
873
+ self.identity_sdk_client.find_user.return_value = self.user
874
+ self.identity_sdk_client.find_group.return_value = self.group
875
+ self.identity_sdk_client.find_domain.return_value = self.domain
876
+ self.identity_sdk_client.find_project.return_value = self.project
788
877
 
789
- self.projects_mock.get.return_value = fakes.FakeResource(
790
- None,
791
- copy.deepcopy(identity_fakes.PROJECT),
792
- loaded=True,
793
- )
794
-
795
- self.roles_mock.get.return_value = fakes.FakeResource(
796
- None,
797
- copy.deepcopy(identity_fakes.ROLE),
798
- loaded=True,
799
- )
800
- self.roles_mock.revoke.return_value = None
878
+ self.identity_sdk_client.unassign_domain_role_from_user.return_value = None
879
+ self.identity_sdk_client.unassign_domain_role_from_group.return_value = None
880
+ self.identity_sdk_client.unassign_project_role_from_user.return_value = None
881
+ self.identity_sdk_client.unassign_project_role_from_group.return_value = None
882
+ self.identity_sdk_client.unassign_system_role_from_user.return_value = None
883
+ self.identity_sdk_client.unassign_system_role_from_group.return_value = None
801
884
 
802
885
  # Get the command object to test
803
886
  self.cmd = role.RemoveRole(self.app, None)
@@ -805,20 +888,20 @@ class TestRoleRemove(TestRole):
805
888
  def test_role_remove_user_system(self):
806
889
  arglist = [
807
890
  '--user',
808
- identity_fakes.user_name,
891
+ self.user.name,
809
892
  '--system',
810
893
  'all',
811
- identity_fakes.role_name,
894
+ self.role.name,
812
895
  ]
813
896
  if self._is_inheritance_testcase():
814
897
  arglist.append('--inherited')
815
898
  verifylist = [
816
- ('user', identity_fakes.user_name),
899
+ ('user', self.user.name),
817
900
  ('group', None),
818
901
  ('system', 'all'),
819
902
  ('domain', None),
820
903
  ('project', None),
821
- ('role', identity_fakes.role_name),
904
+ ('role', self.role.name),
822
905
  ('inherited', self._is_inheritance_testcase()),
823
906
  ]
824
907
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -827,40 +910,39 @@ class TestRoleRemove(TestRole):
827
910
 
828
911
  # Set expected values
829
912
  kwargs = {
830
- 'user': identity_fakes.user_id,
913
+ 'user': self.user.id,
831
914
  'system': 'all',
832
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
915
+ 'role': self.role.id,
833
916
  }
834
- # RoleManager.revoke(role, user=, group=, domain=, project=)
835
- self.roles_mock.revoke.assert_called_with(
836
- identity_fakes.role_id, **kwargs
917
+ self.identity_sdk_client.unassign_system_role_from_user.assert_called_with(
918
+ **kwargs
837
919
  )
838
920
  self.assertIsNone(result)
839
921
 
840
- @mock.patch.object(common, 'find_user')
841
- def test_role_remove_non_existent_user_system(self, find_mock):
842
- # Simulate the user not being in keystone, the client should gracefully
922
+ def test_role_remove_non_existent_user_system(self):
923
+ # Simulate the user not being in keystone; the client should gracefully
843
924
  # handle this exception and send the request to remove the role since
844
925
  # keystone supports removing role assignments with non-existent actors
845
926
  # (e.g., users or groups).
846
- find_mock.side_effect = exceptions.CommandError
847
-
927
+ self.identity_sdk_client.find_user.side_effect = [
928
+ sdk_exc.ResourceNotFound,
929
+ ]
848
930
  arglist = [
849
931
  '--user',
850
- identity_fakes.user_id,
932
+ self.user.id,
851
933
  '--system',
852
934
  'all',
853
- identity_fakes.role_name,
935
+ self.role.name,
854
936
  ]
855
937
  if self._is_inheritance_testcase():
856
938
  arglist.append('--inherited')
857
939
  verifylist = [
858
- ('user', identity_fakes.user_id),
940
+ ('user', self.user.id),
859
941
  ('group', None),
860
942
  ('system', 'all'),
861
943
  ('domain', None),
862
944
  ('project', None),
863
- ('role', identity_fakes.role_name),
945
+ ('role', self.role.name),
864
946
  ('inherited', self._is_inheritance_testcase()),
865
947
  ]
866
948
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -869,32 +951,31 @@ class TestRoleRemove(TestRole):
869
951
 
870
952
  # Set expected values
871
953
  kwargs = {
872
- 'user': identity_fakes.user_id,
954
+ 'user': self.user.id,
873
955
  'system': 'all',
874
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
956
+ 'role': self.role.id,
875
957
  }
876
- # RoleManager.revoke(role, user=, group=, domain=, project=)
877
- self.roles_mock.revoke.assert_called_with(
878
- identity_fakes.role_id, **kwargs
958
+ self.identity_sdk_client.unassign_system_role_from_user.assert_called_with(
959
+ **kwargs
879
960
  )
880
961
  self.assertIsNone(result)
881
962
 
882
963
  def test_role_remove_user_domain(self):
883
964
  arglist = [
884
965
  '--user',
885
- identity_fakes.user_name,
966
+ self.user.name,
886
967
  '--domain',
887
- identity_fakes.domain_name,
888
- identity_fakes.role_name,
968
+ self.domain.name,
969
+ self.role.name,
889
970
  ]
890
971
  if self._is_inheritance_testcase():
891
972
  arglist.append('--inherited')
892
973
  verifylist = [
893
- ('user', identity_fakes.user_name),
974
+ ('user', self.user.name),
894
975
  ('group', None),
895
- ('domain', identity_fakes.domain_name),
976
+ ('domain', self.domain.name),
896
977
  ('project', None),
897
- ('role', identity_fakes.role_name),
978
+ ('role', self.role.name),
898
979
  ('inherited', self._is_inheritance_testcase()),
899
980
  ]
900
981
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -903,39 +984,39 @@ class TestRoleRemove(TestRole):
903
984
 
904
985
  # Set expected values
905
986
  kwargs = {
906
- 'user': identity_fakes.user_id,
907
- 'domain': identity_fakes.domain_id,
908
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
987
+ 'user': self.user.id,
988
+ 'domain': self.domain.id,
989
+ 'role': self.role.id,
990
+ 'inherited': self._is_inheritance_testcase(),
909
991
  }
910
- # RoleManager.revoke(role, user=, group=, domain=, project=)
911
- self.roles_mock.revoke.assert_called_with(
912
- identity_fakes.role_id, **kwargs
992
+ self.identity_sdk_client.unassign_domain_role_from_user.assert_called_with(
993
+ **kwargs
913
994
  )
914
995
  self.assertIsNone(result)
915
996
 
916
- @mock.patch.object(common, 'find_user')
917
- def test_role_remove_non_existent_user_domain(self, find_mock):
997
+ def test_role_remove_non_existent_user_domain(self):
918
998
  # Simulate the user not being in keystone, the client the gracefully
919
999
  # handle this exception and send the request to remove the role since
920
1000
  # keystone will validate.
921
- find_mock.side_effect = exceptions.CommandError
922
-
1001
+ self.identity_sdk_client.find_user.side_effect = [
1002
+ sdk_exc.ResourceNotFound,
1003
+ ]
923
1004
  arglist = [
924
1005
  '--user',
925
- identity_fakes.user_id,
1006
+ self.user.id,
926
1007
  '--domain',
927
- identity_fakes.domain_name,
928
- identity_fakes.role_name,
1008
+ self.domain.name,
1009
+ self.role.name,
929
1010
  ]
930
1011
  if self._is_inheritance_testcase():
931
1012
  arglist.append('--inherited')
932
1013
  verifylist = [
933
- ('user', identity_fakes.user_id),
1014
+ ('user', self.user.id),
934
1015
  ('group', None),
935
1016
  ('system', None),
936
- ('domain', identity_fakes.domain_name),
1017
+ ('domain', self.domain.name),
937
1018
  ('project', None),
938
- ('role', identity_fakes.role_name),
1019
+ ('role', self.role.name),
939
1020
  ('inherited', self._is_inheritance_testcase()),
940
1021
  ]
941
1022
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -944,32 +1025,32 @@ class TestRoleRemove(TestRole):
944
1025
 
945
1026
  # Set expected values
946
1027
  kwargs = {
947
- 'user': identity_fakes.user_id,
948
- 'domain': identity_fakes.domain_id,
949
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1028
+ 'user': self.user.id,
1029
+ 'domain': self.domain.id,
1030
+ 'role': self.role.id,
1031
+ 'inherited': self._is_inheritance_testcase(),
950
1032
  }
951
- # RoleManager.revoke(role, user=, group=, domain=, project=)
952
- self.roles_mock.revoke.assert_called_with(
953
- identity_fakes.role_id, **kwargs
1033
+ self.identity_sdk_client.unassign_domain_role_from_user.assert_called_with(
1034
+ **kwargs
954
1035
  )
955
1036
  self.assertIsNone(result)
956
1037
 
957
1038
  def test_role_remove_user_project(self):
958
1039
  arglist = [
959
1040
  '--user',
960
- identity_fakes.user_name,
1041
+ self.user.name,
961
1042
  '--project',
962
- identity_fakes.project_name,
963
- identity_fakes.role_name,
1043
+ self.project.name,
1044
+ self.role.name,
964
1045
  ]
965
1046
  if self._is_inheritance_testcase():
966
1047
  arglist.append('--inherited')
967
1048
  verifylist = [
968
- ('user', identity_fakes.user_name),
1049
+ ('user', self.user.name),
969
1050
  ('group', None),
970
1051
  ('domain', None),
971
- ('project', identity_fakes.project_name),
972
- ('role', identity_fakes.role_name),
1052
+ ('project', self.project.name),
1053
+ ('role', self.role.name),
973
1054
  ('inherited', self._is_inheritance_testcase()),
974
1055
  ]
975
1056
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -978,39 +1059,40 @@ class TestRoleRemove(TestRole):
978
1059
 
979
1060
  # Set expected values
980
1061
  kwargs = {
981
- 'user': identity_fakes.user_id,
982
- 'project': identity_fakes.project_id,
983
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1062
+ 'user': self.user.id,
1063
+ 'project': self.project.id,
1064
+ 'role': self.role.id,
1065
+ 'inherited': self._is_inheritance_testcase(),
984
1066
  }
985
- # RoleManager.revoke(role, user=, group=, domain=, project=)
986
- self.roles_mock.revoke.assert_called_with(
987
- identity_fakes.role_id, **kwargs
1067
+ self.identity_sdk_client.unassign_project_role_from_user.assert_called_with(
1068
+ **kwargs
988
1069
  )
989
1070
  self.assertIsNone(result)
990
1071
 
991
- @mock.patch.object(common, 'find_user')
992
- def test_role_remove_non_existent_user_project(self, find_mock):
1072
+ def test_role_remove_non_existent_user_project(self):
993
1073
  # Simulate the user not being in keystone, the client the gracefully
994
1074
  # handle this exception and send the request to remove the role since
995
1075
  # keystone will validate.
996
- find_mock.side_effect = exceptions.CommandError
1076
+ self.identity_sdk_client.find_user.side_effect = [
1077
+ sdk_exc.ResourceNotFound,
1078
+ ]
997
1079
 
998
1080
  arglist = [
999
1081
  '--user',
1000
- identity_fakes.user_id,
1082
+ self.user.id,
1001
1083
  '--project',
1002
- identity_fakes.project_name,
1003
- identity_fakes.role_name,
1084
+ self.project.name,
1085
+ self.role.name,
1004
1086
  ]
1005
1087
  if self._is_inheritance_testcase():
1006
1088
  arglist.append('--inherited')
1007
1089
  verifylist = [
1008
- ('user', identity_fakes.user_id),
1090
+ ('user', self.user.id),
1009
1091
  ('group', None),
1010
1092
  ('system', None),
1011
1093
  ('domain', None),
1012
- ('project', identity_fakes.project_name),
1013
- ('role', identity_fakes.role_name),
1094
+ ('project', self.project.name),
1095
+ ('role', self.role.name),
1014
1096
  ('inherited', self._is_inheritance_testcase()),
1015
1097
  ]
1016
1098
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1019,34 +1101,34 @@ class TestRoleRemove(TestRole):
1019
1101
 
1020
1102
  # Set expected values
1021
1103
  kwargs = {
1022
- 'user': identity_fakes.user_id,
1023
- 'project': identity_fakes.project_id,
1024
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1104
+ 'user': self.user.id,
1105
+ 'project': self.project.id,
1106
+ 'role': self.role.id,
1107
+ 'inherited': self._is_inheritance_testcase(),
1025
1108
  }
1026
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1027
- self.roles_mock.revoke.assert_called_with(
1028
- identity_fakes.role_id, **kwargs
1109
+ self.identity_sdk_client.unassign_project_role_from_user.assert_called_with(
1110
+ **kwargs
1029
1111
  )
1030
1112
  self.assertIsNone(result)
1031
1113
 
1032
1114
  def test_role_remove_group_system(self):
1033
1115
  arglist = [
1034
1116
  '--group',
1035
- identity_fakes.group_name,
1117
+ self.group.name,
1036
1118
  '--system',
1037
1119
  'all',
1038
- identity_fakes.role_name,
1120
+ self.role.name,
1039
1121
  ]
1040
1122
  if self._is_inheritance_testcase():
1041
1123
  arglist.append('--inherited')
1042
1124
  verifylist = [
1043
1125
  ('user', None),
1044
- ('group', identity_fakes.group_name),
1126
+ ('group', self.group.name),
1045
1127
  ('system', 'all'),
1046
1128
  ('domain', None),
1047
1129
  ('project', None),
1048
- ('role', identity_fakes.role_name),
1049
- ('role', identity_fakes.role_name),
1130
+ ('role', self.role.name),
1131
+ ('role', self.role.name),
1050
1132
  ('inherited', self._is_inheritance_testcase()),
1051
1133
  ]
1052
1134
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1055,39 +1137,39 @@ class TestRoleRemove(TestRole):
1055
1137
 
1056
1138
  # Set expected values
1057
1139
  kwargs = {
1058
- 'group': identity_fakes.group_id,
1140
+ 'group': self.group.id,
1059
1141
  'system': 'all',
1060
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1142
+ 'role': self.role.id,
1061
1143
  }
1062
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1063
- self.roles_mock.revoke.assert_called_with(
1064
- identity_fakes.role_id, **kwargs
1144
+ self.identity_sdk_client.unassign_system_role_from_group.assert_called_with(
1145
+ **kwargs
1065
1146
  )
1066
1147
  self.assertIsNone(result)
1067
1148
 
1068
- @mock.patch.object(common, 'find_group')
1069
- def test_role_remove_non_existent_group_system(self, find_mock):
1149
+ def test_role_remove_non_existent_group_system(self):
1070
1150
  # Simulate the user not being in keystone, the client the gracefully
1071
1151
  # handle this exception and send the request to remove the role since
1072
1152
  # keystone will validate.
1073
- find_mock.side_effect = exceptions.CommandError
1153
+ self.identity_sdk_client.find_group.side_effect = [
1154
+ sdk_exc.ResourceNotFound,
1155
+ ]
1074
1156
 
1075
1157
  arglist = [
1076
1158
  '--group',
1077
- identity_fakes.group_id,
1159
+ self.group.id,
1078
1160
  '--system',
1079
1161
  'all',
1080
- identity_fakes.role_name,
1162
+ self.role.name,
1081
1163
  ]
1082
1164
  if self._is_inheritance_testcase():
1083
1165
  arglist.append('--inherited')
1084
1166
  verifylist = [
1085
1167
  ('user', None),
1086
- ('group', identity_fakes.group_id),
1168
+ ('group', self.group.id),
1087
1169
  ('system', 'all'),
1088
1170
  ('domain', None),
1089
1171
  ('project', None),
1090
- ('role', identity_fakes.role_name),
1172
+ ('role', self.role.name),
1091
1173
  ('inherited', self._is_inheritance_testcase()),
1092
1174
  ]
1093
1175
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1096,33 +1178,32 @@ class TestRoleRemove(TestRole):
1096
1178
 
1097
1179
  # Set expected values
1098
1180
  kwargs = {
1099
- 'group': identity_fakes.group_id,
1181
+ 'group': self.group.id,
1100
1182
  'system': 'all',
1101
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1183
+ 'role': self.role.id,
1102
1184
  }
1103
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1104
- self.roles_mock.revoke.assert_called_with(
1105
- identity_fakes.role_id, **kwargs
1185
+ self.identity_sdk_client.unassign_system_role_from_group.assert_called_with(
1186
+ **kwargs
1106
1187
  )
1107
1188
  self.assertIsNone(result)
1108
1189
 
1109
1190
  def test_role_remove_group_domain(self):
1110
1191
  arglist = [
1111
1192
  '--group',
1112
- identity_fakes.group_name,
1193
+ self.group.name,
1113
1194
  '--domain',
1114
- identity_fakes.domain_name,
1115
- identity_fakes.role_name,
1195
+ self.domain.name,
1196
+ self.role.name,
1116
1197
  ]
1117
1198
  if self._is_inheritance_testcase():
1118
1199
  arglist.append('--inherited')
1119
1200
  verifylist = [
1120
1201
  ('user', None),
1121
- ('group', identity_fakes.group_name),
1122
- ('domain', identity_fakes.domain_name),
1202
+ ('group', self.group.name),
1203
+ ('domain', self.domain.name),
1123
1204
  ('project', None),
1124
- ('role', identity_fakes.role_name),
1125
- ('role', identity_fakes.role_name),
1205
+ ('role', self.role.name),
1206
+ ('role', self.role.name),
1126
1207
  ('inherited', self._is_inheritance_testcase()),
1127
1208
  ]
1128
1209
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1131,39 +1212,40 @@ class TestRoleRemove(TestRole):
1131
1212
 
1132
1213
  # Set expected values
1133
1214
  kwargs = {
1134
- 'group': identity_fakes.group_id,
1135
- 'domain': identity_fakes.domain_id,
1136
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1215
+ 'group': self.group.id,
1216
+ 'domain': self.domain.id,
1217
+ 'role': self.role.id,
1218
+ 'inherited': self._is_inheritance_testcase(),
1137
1219
  }
1138
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1139
- self.roles_mock.revoke.assert_called_with(
1140
- identity_fakes.role_id, **kwargs
1220
+ self.identity_sdk_client.unassign_domain_role_from_group.assert_called_with(
1221
+ **kwargs
1141
1222
  )
1142
1223
  self.assertIsNone(result)
1143
1224
 
1144
- @mock.patch.object(common, 'find_group')
1145
- def test_role_remove_non_existent_group_domain(self, find_mock):
1225
+ def test_role_remove_non_existent_group_domain(self):
1146
1226
  # Simulate the user not being in keystone, the client the gracefully
1147
1227
  # handle this exception and send the request to remove the role since
1148
1228
  # keystone will validate.
1149
- find_mock.side_effect = exceptions.CommandError
1229
+ self.identity_sdk_client.find_group.side_effect = [
1230
+ sdk_exc.ResourceNotFound,
1231
+ ]
1150
1232
 
1151
1233
  arglist = [
1152
1234
  '--group',
1153
- identity_fakes.group_id,
1235
+ self.group.id,
1154
1236
  '--domain',
1155
- identity_fakes.domain_name,
1156
- identity_fakes.role_name,
1237
+ self.domain.name,
1238
+ self.role.name,
1157
1239
  ]
1158
1240
  if self._is_inheritance_testcase():
1159
1241
  arglist.append('--inherited')
1160
1242
  verifylist = [
1161
1243
  ('user', None),
1162
- ('group', identity_fakes.group_id),
1244
+ ('group', self.group.id),
1163
1245
  ('system', None),
1164
- ('domain', identity_fakes.domain_name),
1246
+ ('domain', self.domain.name),
1165
1247
  ('project', None),
1166
- ('role', identity_fakes.role_name),
1248
+ ('role', self.role.name),
1167
1249
  ('inherited', self._is_inheritance_testcase()),
1168
1250
  ]
1169
1251
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1172,32 +1254,32 @@ class TestRoleRemove(TestRole):
1172
1254
 
1173
1255
  # Set expected values
1174
1256
  kwargs = {
1175
- 'group': identity_fakes.group_id,
1176
- 'domain': identity_fakes.domain_id,
1177
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1257
+ 'group': self.group.id,
1258
+ 'domain': self.domain.id,
1259
+ 'role': self.role.id,
1260
+ 'inherited': self._is_inheritance_testcase(),
1178
1261
  }
1179
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1180
- self.roles_mock.revoke.assert_called_with(
1181
- identity_fakes.role_id, **kwargs
1262
+ self.identity_sdk_client.unassign_domain_role_from_group.assert_called_with(
1263
+ **kwargs
1182
1264
  )
1183
1265
  self.assertIsNone(result)
1184
1266
 
1185
1267
  def test_role_remove_group_project(self):
1186
1268
  arglist = [
1187
1269
  '--group',
1188
- identity_fakes.group_name,
1270
+ self.group.name,
1189
1271
  '--project',
1190
- identity_fakes.project_name,
1191
- identity_fakes.role_name,
1272
+ self.project.name,
1273
+ self.role.name,
1192
1274
  ]
1193
1275
  if self._is_inheritance_testcase():
1194
1276
  arglist.append('--inherited')
1195
1277
  verifylist = [
1196
1278
  ('user', None),
1197
- ('group', identity_fakes.group_name),
1279
+ ('group', self.group.name),
1198
1280
  ('domain', None),
1199
- ('project', identity_fakes.project_name),
1200
- ('role', identity_fakes.role_name),
1281
+ ('project', self.project.name),
1282
+ ('role', self.role.name),
1201
1283
  ('inherited', self._is_inheritance_testcase()),
1202
1284
  ]
1203
1285
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1206,39 +1288,39 @@ class TestRoleRemove(TestRole):
1206
1288
 
1207
1289
  # Set expected values
1208
1290
  kwargs = {
1209
- 'group': identity_fakes.group_id,
1210
- 'project': identity_fakes.project_id,
1211
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1291
+ 'group': self.group.id,
1292
+ 'project': self.project.id,
1293
+ 'role': self.role.id,
1294
+ 'inherited': self._is_inheritance_testcase(),
1212
1295
  }
1213
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1214
- self.roles_mock.revoke.assert_called_with(
1215
- identity_fakes.role_id, **kwargs
1296
+ self.identity_sdk_client.unassign_project_role_from_group.assert_called_with(
1297
+ **kwargs
1216
1298
  )
1217
1299
  self.assertIsNone(result)
1218
1300
 
1219
- @mock.patch.object(common, 'find_group')
1220
- def test_role_remove_non_existent_group_project(self, find_mock):
1301
+ def test_role_remove_non_existent_group_project(self):
1221
1302
  # Simulate the user not being in keystone, the client the gracefully
1222
1303
  # handle this exception and send the request to remove the role since
1223
1304
  # keystone will validate.
1224
- find_mock.side_effect = exceptions.CommandError
1225
-
1305
+ self.identity_sdk_client.find_group.side_effect = [
1306
+ sdk_exc.ResourceNotFound,
1307
+ ]
1226
1308
  arglist = [
1227
1309
  '--group',
1228
- identity_fakes.group_id,
1310
+ self.group.id,
1229
1311
  '--project',
1230
- identity_fakes.project_name,
1231
- identity_fakes.role_name,
1312
+ self.project.name,
1313
+ self.role.name,
1232
1314
  ]
1233
1315
  if self._is_inheritance_testcase():
1234
1316
  arglist.append('--inherited')
1235
1317
  verifylist = [
1236
1318
  ('user', None),
1237
- ('group', identity_fakes.group_id),
1319
+ ('group', self.group.id),
1238
1320
  ('system', None),
1239
1321
  ('domain', None),
1240
- ('project', identity_fakes.project_name),
1241
- ('role', identity_fakes.role_name),
1322
+ ('project', self.project.name),
1323
+ ('role', self.role.name),
1242
1324
  ('inherited', self._is_inheritance_testcase()),
1243
1325
  ]
1244
1326
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1247,37 +1329,38 @@ class TestRoleRemove(TestRole):
1247
1329
 
1248
1330
  # Set expected values
1249
1331
  kwargs = {
1250
- 'group': identity_fakes.group_id,
1251
- 'project': identity_fakes.project_id,
1252
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1332
+ 'group': self.group.id,
1333
+ 'project': self.project.id,
1334
+ 'role': self.role.id,
1335
+ 'inherited': self._is_inheritance_testcase(),
1253
1336
  }
1254
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1255
- self.roles_mock.revoke.assert_called_with(
1256
- identity_fakes.role_id, **kwargs
1337
+ self.identity_sdk_client.unassign_project_role_from_group.assert_called_with(
1338
+ **kwargs
1257
1339
  )
1258
1340
  self.assertIsNone(result)
1259
1341
 
1260
1342
  def test_role_remove_domain_role_on_group_domain(self):
1261
- self.roles_mock.get.return_value = fakes.FakeResource(
1262
- None,
1263
- copy.deepcopy(identity_fakes.ROLE_2),
1264
- loaded=True,
1343
+ self.role_with_domain = sdk_fakes.generate_fake_resource(
1344
+ resource_type=_role.Role,
1345
+ domain_id=self.domain.id,
1346
+ description=None,
1265
1347
  )
1348
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
1266
1349
  arglist = [
1267
1350
  '--group',
1268
- identity_fakes.group_name,
1351
+ self.group.name,
1269
1352
  '--domain',
1270
- identity_fakes.domain_name,
1271
- identity_fakes.ROLE_2['name'],
1353
+ self.domain.name,
1354
+ self.role_with_domain.name,
1272
1355
  ]
1273
1356
  if self._is_inheritance_testcase():
1274
1357
  arglist.append('--inherited')
1275
1358
  verifylist = [
1276
1359
  ('user', None),
1277
- ('group', identity_fakes.group_name),
1278
- ('domain', identity_fakes.domain_name),
1360
+ ('group', self.group.name),
1361
+ ('domain', self.domain.name),
1279
1362
  ('project', None),
1280
- ('role', identity_fakes.ROLE_2['name']),
1363
+ ('role', self.role_with_domain.name),
1281
1364
  ('inherited', self._is_inheritance_testcase()),
1282
1365
  ]
1283
1366
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1286,26 +1369,26 @@ class TestRoleRemove(TestRole):
1286
1369
 
1287
1370
  # Set expected values
1288
1371
  kwargs = {
1289
- 'group': identity_fakes.group_id,
1290
- 'domain': identity_fakes.domain_id,
1291
- 'os_inherit_extension_inherited': self._is_inheritance_testcase(),
1372
+ 'group': self.group.id,
1373
+ 'domain': self.domain.id,
1374
+ 'role': self.role_with_domain.id,
1375
+ 'inherited': self._is_inheritance_testcase(),
1292
1376
  }
1293
- # RoleManager.revoke(role, user=, group=, domain=, project=)
1294
- self.roles_mock.revoke.assert_called_with(
1295
- identity_fakes.ROLE_2['id'], **kwargs
1377
+ self.identity_sdk_client.unassign_domain_role_from_group.assert_called_with(
1378
+ **kwargs
1296
1379
  )
1297
1380
  self.assertIsNone(result)
1298
1381
 
1299
1382
  def test_role_remove_with_error(self):
1300
1383
  arglist = [
1301
- identity_fakes.role_name,
1384
+ self.role.name,
1302
1385
  ]
1303
1386
  verifylist = [
1304
1387
  ('user', None),
1305
1388
  ('group', None),
1306
1389
  ('domain', None),
1307
1390
  ('project', None),
1308
- ('role', identity_fakes.role_name),
1391
+ ('role', self.role.name),
1309
1392
  ('inherited', False),
1310
1393
  ]
1311
1394
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1314,29 +1397,37 @@ class TestRoleRemove(TestRole):
1314
1397
  )
1315
1398
 
1316
1399
 
1317
- class TestRoleSet(TestRole):
1400
+ class TestRoleSet(identity_fakes.TestIdentityv3):
1318
1401
  def setUp(self):
1319
1402
  super().setUp()
1320
1403
 
1321
- self.roles_mock.get.return_value = fakes.FakeResource(
1322
- None,
1323
- copy.deepcopy(identity_fakes.ROLE),
1324
- loaded=True,
1404
+ self.domain = sdk_fakes.generate_fake_resource(_domain.Domain)
1405
+ self.role_with_domain = sdk_fakes.generate_fake_resource(
1406
+ resource_type=_role.Role,
1407
+ domain_id=self.domain.id,
1408
+ description=None,
1325
1409
  )
1326
- self.roles_mock.update.return_value = None
1327
1410
 
1328
1411
  # Get the command object to test
1329
1412
  self.cmd = role.SetRole(self.app, None)
1330
1413
 
1331
1414
  def test_role_set_no_options(self):
1415
+ self.role = sdk_fakes.generate_fake_resource(
1416
+ resource_type=_role.Role,
1417
+ domain_id=None,
1418
+ description=None,
1419
+ )
1420
+ self.identity_sdk_client.find_role.return_value = self.role
1421
+ self.identity_sdk_client.update_role.return_value = self.role
1422
+
1332
1423
  arglist = [
1333
1424
  '--name',
1334
1425
  'over',
1335
- identity_fakes.role_name,
1426
+ self.role.name,
1336
1427
  ]
1337
1428
  verifylist = [
1338
1429
  ('name', 'over'),
1339
- ('role', identity_fakes.role_name),
1430
+ ('role', self.role.name),
1340
1431
  ]
1341
1432
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1342
1433
 
@@ -1345,32 +1436,32 @@ class TestRoleSet(TestRole):
1345
1436
  # Set expected values
1346
1437
  kwargs = {
1347
1438
  'name': 'over',
1348
- 'description': None,
1439
+ 'role': self.role.id,
1349
1440
  'options': {},
1350
1441
  }
1351
- # RoleManager.update(role, name=)
1352
- self.roles_mock.update.assert_called_with(
1353
- identity_fakes.role_id, **kwargs
1354
- )
1442
+ self.identity_sdk_client.update_role.assert_called_with(**kwargs)
1355
1443
  self.assertIsNone(result)
1356
1444
 
1357
1445
  def test_role_set_domain_role(self):
1358
- self.roles_mock.get.return_value = fakes.FakeResource(
1359
- None,
1360
- copy.deepcopy(identity_fakes.ROLE_2),
1361
- loaded=True,
1446
+ self.domain2 = sdk_fakes.generate_fake_resource(_domain.Domain)
1447
+ self.identity_sdk_client.find_domain.return_value = self.domain2
1448
+
1449
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
1450
+ self.identity_sdk_client.update_role.return_value = (
1451
+ self.role_with_domain
1362
1452
  )
1453
+
1363
1454
  arglist = [
1364
1455
  '--name',
1365
1456
  'over',
1366
1457
  '--domain',
1367
- identity_fakes.domain_name,
1368
- identity_fakes.ROLE_2['name'],
1458
+ self.domain2.name,
1459
+ self.role_with_domain.name,
1369
1460
  ]
1370
1461
  verifylist = [
1371
1462
  ('name', 'over'),
1372
- ('domain', identity_fakes.domain_name),
1373
- ('role', identity_fakes.ROLE_2['name']),
1463
+ ('domain', self.domain2.name),
1464
+ ('role', self.role_with_domain.name),
1374
1465
  ]
1375
1466
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1376
1467
 
@@ -1379,32 +1470,27 @@ class TestRoleSet(TestRole):
1379
1470
  # Set expected values
1380
1471
  kwargs = {
1381
1472
  'name': 'over',
1382
- 'description': None,
1473
+ 'role': self.role_with_domain.id,
1474
+ 'domain_id': self.domain2.id,
1383
1475
  'options': {},
1384
1476
  }
1385
- # RoleManager.update(role, name=)
1386
- self.roles_mock.update.assert_called_with(
1387
- identity_fakes.ROLE_2['id'], **kwargs
1388
- )
1477
+ self.identity_sdk_client.update_role.assert_called_with(**kwargs)
1389
1478
  self.assertIsNone(result)
1390
1479
 
1391
1480
  def test_role_set_description(self):
1392
- self.roles_mock.get.return_value = fakes.FakeResource(
1393
- None,
1394
- copy.deepcopy(identity_fakes.ROLE_2),
1395
- loaded=True,
1396
- )
1481
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
1482
+
1397
1483
  arglist = [
1398
1484
  '--name',
1399
1485
  'over',
1400
1486
  '--description',
1401
- identity_fakes.role_description,
1402
- identity_fakes.ROLE_2['name'],
1487
+ 'role description',
1488
+ self.role_with_domain.name,
1403
1489
  ]
1404
1490
  verifylist = [
1405
1491
  ('name', 'over'),
1406
- ('description', identity_fakes.role_description),
1407
- ('role', identity_fakes.ROLE_2['name']),
1492
+ ('description', 'role description'),
1493
+ ('role', self.role_with_domain.name),
1408
1494
  ]
1409
1495
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1410
1496
 
@@ -1413,31 +1499,26 @@ class TestRoleSet(TestRole):
1413
1499
  # Set expected values
1414
1500
  kwargs = {
1415
1501
  'name': 'over',
1416
- 'description': identity_fakes.role_description,
1502
+ 'description': 'role description',
1503
+ 'role': self.role_with_domain.id,
1417
1504
  'options': {},
1418
1505
  }
1419
- # RoleManager.update(role, name=)
1420
- self.roles_mock.update.assert_called_with(
1421
- identity_fakes.ROLE_2['id'], **kwargs
1422
- )
1506
+ self.identity_sdk_client.update_role.assert_called_with(**kwargs)
1423
1507
  self.assertIsNone(result)
1424
1508
 
1425
1509
  def test_role_set_with_immutable(self):
1426
- self.roles_mock.get.return_value = fakes.FakeResource(
1427
- None,
1428
- copy.deepcopy(identity_fakes.ROLE_2),
1429
- loaded=True,
1430
- )
1510
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
1511
+
1431
1512
  arglist = [
1432
1513
  '--name',
1433
1514
  'over',
1434
1515
  '--immutable',
1435
- identity_fakes.ROLE_2['name'],
1516
+ self.role_with_domain.name,
1436
1517
  ]
1437
1518
  verifylist = [
1438
1519
  ('name', 'over'),
1439
1520
  ('immutable', True),
1440
- ('role', identity_fakes.ROLE_2['name']),
1521
+ ('role', self.role_with_domain.name),
1441
1522
  ]
1442
1523
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1443
1524
 
@@ -1446,31 +1527,25 @@ class TestRoleSet(TestRole):
1446
1527
  # Set expected values
1447
1528
  kwargs = {
1448
1529
  'name': 'over',
1449
- 'description': None,
1530
+ 'role': self.role_with_domain.id,
1450
1531
  'options': {'immutable': True},
1451
1532
  }
1452
- # RoleManager.update(role, name=)
1453
- self.roles_mock.update.assert_called_with(
1454
- identity_fakes.ROLE_2['id'], **kwargs
1455
- )
1533
+ self.identity_sdk_client.update_role.assert_called_with(**kwargs)
1456
1534
  self.assertIsNone(result)
1457
1535
 
1458
1536
  def test_role_set_with_no_immutable(self):
1459
- self.roles_mock.get.return_value = fakes.FakeResource(
1460
- None,
1461
- copy.deepcopy(identity_fakes.ROLE_2),
1462
- loaded=True,
1463
- )
1537
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
1538
+
1464
1539
  arglist = [
1465
1540
  '--name',
1466
1541
  'over',
1467
1542
  '--no-immutable',
1468
- identity_fakes.ROLE_2['name'],
1543
+ self.role_with_domain.name,
1469
1544
  ]
1470
1545
  verifylist = [
1471
1546
  ('name', 'over'),
1472
1547
  ('no_immutable', True),
1473
- ('role', identity_fakes.ROLE_2['name']),
1548
+ ('role', self.role_with_domain.name),
1474
1549
  ]
1475
1550
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1476
1551
 
@@ -1479,35 +1554,37 @@ class TestRoleSet(TestRole):
1479
1554
  # Set expected values
1480
1555
  kwargs = {
1481
1556
  'name': 'over',
1482
- 'description': None,
1557
+ 'role': self.role_with_domain.id,
1483
1558
  'options': {'immutable': False},
1484
1559
  }
1485
- # RoleManager.update(role, name=)
1486
- self.roles_mock.update.assert_called_with(
1487
- identity_fakes.ROLE_2['id'], **kwargs
1488
- )
1560
+ self.identity_sdk_client.update_role.assert_called_with(**kwargs)
1489
1561
  self.assertIsNone(result)
1490
1562
 
1491
1563
 
1492
- class TestRoleShow(TestRole):
1564
+ class TestRoleShow(identity_fakes.TestIdentityv3):
1565
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
1566
+
1493
1567
  def setUp(self):
1494
1568
  super().setUp()
1495
1569
 
1496
- self.roles_mock.get.return_value = fakes.FakeResource(
1497
- None,
1498
- copy.deepcopy(identity_fakes.ROLE),
1499
- loaded=True,
1500
- )
1570
+ self.identity_sdk_client.find_domain.return_value = self.domain
1501
1571
 
1502
1572
  # Get the command object to test
1503
1573
  self.cmd = role.ShowRole(self.app, None)
1504
1574
 
1505
1575
  def test_role_show(self):
1576
+ self.role = sdk_fakes.generate_fake_resource(
1577
+ resource_type=_role.Role,
1578
+ domain_id=None,
1579
+ description=None,
1580
+ )
1581
+ self.identity_sdk_client.find_role.return_value = self.role
1582
+
1506
1583
  arglist = [
1507
- identity_fakes.role_name,
1584
+ self.role.name,
1508
1585
  ]
1509
1586
  verifylist = [
1510
- ('role', identity_fakes.role_name),
1587
+ ('role', self.role.name),
1511
1588
  ]
1512
1589
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1513
1590
 
@@ -1516,34 +1593,38 @@ class TestRoleShow(TestRole):
1516
1593
  # data to be shown.
1517
1594
  columns, data = self.cmd.take_action(parsed_args)
1518
1595
 
1519
- # RoleManager.get(role)
1520
- self.roles_mock.get.assert_called_with(
1521
- identity_fakes.role_name,
1596
+ self.identity_sdk_client.find_role.assert_called_with(
1597
+ name_or_id=self.role.name,
1598
+ domain_id=None,
1599
+ ignore_missing=False,
1522
1600
  )
1523
1601
 
1524
- collist = ('domain', 'id', 'name')
1602
+ collist = ('id', 'name', 'domain_id', 'description')
1525
1603
  self.assertEqual(collist, columns)
1526
1604
  datalist = (
1605
+ self.role.id,
1606
+ self.role.name,
1607
+ None,
1527
1608
  None,
1528
- identity_fakes.role_id,
1529
- identity_fakes.role_name,
1530
1609
  )
1531
1610
  self.assertEqual(datalist, data)
1532
1611
 
1533
1612
  def test_role_show_domain_role(self):
1534
- self.roles_mock.get.return_value = fakes.FakeResource(
1535
- None,
1536
- copy.deepcopy(identity_fakes.ROLE_2),
1537
- loaded=True,
1613
+ self.role_with_domain = sdk_fakes.generate_fake_resource(
1614
+ resource_type=_role.Role,
1615
+ domain_id=self.domain.id,
1616
+ description=None,
1538
1617
  )
1618
+ self.identity_sdk_client.find_role.return_value = self.role_with_domain
1619
+
1539
1620
  arglist = [
1540
1621
  '--domain',
1541
- identity_fakes.domain_name,
1542
- identity_fakes.ROLE_2['name'],
1622
+ self.domain.name,
1623
+ self.role_with_domain.id,
1543
1624
  ]
1544
1625
  verifylist = [
1545
- ('domain', identity_fakes.domain_name),
1546
- ('role', identity_fakes.ROLE_2['name']),
1626
+ ('domain', self.domain.name),
1627
+ ('role', self.role_with_domain.id),
1547
1628
  ]
1548
1629
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1549
1630
 
@@ -1552,23 +1633,18 @@ class TestRoleShow(TestRole):
1552
1633
  # data to be shown.
1553
1634
  columns, data = self.cmd.take_action(parsed_args)
1554
1635
 
1555
- # RoleManager.get(role). This is called from utils.find_resource().
1556
- # In fact, the current implementation calls the get(role) first with
1557
- # just the name, then with the name+domain_id. So technically we should
1558
- # mock this out with a call list, with the first call returning None
1559
- # and the second returning the object. However, if we did that we are
1560
- # then just testing the current sequencing within the utils method, and
1561
- # would become brittle to changes within that method. Hence we just
1562
- # check for the first call which is always lookup by name.
1563
- self.roles_mock.get.assert_called_with(
1564
- identity_fakes.ROLE_2['name'],
1636
+ self.identity_sdk_client.find_role.assert_called_with(
1637
+ name_or_id=self.role_with_domain.id,
1638
+ domain_id=self.domain.id,
1639
+ ignore_missing=False,
1565
1640
  )
1566
1641
 
1567
- collist = ('domain', 'id', 'name')
1642
+ collist = ('id', 'name', 'domain_id', 'description')
1568
1643
  self.assertEqual(collist, columns)
1569
1644
  datalist = (
1570
- identity_fakes.domain_id,
1571
- identity_fakes.ROLE_2['id'],
1572
- identity_fakes.ROLE_2['name'],
1645
+ self.role_with_domain.id,
1646
+ self.role_with_domain.name,
1647
+ self.domain.id,
1648
+ None,
1573
1649
  )
1574
1650
  self.assertEqual(datalist, data)