python-openstackclient 7.2.1__py3-none-any.whl → 7.3.1__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.
- openstackclient/common/limits.py +1 -1
- openstackclient/common/quota.py +7 -2
- openstackclient/compute/v2/server.py +38 -22
- openstackclient/compute/v2/usage.py +2 -2
- openstackclient/identity/common.py +22 -34
- openstackclient/identity/v3/credential.py +45 -28
- openstackclient/identity/v3/limit.py +15 -0
- openstackclient/identity/v3/region.py +23 -22
- openstackclient/identity/v3/registered_limit.py +18 -0
- openstackclient/identity/v3/role.py +287 -117
- openstackclient/identity/v3/role_assignment.py +1 -1
- openstackclient/identity/v3/service_provider.py +95 -45
- openstackclient/identity/v3/trust.py +114 -75
- openstackclient/image/v2/image.py +3 -0
- openstackclient/network/v2/network.py +33 -0
- openstackclient/network/v2/network_flavor_profile.py +1 -17
- openstackclient/network/v2/port.py +75 -20
- openstackclient/tests/functional/compute/v2/test_server.py +87 -1
- openstackclient/tests/functional/identity/v3/common.py +1 -1
- openstackclient/tests/functional/identity/v3/test_application_credential.py +2 -1
- openstackclient/tests/functional/identity/v3/test_role.py +24 -0
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +8 -0
- openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -5
- openstackclient/tests/functional/network/v2/test_port.py +107 -1
- openstackclient/tests/unit/compute/v2/fakes.py +0 -304
- openstackclient/tests/unit/compute/v2/test_aggregate.py +40 -31
- openstackclient/tests/unit/compute/v2/test_console.py +7 -3
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +60 -53
- openstackclient/tests/unit/compute/v2/test_keypair.py +57 -69
- openstackclient/tests/unit/compute/v2/test_server.py +63 -5
- openstackclient/tests/unit/compute/v2/test_server_group.py +99 -105
- openstackclient/tests/unit/compute/v2/test_server_volume.py +12 -5
- openstackclient/tests/unit/compute/v2/test_service.py +83 -37
- openstackclient/tests/unit/compute/v2/test_usage.py +12 -7
- openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -6
- openstackclient/tests/unit/identity/v2_0/test_role.py +1 -2
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +2 -1
- openstackclient/tests/unit/identity/v2_0/test_token.py +6 -20
- openstackclient/tests/unit/identity/v3/test_catalog.py +2 -5
- openstackclient/tests/unit/identity/v3/test_credential.py +74 -63
- openstackclient/tests/unit/identity/v3/test_project.py +1 -3
- openstackclient/tests/unit/identity/v3/test_region.py +74 -96
- openstackclient/tests/unit/identity/v3/test_role.py +679 -603
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +263 -1
- openstackclient/tests/unit/identity/v3/test_service_provider.py +159 -209
- openstackclient/tests/unit/identity/v3/test_token.py +5 -20
- openstackclient/tests/unit/identity/v3/test_trust.py +137 -155
- openstackclient/tests/unit/image/v2/test_image.py +6 -0
- openstackclient/tests/unit/network/v2/fakes.py +3 -0
- openstackclient/tests/unit/network/v2/test_network.py +25 -0
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +0 -35
- openstackclient/tests/unit/network/v2/test_port.py +128 -15
- openstackclient/tests/unit/utils.py +8 -2
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +31 -13
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +34 -13
- openstackclient/volume/v2/volume_backup.py +11 -2
- openstackclient/volume/v3/volume_backup.py +13 -2
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/AUTHORS +2 -0
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/METADATA +14 -16
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/RECORD +65 -65
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/WHEEL +1 -1
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/entry_points.txt +0 -1
- python_openstackclient-7.3.1.dist-info/pbr.json +1 -0
- python_openstackclient-7.2.1.dist-info/pbr.json +0 -1
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.dist-info}/LICENSE +0 -0
- {python_openstackclient-7.2.1.dist-info → python_openstackclient-7.3.1.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
|
|
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
|
|
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
|
-
|
|
33
|
-
self.
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
41
|
-
self.
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
49
|
-
self.
|
|
50
|
-
|
|
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
|
-
|
|
53
|
-
|
|
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
|
|
118
|
+
class TestRoleAdd(identity_fakes.TestIdentityv3):
|
|
57
119
|
def _is_inheritance_testcase(self):
|
|
58
|
-
return
|
|
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.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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.
|
|
84
|
-
|
|
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
|
-
|
|
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.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
169
|
+
@mock.patch.object(role.LOG, 'warning')
|
|
170
|
+
def test_role_add_user_system(self, mock_warning):
|
|
104
171
|
arglist = [
|
|
105
172
|
'--user',
|
|
106
|
-
|
|
173
|
+
self.user.name,
|
|
107
174
|
'--system',
|
|
108
175
|
'all',
|
|
109
|
-
|
|
176
|
+
self.role.name,
|
|
110
177
|
]
|
|
111
178
|
if self._is_inheritance_testcase():
|
|
112
179
|
arglist.append('--inherited')
|
|
113
180
|
verifylist = [
|
|
114
|
-
('user',
|
|
181
|
+
('user', self.user.name),
|
|
115
182
|
('group', None),
|
|
116
183
|
('system', 'all'),
|
|
117
184
|
('domain', None),
|
|
118
185
|
('project', None),
|
|
119
|
-
('role',
|
|
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
|
-
'
|
|
196
|
+
'user': self.user.id,
|
|
197
|
+
'role': self.role.id,
|
|
131
198
|
}
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
212
|
+
self.user.name,
|
|
142
213
|
'--domain',
|
|
143
|
-
|
|
144
|
-
|
|
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',
|
|
220
|
+
('user', self.user.name),
|
|
150
221
|
('group', None),
|
|
151
|
-
('domain',
|
|
222
|
+
('domain', self.domain.name),
|
|
152
223
|
('project', None),
|
|
153
|
-
('role',
|
|
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
|
-
'
|
|
163
|
-
'
|
|
164
|
-
'
|
|
233
|
+
'domain': self.domain.id,
|
|
234
|
+
'user': self.user.id,
|
|
235
|
+
'role': self.role.id,
|
|
236
|
+
'inherited': self._is_inheritance_testcase(),
|
|
165
237
|
}
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
246
|
+
self.user.name,
|
|
176
247
|
'--project',
|
|
177
|
-
|
|
178
|
-
|
|
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',
|
|
254
|
+
('user', self.user.name),
|
|
184
255
|
('group', None),
|
|
185
256
|
('domain', None),
|
|
186
|
-
('project',
|
|
187
|
-
('role',
|
|
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
|
-
'
|
|
197
|
-
'
|
|
198
|
-
'
|
|
267
|
+
'project': self.project.id,
|
|
268
|
+
'user': self.user.id,
|
|
269
|
+
'role': self.role.id,
|
|
270
|
+
'inherited': self._is_inheritance_testcase(),
|
|
199
271
|
}
|
|
200
|
-
|
|
201
|
-
|
|
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
|
-
|
|
277
|
+
@mock.patch.object(role.LOG, 'warning')
|
|
278
|
+
def test_role_add_group_system(self, mock_warning):
|
|
207
279
|
arglist = [
|
|
208
280
|
'--group',
|
|
209
|
-
|
|
281
|
+
self.group.name,
|
|
210
282
|
'--system',
|
|
211
283
|
'all',
|
|
212
|
-
|
|
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',
|
|
290
|
+
('group', self.group.name),
|
|
219
291
|
('system', 'all'),
|
|
220
292
|
('domain', None),
|
|
221
293
|
('project', None),
|
|
222
|
-
('role',
|
|
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
|
-
'
|
|
304
|
+
'group': self.group.id,
|
|
305
|
+
'role': self.role.id,
|
|
234
306
|
}
|
|
235
|
-
|
|
236
|
-
|
|
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
|
-
|
|
320
|
+
self.group.name,
|
|
245
321
|
'--domain',
|
|
246
|
-
|
|
247
|
-
|
|
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',
|
|
254
|
-
('domain',
|
|
329
|
+
('group', self.group.name),
|
|
330
|
+
('domain', self.domain.name),
|
|
255
331
|
('project', None),
|
|
256
|
-
('role',
|
|
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
|
-
'
|
|
266
|
-
'
|
|
267
|
-
'
|
|
341
|
+
'domain': self.domain.id,
|
|
342
|
+
'group': self.group.id,
|
|
343
|
+
'role': self.role.id,
|
|
344
|
+
'inherited': self._is_inheritance_testcase(),
|
|
268
345
|
}
|
|
269
|
-
|
|
270
|
-
|
|
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
|
-
|
|
354
|
+
self.group.name,
|
|
279
355
|
'--project',
|
|
280
|
-
|
|
281
|
-
|
|
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',
|
|
363
|
+
('group', self.group.name),
|
|
288
364
|
('domain', None),
|
|
289
|
-
('project',
|
|
290
|
-
('role',
|
|
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
|
-
'
|
|
300
|
-
'
|
|
301
|
-
'
|
|
375
|
+
'project': self.project.id,
|
|
376
|
+
'group': self.group.id,
|
|
377
|
+
'role': self.role.id,
|
|
378
|
+
'inherited': self._is_inheritance_testcase(),
|
|
302
379
|
}
|
|
303
|
-
|
|
304
|
-
|
|
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.
|
|
311
|
-
|
|
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
|
-
|
|
390
|
+
self.user.name,
|
|
318
391
|
'--project',
|
|
319
|
-
|
|
392
|
+
self.project.name,
|
|
320
393
|
'--role-domain',
|
|
321
|
-
|
|
322
|
-
|
|
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',
|
|
400
|
+
('user', self.user.name),
|
|
328
401
|
('group', None),
|
|
329
402
|
('domain', None),
|
|
330
|
-
('project',
|
|
331
|
-
('role',
|
|
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
|
-
'
|
|
341
|
-
'
|
|
342
|
-
'
|
|
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
|
-
|
|
345
|
-
|
|
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
|
-
|
|
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',
|
|
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(
|
|
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.
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
452
|
+
self.role = sdk_fakes.generate_fake_resource(
|
|
453
|
+
resource_type=_role.Role,
|
|
454
|
+
domain_id=None,
|
|
455
|
+
description=None,
|
|
380
456
|
)
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
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
|
-
|
|
482
|
+
self.role.name,
|
|
394
483
|
]
|
|
395
484
|
verifylist = [
|
|
396
|
-
('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
|
-
'
|
|
408
|
-
'name': identity_fakes.role_name,
|
|
409
|
-
'description': None,
|
|
496
|
+
'name': self.role.name,
|
|
410
497
|
'options': {},
|
|
411
498
|
}
|
|
412
499
|
|
|
413
|
-
|
|
414
|
-
self.roles_mock.create.assert_called_with(**kwargs)
|
|
500
|
+
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
|
|
415
501
|
|
|
416
|
-
collist
|
|
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.
|
|
427
|
-
|
|
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
|
-
|
|
435
|
-
|
|
518
|
+
self.domain.name,
|
|
519
|
+
self.role_with_domain.name,
|
|
436
520
|
]
|
|
437
521
|
verifylist = [
|
|
438
|
-
('domain',
|
|
439
|
-
('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
|
-
'
|
|
451
|
-
'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
|
-
|
|
457
|
-
self.roles_mock.create.assert_called_with(**kwargs)
|
|
539
|
+
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
|
|
458
540
|
|
|
459
|
-
collist
|
|
460
|
-
self.assertEqual(collist, columns)
|
|
541
|
+
self.assertEqual(self.collist, columns)
|
|
461
542
|
datalist = (
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
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.
|
|
470
|
-
|
|
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
|
-
|
|
477
|
-
|
|
557
|
+
self.role_with_description.description,
|
|
558
|
+
self.role_with_description.name,
|
|
478
559
|
]
|
|
479
560
|
verifylist = [
|
|
480
|
-
('description',
|
|
481
|
-
('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
|
-
'
|
|
493
|
-
'
|
|
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
|
-
|
|
499
|
-
self.roles_mock.create.assert_called_with(**kwargs)
|
|
578
|
+
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
|
|
500
579
|
|
|
501
|
-
collist
|
|
502
|
-
self.assertEqual(collist, columns)
|
|
580
|
+
self.assertEqual(self.collist, columns)
|
|
503
581
|
datalist = (
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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.
|
|
512
|
-
|
|
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
|
-
|
|
594
|
+
self.role.name,
|
|
519
595
|
]
|
|
520
596
|
verifylist = [
|
|
521
597
|
('immutable', True),
|
|
522
|
-
('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
|
-
'
|
|
535
|
-
'name': identity_fakes.ROLE_2['name'],
|
|
536
|
-
'domain': None,
|
|
610
|
+
'name': self.role.name,
|
|
537
611
|
}
|
|
538
612
|
|
|
539
|
-
|
|
540
|
-
self.roles_mock.create.assert_called_with(**kwargs)
|
|
613
|
+
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
|
|
541
614
|
|
|
542
|
-
collist
|
|
543
|
-
self.assertEqual(collist, columns)
|
|
615
|
+
self.assertEqual(self.collist, columns)
|
|
544
616
|
datalist = (
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
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.
|
|
553
|
-
|
|
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
|
-
|
|
629
|
+
self.role.name,
|
|
560
630
|
]
|
|
561
631
|
verifylist = [
|
|
562
632
|
('no_immutable', True),
|
|
563
|
-
('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
|
-
'
|
|
576
|
-
'name': identity_fakes.ROLE_2['name'],
|
|
577
|
-
'domain': None,
|
|
645
|
+
'name': self.role.name,
|
|
578
646
|
}
|
|
579
647
|
|
|
580
|
-
|
|
581
|
-
self.roles_mock.create.assert_called_with(**kwargs)
|
|
648
|
+
self.identity_sdk_client.create_role.assert_called_with(**kwargs)
|
|
582
649
|
|
|
583
|
-
collist
|
|
584
|
-
self.assertEqual(collist, columns)
|
|
650
|
+
self.assertEqual(self.collist, columns)
|
|
585
651
|
datalist = (
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
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(
|
|
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
|
-
|
|
677
|
+
self.role.name,
|
|
610
678
|
]
|
|
611
679
|
verifylist = [
|
|
612
|
-
('roles', [
|
|
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.
|
|
619
|
-
|
|
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.
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
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.
|
|
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
|
-
|
|
634
|
-
|
|
704
|
+
self.domain.name,
|
|
705
|
+
self.role_with_domain.name,
|
|
635
706
|
]
|
|
636
707
|
verifylist = [
|
|
637
|
-
('roles', [
|
|
638
|
-
('domain',
|
|
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.
|
|
645
|
-
|
|
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
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
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
|
-
|
|
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
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
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,
|
|
678
|
-
self.
|
|
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(
|
|
767
|
+
class TestRoleList(identity_fakes.TestIdentityv3):
|
|
682
768
|
columns = (
|
|
683
769
|
'ID',
|
|
684
770
|
'Name',
|
|
685
771
|
)
|
|
686
|
-
|
|
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.
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
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.
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
826
|
+
self.domain.name,
|
|
739
827
|
]
|
|
740
828
|
verifylist = [
|
|
741
|
-
('domain',
|
|
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':
|
|
752
|
-
|
|
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
|
-
|
|
760
|
-
|
|
761
|
-
|
|
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(
|
|
768
|
-
def
|
|
769
|
-
|
|
854
|
+
class TestRoleRemove(identity_fakes.TestIdentityv3):
|
|
855
|
+
def _is_inheritance_testcase(self):
|
|
856
|
+
return False
|
|
770
857
|
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
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
|
-
|
|
778
|
-
|
|
779
|
-
copy.deepcopy(identity_fakes.GROUP),
|
|
780
|
-
loaded=True,
|
|
781
|
-
)
|
|
864
|
+
def setUp(self):
|
|
865
|
+
super().setUp()
|
|
782
866
|
|
|
783
|
-
self.
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
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.
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
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
|
-
|
|
891
|
+
self.user.name,
|
|
809
892
|
'--system',
|
|
810
893
|
'all',
|
|
811
|
-
|
|
894
|
+
self.role.name,
|
|
812
895
|
]
|
|
813
896
|
if self._is_inheritance_testcase():
|
|
814
897
|
arglist.append('--inherited')
|
|
815
898
|
verifylist = [
|
|
816
|
-
('user',
|
|
899
|
+
('user', self.user.name),
|
|
817
900
|
('group', None),
|
|
818
901
|
('system', 'all'),
|
|
819
902
|
('domain', None),
|
|
820
903
|
('project', None),
|
|
821
|
-
('role',
|
|
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':
|
|
913
|
+
'user': self.user.id,
|
|
831
914
|
'system': 'all',
|
|
832
|
-
'
|
|
915
|
+
'role': self.role.id,
|
|
833
916
|
}
|
|
834
|
-
|
|
835
|
-
|
|
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
|
-
|
|
841
|
-
|
|
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
|
-
|
|
847
|
-
|
|
927
|
+
self.identity_sdk_client.find_user.side_effect = [
|
|
928
|
+
sdk_exc.ResourceNotFound,
|
|
929
|
+
]
|
|
848
930
|
arglist = [
|
|
849
931
|
'--user',
|
|
850
|
-
|
|
932
|
+
self.user.id,
|
|
851
933
|
'--system',
|
|
852
934
|
'all',
|
|
853
|
-
|
|
935
|
+
self.role.name,
|
|
854
936
|
]
|
|
855
937
|
if self._is_inheritance_testcase():
|
|
856
938
|
arglist.append('--inherited')
|
|
857
939
|
verifylist = [
|
|
858
|
-
('user',
|
|
940
|
+
('user', self.user.id),
|
|
859
941
|
('group', None),
|
|
860
942
|
('system', 'all'),
|
|
861
943
|
('domain', None),
|
|
862
944
|
('project', None),
|
|
863
|
-
('role',
|
|
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':
|
|
954
|
+
'user': self.user.id,
|
|
873
955
|
'system': 'all',
|
|
874
|
-
'
|
|
956
|
+
'role': self.role.id,
|
|
875
957
|
}
|
|
876
|
-
|
|
877
|
-
|
|
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
|
-
|
|
966
|
+
self.user.name,
|
|
886
967
|
'--domain',
|
|
887
|
-
|
|
888
|
-
|
|
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',
|
|
974
|
+
('user', self.user.name),
|
|
894
975
|
('group', None),
|
|
895
|
-
('domain',
|
|
976
|
+
('domain', self.domain.name),
|
|
896
977
|
('project', None),
|
|
897
|
-
('role',
|
|
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':
|
|
907
|
-
'domain':
|
|
908
|
-
'
|
|
987
|
+
'user': self.user.id,
|
|
988
|
+
'domain': self.domain.id,
|
|
989
|
+
'role': self.role.id,
|
|
990
|
+
'inherited': self._is_inheritance_testcase(),
|
|
909
991
|
}
|
|
910
|
-
|
|
911
|
-
|
|
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
|
-
|
|
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
|
-
|
|
922
|
-
|
|
1001
|
+
self.identity_sdk_client.find_user.side_effect = [
|
|
1002
|
+
sdk_exc.ResourceNotFound,
|
|
1003
|
+
]
|
|
923
1004
|
arglist = [
|
|
924
1005
|
'--user',
|
|
925
|
-
|
|
1006
|
+
self.user.id,
|
|
926
1007
|
'--domain',
|
|
927
|
-
|
|
928
|
-
|
|
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',
|
|
1014
|
+
('user', self.user.id),
|
|
934
1015
|
('group', None),
|
|
935
1016
|
('system', None),
|
|
936
|
-
('domain',
|
|
1017
|
+
('domain', self.domain.name),
|
|
937
1018
|
('project', None),
|
|
938
|
-
('role',
|
|
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':
|
|
948
|
-
'domain':
|
|
949
|
-
'
|
|
1028
|
+
'user': self.user.id,
|
|
1029
|
+
'domain': self.domain.id,
|
|
1030
|
+
'role': self.role.id,
|
|
1031
|
+
'inherited': self._is_inheritance_testcase(),
|
|
950
1032
|
}
|
|
951
|
-
|
|
952
|
-
|
|
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
|
-
|
|
1041
|
+
self.user.name,
|
|
961
1042
|
'--project',
|
|
962
|
-
|
|
963
|
-
|
|
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',
|
|
1049
|
+
('user', self.user.name),
|
|
969
1050
|
('group', None),
|
|
970
1051
|
('domain', None),
|
|
971
|
-
('project',
|
|
972
|
-
('role',
|
|
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':
|
|
982
|
-
'project':
|
|
983
|
-
'
|
|
1062
|
+
'user': self.user.id,
|
|
1063
|
+
'project': self.project.id,
|
|
1064
|
+
'role': self.role.id,
|
|
1065
|
+
'inherited': self._is_inheritance_testcase(),
|
|
984
1066
|
}
|
|
985
|
-
|
|
986
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1076
|
+
self.identity_sdk_client.find_user.side_effect = [
|
|
1077
|
+
sdk_exc.ResourceNotFound,
|
|
1078
|
+
]
|
|
997
1079
|
|
|
998
1080
|
arglist = [
|
|
999
1081
|
'--user',
|
|
1000
|
-
|
|
1082
|
+
self.user.id,
|
|
1001
1083
|
'--project',
|
|
1002
|
-
|
|
1003
|
-
|
|
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',
|
|
1090
|
+
('user', self.user.id),
|
|
1009
1091
|
('group', None),
|
|
1010
1092
|
('system', None),
|
|
1011
1093
|
('domain', None),
|
|
1012
|
-
('project',
|
|
1013
|
-
('role',
|
|
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':
|
|
1023
|
-
'project':
|
|
1024
|
-
'
|
|
1104
|
+
'user': self.user.id,
|
|
1105
|
+
'project': self.project.id,
|
|
1106
|
+
'role': self.role.id,
|
|
1107
|
+
'inherited': self._is_inheritance_testcase(),
|
|
1025
1108
|
}
|
|
1026
|
-
|
|
1027
|
-
|
|
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
|
-
|
|
1117
|
+
self.group.name,
|
|
1036
1118
|
'--system',
|
|
1037
1119
|
'all',
|
|
1038
|
-
|
|
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',
|
|
1126
|
+
('group', self.group.name),
|
|
1045
1127
|
('system', 'all'),
|
|
1046
1128
|
('domain', None),
|
|
1047
1129
|
('project', None),
|
|
1048
|
-
('role',
|
|
1049
|
-
('role',
|
|
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':
|
|
1140
|
+
'group': self.group.id,
|
|
1059
1141
|
'system': 'all',
|
|
1060
|
-
'
|
|
1142
|
+
'role': self.role.id,
|
|
1061
1143
|
}
|
|
1062
|
-
|
|
1063
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1153
|
+
self.identity_sdk_client.find_group.side_effect = [
|
|
1154
|
+
sdk_exc.ResourceNotFound,
|
|
1155
|
+
]
|
|
1074
1156
|
|
|
1075
1157
|
arglist = [
|
|
1076
1158
|
'--group',
|
|
1077
|
-
|
|
1159
|
+
self.group.id,
|
|
1078
1160
|
'--system',
|
|
1079
1161
|
'all',
|
|
1080
|
-
|
|
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',
|
|
1168
|
+
('group', self.group.id),
|
|
1087
1169
|
('system', 'all'),
|
|
1088
1170
|
('domain', None),
|
|
1089
1171
|
('project', None),
|
|
1090
|
-
('role',
|
|
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':
|
|
1181
|
+
'group': self.group.id,
|
|
1100
1182
|
'system': 'all',
|
|
1101
|
-
'
|
|
1183
|
+
'role': self.role.id,
|
|
1102
1184
|
}
|
|
1103
|
-
|
|
1104
|
-
|
|
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
|
-
|
|
1193
|
+
self.group.name,
|
|
1113
1194
|
'--domain',
|
|
1114
|
-
|
|
1115
|
-
|
|
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',
|
|
1122
|
-
('domain',
|
|
1202
|
+
('group', self.group.name),
|
|
1203
|
+
('domain', self.domain.name),
|
|
1123
1204
|
('project', None),
|
|
1124
|
-
('role',
|
|
1125
|
-
('role',
|
|
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':
|
|
1135
|
-
'domain':
|
|
1136
|
-
'
|
|
1215
|
+
'group': self.group.id,
|
|
1216
|
+
'domain': self.domain.id,
|
|
1217
|
+
'role': self.role.id,
|
|
1218
|
+
'inherited': self._is_inheritance_testcase(),
|
|
1137
1219
|
}
|
|
1138
|
-
|
|
1139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1229
|
+
self.identity_sdk_client.find_group.side_effect = [
|
|
1230
|
+
sdk_exc.ResourceNotFound,
|
|
1231
|
+
]
|
|
1150
1232
|
|
|
1151
1233
|
arglist = [
|
|
1152
1234
|
'--group',
|
|
1153
|
-
|
|
1235
|
+
self.group.id,
|
|
1154
1236
|
'--domain',
|
|
1155
|
-
|
|
1156
|
-
|
|
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',
|
|
1244
|
+
('group', self.group.id),
|
|
1163
1245
|
('system', None),
|
|
1164
|
-
('domain',
|
|
1246
|
+
('domain', self.domain.name),
|
|
1165
1247
|
('project', None),
|
|
1166
|
-
('role',
|
|
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':
|
|
1176
|
-
'domain':
|
|
1177
|
-
'
|
|
1257
|
+
'group': self.group.id,
|
|
1258
|
+
'domain': self.domain.id,
|
|
1259
|
+
'role': self.role.id,
|
|
1260
|
+
'inherited': self._is_inheritance_testcase(),
|
|
1178
1261
|
}
|
|
1179
|
-
|
|
1180
|
-
|
|
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
|
-
|
|
1270
|
+
self.group.name,
|
|
1189
1271
|
'--project',
|
|
1190
|
-
|
|
1191
|
-
|
|
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',
|
|
1279
|
+
('group', self.group.name),
|
|
1198
1280
|
('domain', None),
|
|
1199
|
-
('project',
|
|
1200
|
-
('role',
|
|
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':
|
|
1210
|
-
'project':
|
|
1211
|
-
'
|
|
1291
|
+
'group': self.group.id,
|
|
1292
|
+
'project': self.project.id,
|
|
1293
|
+
'role': self.role.id,
|
|
1294
|
+
'inherited': self._is_inheritance_testcase(),
|
|
1212
1295
|
}
|
|
1213
|
-
|
|
1214
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1225
|
-
|
|
1305
|
+
self.identity_sdk_client.find_group.side_effect = [
|
|
1306
|
+
sdk_exc.ResourceNotFound,
|
|
1307
|
+
]
|
|
1226
1308
|
arglist = [
|
|
1227
1309
|
'--group',
|
|
1228
|
-
|
|
1310
|
+
self.group.id,
|
|
1229
1311
|
'--project',
|
|
1230
|
-
|
|
1231
|
-
|
|
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',
|
|
1319
|
+
('group', self.group.id),
|
|
1238
1320
|
('system', None),
|
|
1239
1321
|
('domain', None),
|
|
1240
|
-
('project',
|
|
1241
|
-
('role',
|
|
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':
|
|
1251
|
-
'project':
|
|
1252
|
-
'
|
|
1332
|
+
'group': self.group.id,
|
|
1333
|
+
'project': self.project.id,
|
|
1334
|
+
'role': self.role.id,
|
|
1335
|
+
'inherited': self._is_inheritance_testcase(),
|
|
1253
1336
|
}
|
|
1254
|
-
|
|
1255
|
-
|
|
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.
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
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
|
-
|
|
1351
|
+
self.group.name,
|
|
1269
1352
|
'--domain',
|
|
1270
|
-
|
|
1271
|
-
|
|
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',
|
|
1278
|
-
('domain',
|
|
1360
|
+
('group', self.group.name),
|
|
1361
|
+
('domain', self.domain.name),
|
|
1279
1362
|
('project', None),
|
|
1280
|
-
('role',
|
|
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':
|
|
1290
|
-
'domain':
|
|
1291
|
-
'
|
|
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
|
-
|
|
1294
|
-
|
|
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
|
-
|
|
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',
|
|
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(
|
|
1400
|
+
class TestRoleSet(identity_fakes.TestIdentityv3):
|
|
1318
1401
|
def setUp(self):
|
|
1319
1402
|
super().setUp()
|
|
1320
1403
|
|
|
1321
|
-
self.
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
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
|
-
|
|
1426
|
+
self.role.name,
|
|
1336
1427
|
]
|
|
1337
1428
|
verifylist = [
|
|
1338
1429
|
('name', 'over'),
|
|
1339
|
-
('role',
|
|
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
|
-
'
|
|
1439
|
+
'role': self.role.id,
|
|
1349
1440
|
'options': {},
|
|
1350
1441
|
}
|
|
1351
|
-
|
|
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.
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
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
|
-
|
|
1368
|
-
|
|
1458
|
+
self.domain2.name,
|
|
1459
|
+
self.role_with_domain.name,
|
|
1369
1460
|
]
|
|
1370
1461
|
verifylist = [
|
|
1371
1462
|
('name', 'over'),
|
|
1372
|
-
('domain',
|
|
1373
|
-
('role',
|
|
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
|
-
'
|
|
1473
|
+
'role': self.role_with_domain.id,
|
|
1474
|
+
'domain_id': self.domain2.id,
|
|
1383
1475
|
'options': {},
|
|
1384
1476
|
}
|
|
1385
|
-
|
|
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.
|
|
1393
|
-
|
|
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
|
-
|
|
1402
|
-
|
|
1487
|
+
'role description',
|
|
1488
|
+
self.role_with_domain.name,
|
|
1403
1489
|
]
|
|
1404
1490
|
verifylist = [
|
|
1405
1491
|
('name', 'over'),
|
|
1406
|
-
('description',
|
|
1407
|
-
('role',
|
|
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':
|
|
1502
|
+
'description': 'role description',
|
|
1503
|
+
'role': self.role_with_domain.id,
|
|
1417
1504
|
'options': {},
|
|
1418
1505
|
}
|
|
1419
|
-
|
|
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.
|
|
1427
|
-
|
|
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
|
-
|
|
1516
|
+
self.role_with_domain.name,
|
|
1436
1517
|
]
|
|
1437
1518
|
verifylist = [
|
|
1438
1519
|
('name', 'over'),
|
|
1439
1520
|
('immutable', True),
|
|
1440
|
-
('role',
|
|
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
|
-
'
|
|
1530
|
+
'role': self.role_with_domain.id,
|
|
1450
1531
|
'options': {'immutable': True},
|
|
1451
1532
|
}
|
|
1452
|
-
|
|
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.
|
|
1460
|
-
|
|
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
|
-
|
|
1543
|
+
self.role_with_domain.name,
|
|
1469
1544
|
]
|
|
1470
1545
|
verifylist = [
|
|
1471
1546
|
('name', 'over'),
|
|
1472
1547
|
('no_immutable', True),
|
|
1473
|
-
('role',
|
|
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
|
-
'
|
|
1557
|
+
'role': self.role_with_domain.id,
|
|
1483
1558
|
'options': {'immutable': False},
|
|
1484
1559
|
}
|
|
1485
|
-
|
|
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(
|
|
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.
|
|
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
|
-
|
|
1584
|
+
self.role.name,
|
|
1508
1585
|
]
|
|
1509
1586
|
verifylist = [
|
|
1510
|
-
('role',
|
|
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
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
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 = ('
|
|
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.
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
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
|
-
|
|
1542
|
-
|
|
1622
|
+
self.domain.name,
|
|
1623
|
+
self.role_with_domain.id,
|
|
1543
1624
|
]
|
|
1544
1625
|
verifylist = [
|
|
1545
|
-
('domain',
|
|
1546
|
-
('role',
|
|
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
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
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 = ('
|
|
1642
|
+
collist = ('id', 'name', 'domain_id', 'description')
|
|
1568
1643
|
self.assertEqual(collist, columns)
|
|
1569
1644
|
datalist = (
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
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)
|