From 55b37d5e33f322077303a895d3453320b3895f11 Mon Sep 17 00:00:00 2001 From: Hidekazu Nakamura <hid-nakamura@vf.jp.nec.com> Date: Fri, 6 Nov 2015 00:47:38 +0900 Subject: [PATCH] Don't mask authorization errors Project show with name argument returns 'Could not find resource' error when the user is not authorized. It should report the authorization error instead. This patch makes that change. Change-Id: Iac3521f8a411060b0ec9ef46c8f0e1f3551e56ae Closes-Bug: #1511625 --- openstackclient/common/utils.py | 25 ++++++++-------------- openstackclient/tests/common/test_utils.py | 12 +++++++++++ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/openstackclient/common/utils.py b/openstackclient/common/utils.py index c6ed6a716e..daa65c25fc 100644 --- a/openstackclient/common/utils.py +++ b/openstackclient/common/utils.py @@ -100,22 +100,15 @@ def find_resource(manager, name_or_id, **kwargs): else: pass - try: - for resource in manager.list(): - # short circuit and return the first match - if (resource.get('id') == name_or_id or - resource.get('name') == name_or_id): - return resource - else: - # we found no match, keep going to bomb out - pass - except Exception: - # in case the list fails for some reason - pass - - # if we hit here, we've failed, report back this error: - msg = "Could not find resource %s" % name_or_id - raise exceptions.CommandError(msg) + for resource in manager.list(): + # short circuit and return the first match + if (resource.get('id') == name_or_id or + resource.get('name') == name_or_id): + return resource + else: + # we found no match, report back this error: + msg = "Could not find resource %s" % name_or_id + raise exceptions.CommandError(msg) def format_dict(data): diff --git a/openstackclient/tests/common/test_utils.py b/openstackclient/tests/common/test_utils.py index 95bce45871..2248d0430e 100644 --- a/openstackclient/tests/common/test_utils.py +++ b/openstackclient/tests/common/test_utils.py @@ -306,6 +306,18 @@ class TestFindResource(test_utils.TestCase): self.manager.get.assert_called_with(self.name) self.manager.find.assert_called_with(name=self.name) + def test_find_resource_list_forbidden(self): + self.manager.get = mock.Mock(side_effect=Exception('Boom!')) + self.manager.find = mock.Mock(side_effect=Exception('Boom!')) + self.manager.list = mock.Mock( + side_effect=exceptions.Forbidden(403) + ) + self.assertRaises(exceptions.Forbidden, + utils.find_resource, + self.manager, + self.name) + self.manager.list.assert_called_with() + def test_find_resource_find_no_unique(self): self.manager.get = mock.Mock(side_effect=Exception('Boom!')) self.manager.find = mock.Mock(side_effect=NoUniqueMatch())