From 9e98cf18cc09ba06ab329a01437c18dc2e998562 Mon Sep 17 00:00:00 2001 From: Mohan Madhavan Date: Tue, 31 May 2016 18:13:51 -0400 Subject: [PATCH] Fixes the 500 response code error when provider details dosent contain the access urls Change-Id: I12653f29f5dfeeb753e136d6346e996d385430e5 If providedr details are not found the code now Returns 404 instead of empty response body Change-Id: Ibf05de603a3e76104f2192baf49c937b6e83edef Response code returned from the transport layer instead of manager layer Change-Id: Icc17dc2618e6ab19dbdfdafb8930992d5d4ac819 --- poppy/common/errors.py | 7 +++++++ poppy/manager/default/analytics.py | 7 +++---- poppy/transport/pecan/controllers/v1/services.py | 2 ++ tests/unit/manager/default/test_analytics.py | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/poppy/common/errors.py b/poppy/common/errors.py index 1fb9ad61..8fd8e986 100644 --- a/poppy/common/errors.py +++ b/poppy/common/errors.py @@ -30,10 +30,17 @@ class BadProviderDetail(Exception): class ProviderNotFound(Exception): + """Raised when domain is not associated with a known Provider""" +class ProviderDetailsIncomplete(Exception): + + """Raised when domain details with a Provider is incomplete""" + + class ServiceNotFound(Exception): + """Raised when service is not found.""" diff --git a/poppy/manager/default/analytics.py b/poppy/manager/default/analytics.py index 31dca67a..5eb60817 100644 --- a/poppy/manager/default/analytics.py +++ b/poppy/manager/default/analytics.py @@ -12,7 +12,6 @@ # implied. # See the License for the specific language governing permissions and # limitations under the License. - from oslo_log import log from poppy.common import errors @@ -61,9 +60,9 @@ class AnalyticsController(base.AnalyticsController): provider_for_domain = provider if not provider_for_domain: - msg = "Provider not found for Domain : {0}".format(domain_name) - LOG.warning(msg) - raise errors.ProviderNotFound(msg) + msg = "Provider not found for Domain {0}".format(domain_name) + LOG.error(msg) + raise errors.ProviderDetailsIncomplete(msg) provider_obj = self.providers[provider_for_domain.lower()].obj provider_service_controller = provider_obj.service_controller diff --git a/poppy/transport/pecan/controllers/v1/services.py b/poppy/transport/pecan/controllers/v1/services.py index 3cd40f87..53d840f5 100644 --- a/poppy/transport/pecan/controllers/v1/services.py +++ b/poppy/transport/pecan/controllers/v1/services.py @@ -125,6 +125,8 @@ class ServicesAnalyticsController(base.Controller, hooks.HookController): ) except errors.ServiceNotFound: return pecan.Response(status=404) + except errors.ProviderDetailsIncomplete: + return pecan.Response(status=404) except Exception: return pecan.Response(status=500) else: diff --git a/tests/unit/manager/default/test_analytics.py b/tests/unit/manager/default/test_analytics.py index 1ddbe758..cce10159 100644 --- a/tests/unit/manager/default/test_analytics.py +++ b/tests/unit/manager/default/test_analytics.py @@ -172,7 +172,7 @@ class DefaultManagerServiceTests(base.TestCase): services_controller.get_service_details_by_domain_name = \ mock.Mock(return_value=StorageResult( provider_details=provider_details_dict)) - self.assertRaises(errors.ProviderNotFound, + self.assertRaises(errors.ProviderDetailsIncomplete, analytics_controller.get_metrics_by_domain, self.project_id, self.domain_name, **extras)