Skip to content

Commit 2cb1cee

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Modify error handling for role and group commands"
2 parents 7f29e52 + cfd4e2a commit 2cb1cee

5 files changed

Lines changed: 94 additions & 58 deletions

File tree

openstackclient/identity/v3/group.py

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,18 +62,13 @@ def take_action(self, parsed_args):
6262

6363
try:
6464
identity_client.users.add_to_group(user_id, group_id)
65-
except Exception:
66-
msg = _("%(user)s not added to group %(group)s\n") % {
67-
'user': parsed_args.user,
68-
'group': parsed_args.group,
69-
}
70-
sys.stderr.write(msg)
71-
else:
72-
msg = _("%(user)s added to group %(group)s\n") % {
65+
except Exception as e:
66+
msg = _("%(user)s not added to group %(group)s: %(e)s") % {
7367
'user': parsed_args.user,
7468
'group': parsed_args.group,
69+
'e': e,
7570
}
76-
sys.stdout.write(msg)
71+
raise exceptions.CommandError(msg)
7772

7873

7974
class CheckUserInGroup(command.Command):
@@ -306,18 +301,13 @@ def take_action(self, parsed_args):
306301

307302
try:
308303
identity_client.users.remove_from_group(user_id, group_id)
309-
except Exception:
310-
msg = _("%(user)s not removed from group %(group)s\n") % {
311-
'user': parsed_args.user,
312-
'group': parsed_args.group,
313-
}
314-
sys.stderr.write(msg)
315-
else:
316-
msg = _("%(user)s removed from group %(group)s\n") % {
304+
except Exception as e:
305+
msg = _("%(user)s not removed from group %(group)s: %(e)s") % {
317306
'user': parsed_args.user,
318307
'group': parsed_args.group,
308+
'e': e,
319309
}
320-
sys.stdout.write(msg)
310+
raise exceptions.CommandError(msg)
321311

322312

323313
class SetGroup(command.Command):

openstackclient/identity/v3/role.py

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"""Identity v3 Role action implementations"""
1717

1818
import logging
19-
import sys
2019

2120
from keystoneauth1 import exceptions as ks_exc
2221
from osc_lib.command import command
@@ -129,7 +128,9 @@ def take_action(self, parsed_args):
129128

130129
if (not parsed_args.user and not parsed_args.domain
131130
and not parsed_args.group and not parsed_args.project):
132-
return
131+
msg = _("Role not added, incorrect set of arguments "
132+
"provided. See openstack --help for more details")
133+
raise exceptions.CommandError(msg)
133134

134135
domain_id = None
135136
if parsed_args.role_domain:
@@ -143,11 +144,6 @@ def take_action(self, parsed_args):
143144

144145
kwargs = _process_identity_and_resource_options(
145146
parsed_args, self.app.client_manager.identity)
146-
if not kwargs:
147-
sys.stderr.write(_("Role not added, incorrect set of arguments "
148-
"provided. See openstack --help for more "
149-
"details\n"))
150-
return
151147

152148
identity_client.roles.grant(role.id, **kwargs)
153149

@@ -372,10 +368,10 @@ def take_action(self, parsed_args):
372368
'<group-name> --project <project-name> --names '
373369
'instead.'))
374370
else:
375-
sys.stderr.write(_("Error: If a user or group is specified, "
376-
"either --domain or --project must also be "
377-
"specified to list role grants.\n"))
378-
return ([], [])
371+
msg = _("Error: If a user or group is specified, "
372+
"either --domain or --project must also be "
373+
"specified to list role grants.")
374+
raise exceptions.CommandError(msg)
379375

380376
return (columns,
381377
(utils.get_item_properties(
@@ -405,9 +401,9 @@ def take_action(self, parsed_args):
405401

406402
if (not parsed_args.user and not parsed_args.domain
407403
and not parsed_args.group and not parsed_args.project):
408-
sys.stderr.write(_("Incorrect set of arguments provided. "
409-
"See openstack --help for more details\n"))
410-
return
404+
msg = _("Incorrect set of arguments provided. "
405+
"See openstack --help for more details")
406+
raise exceptions.CommandError(msg)
411407

412408
domain_id = None
413409
if parsed_args.role_domain:
@@ -421,11 +417,6 @@ def take_action(self, parsed_args):
421417

422418
kwargs = _process_identity_and_resource_options(
423419
parsed_args, self.app.client_manager.identity)
424-
if not kwargs:
425-
sys.stderr.write(_("Role not removed, incorrect set of arguments "
426-
"provided. See openstack --help for more "
427-
"details\n"))
428-
return
429420
identity_client.roles.revoke(role.id, **kwargs)
430421

431422

openstackclient/tests/functional/identity/v3/test_group.py

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,7 @@ def test_group_add_user(self):
102102
'user_domain': self.domain_name,
103103
'group': group_name,
104104
'user': username})
105-
self.assertEqual(
106-
'%(user)s added to group %(group)s\n' % {'user': username,
107-
'group': group_name},
108-
raw_output
109-
)
105+
self.assertOutput('', raw_output)
110106

111107
def test_group_contains_user(self):
112108
group_name = self._create_dummy_group()
@@ -128,11 +124,7 @@ def test_group_contains_user(self):
128124
'user_domain': self.domain_name,
129125
'group': group_name,
130126
'user': username})
131-
self.assertEqual(
132-
'%(user)s added to group %(group)s\n' % {'user': username,
133-
'group': group_name},
134-
raw_output
135-
)
127+
self.assertOutput('', raw_output)
136128
raw_output = self.openstack(
137129
'group contains user '
138130
'--group-domain %(group_domain)s '
@@ -165,14 +157,5 @@ def test_group_remove_user(self):
165157
'user_domain': self.domain_name,
166158
'group': group_name,
167159
'user': username})
168-
self.assertEqual(
169-
'%(user)s added to group %(group)s\n' % {'user': username,
170-
'group': group_name},
171-
add_raw_output
172-
)
173-
self.assertEqual(
174-
'%(user)s removed from '
175-
'group %(group)s\n' % {'user': username,
176-
'group': group_name},
177-
remove_raw_output
178-
)
160+
self.assertOutput('', add_raw_output)
161+
self.assertOutput('', remove_raw_output)

openstackclient/tests/unit/identity/v3/test_group.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,20 @@ def test_group_add_user(self):
7070
self.user.id, self.group.id)
7171
self.assertIsNone(result)
7272

73+
def test_group_add_user_with_error(self):
74+
self.users_mock.add_to_group.side_effect = exceptions.CommandError()
75+
arglist = [
76+
self.group.name,
77+
self.user.name,
78+
]
79+
verifylist = [
80+
('group', self.group.name),
81+
('user', self.user.name),
82+
]
83+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
84+
self.assertRaises(exceptions.CommandError,
85+
self.cmd.take_action, parsed_args)
86+
7387

7488
class TestGroupCheckUser(TestGroup):
7589

@@ -460,6 +474,21 @@ def test_group_remove_user(self):
460474
self.user.id, self.group.id)
461475
self.assertIsNone(result)
462476

477+
def test_group_remove_user_with_error(self):
478+
self.users_mock.remove_from_group.side_effect = (
479+
exceptions.CommandError())
480+
arglist = [
481+
self.group.id,
482+
self.user.id,
483+
]
484+
verifylist = [
485+
('group', self.group.id),
486+
('user', self.user.id),
487+
]
488+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
489+
self.assertRaises(exceptions.CommandError,
490+
self.cmd.take_action, parsed_args)
491+
463492

464493
class TestGroupSet(TestGroup):
465494

openstackclient/tests/unit/identity/v3/test_role.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,22 @@ def test_role_add_domain_role_on_user_project(self):
273273
)
274274
self.assertIsNone(result)
275275

276+
def test_role_add_with_error(self):
277+
arglist = [
278+
identity_fakes.role_name,
279+
]
280+
verifylist = [
281+
('user', None),
282+
('group', None),
283+
('domain', None),
284+
('project', None),
285+
('role', identity_fakes.role_name),
286+
('inherited', False),
287+
]
288+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
289+
self.assertRaises(exceptions.CommandError,
290+
self.cmd.take_action, parsed_args)
291+
276292

277293
class TestRoleAddInherited(TestRoleAdd, TestRoleInherited):
278294
pass
@@ -771,6 +787,17 @@ def test_role_list_domain_role(self):
771787
), )
772788
self.assertEqual(datalist, tuple(data))
773789

790+
def test_role_list_group_with_error(self):
791+
arglist = [
792+
'--group', identity_fakes.group_id,
793+
]
794+
verifylist = [
795+
('group', identity_fakes.group_id),
796+
]
797+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
798+
self.assertRaises(exceptions.CommandError,
799+
self.cmd.take_action, parsed_args)
800+
774801

775802
class TestRoleRemove(TestRole):
776803

@@ -982,6 +1009,22 @@ def test_role_remove_domain_role_on_group_domain(self):
9821009
)
9831010
self.assertIsNone(result)
9841011

1012+
def test_role_remove_with_error(self):
1013+
arglist = [
1014+
identity_fakes.role_name,
1015+
]
1016+
verifylist = [
1017+
('user', None),
1018+
('group', None),
1019+
('domain', None),
1020+
('project', None),
1021+
('role', identity_fakes.role_name),
1022+
('inherited', False),
1023+
]
1024+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1025+
self.assertRaises(exceptions.CommandError,
1026+
self.cmd.take_action, parsed_args)
1027+
9851028

9861029
class TestRoleSet(TestRole):
9871030

0 commit comments

Comments
 (0)