From e8f3103cc14b62226a5d71d2018b8e1c96c8a2d8 Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Thu, 11 May 2017 08:46:32 -0500 Subject: [PATCH] Ignore more exceptions in quota list Additional exceptions can be thrown here, ignore additional project lookup exceptions, but still not all. Server failures are still interesting, for example. Change-Id: I9a750ae8e8efa29a36bbd1e34b50b6ace0658260 --- openstackclient/common/quota.py | 5 +- .../tests/unit/common/test_quota.py | 49 ++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py index 6ed9e370d..0d5cb9be3 100644 --- a/openstackclient/common/quota.py +++ b/openstackclient/common/quota.py @@ -135,7 +135,10 @@ class ListQuota(command.Lister): try: data = compute_client.quotas.get(p) except Exception as ex: - if type(ex).__name__ == 'NotFound': + if ( + type(ex).__name__ == 'NotFound' or + ex.http_status >= 400 and ex.http_status <= 499 + ): # Project not found, move on to next one LOG.warning("Project %s not found: %s" % (p, ex)) continue diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py index 1b0d2c319..482653f46 100644 --- a/openstackclient/tests/unit/common/test_quota.py +++ b/openstackclient/tests/unit/common/test_quota.py @@ -242,7 +242,7 @@ class TestQuotaList(TestQuota): self.assertEqual(self.compute_reference_data, ret_quotas[0]) self.assertEqual(1, len(ret_quotas)) - def test_quota_list_compute_no_project(self): + def test_quota_list_compute_no_project_not_found(self): # Make one of the projects disappear self.compute.quotas.get = mock.Mock( side_effect=[ @@ -266,6 +266,53 @@ class TestQuotaList(TestQuota): self.assertEqual(self.compute_reference_data, ret_quotas[0]) self.assertEqual(1, len(ret_quotas)) + def test_quota_list_compute_no_project_4xx(self): + # Make one of the projects disappear + self.compute.quotas.get = mock.Mock( + side_effect=[ + self.compute_quotas[0], + exceptions.BadRequest("Bad request"), + ], + ) + + arglist = [ + '--compute', + ] + verifylist = [ + ('compute', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + ret_quotas = list(data) + + self.assertEqual(self.compute_column_header, columns) + self.assertEqual(self.compute_reference_data, ret_quotas[0]) + self.assertEqual(1, len(ret_quotas)) + + def test_quota_list_compute_no_project_5xx(self): + # Make one of the projects disappear + self.compute.quotas.get = mock.Mock( + side_effect=[ + self.compute_quotas[0], + exceptions.HTTPNotImplemented("Not implemented??"), + ], + ) + + arglist = [ + '--compute', + ] + verifylist = [ + ('compute', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.assertRaises( + exceptions.HTTPNotImplemented, + self.cmd.take_action, + parsed_args, + ) + def test_quota_list_network(self): # Two projects with non-default quotas self.network.get_quota = mock.Mock(