Skip to content

Commit cfd4e2a

Browse files
author
Huanxuan Ao
committed
Modify error handling for role and group commands
if command failed, we usually raise exception, if command success, sometimes there is not any output (such as set, add commands) So modify the error handling for role and group commands. Change-Id: I1c0f86c04dcedd9c0d725fd73f3436be9da75ee0
1 parent 46d1df0 commit cfd4e2a

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)