Fixed HTTP error code for alarm-definitions

Problem: Received HTTP 422 Unprocessible Entity when alarm definition
	id is not specified in query instead of HTTP 400 Bad Request.

	Solution: Modified on_delete(), on_patch(), and on_put() to return
	HTTP 400 Bad Request.

Change-Id: I668d1f7cd257abbdf5d5d6b78552a152bd67aa60
This commit is contained in:
Habeeb Mohammed 2017-06-16 09:21:42 -06:00
parent 15578c254c
commit 6e81a61900
3 changed files with 13 additions and 10 deletions

View File

@ -422,7 +422,7 @@ class TestAlarmDefinition(AlarmTestBase):
self.simulate_request("/v2.0/alarm-definitions/", headers={'X-Roles': 'admin', 'X-Tenant-Id': TENANT_ID},
method="PATCH", body=json.dumps(alarm_def))
self.assertEqual(self.srmock.status, falcon.HTTP_422)
self.assertEqual(self.srmock.status, falcon.HTTP_400)
def test_alarm_definition_update_no_id(self):
alarm_def = {
@ -432,14 +432,14 @@ class TestAlarmDefinition(AlarmTestBase):
self.simulate_request("/v2.0/alarm-definitions/", headers={'X-Roles': 'admin', 'X-Tenant-Id': TENANT_ID},
method="PUT", body=json.dumps(alarm_def))
self.assertEqual(self.srmock.status, falcon.HTTP_422)
self.assertEqual(self.srmock.status, falcon.HTTP_400)
def test_alarm_definition_delete_no_id(self):
self.simulate_request("/v2.0/alarm-definitions/", headers={'X-Roles': 'admin', 'X-Tenant-Id': TENANT_ID},
method="DELETE")
self.assertEqual(self.srmock.status, falcon.HTTP_422)
self.assertEqual(self.srmock.status, falcon.HTTP_400)
def test_alarm_definition_patch(self):
self.alarm_def_repo_mock.return_value.get_alarm_definitions.return_value = []

View File

@ -1,4 +1,4 @@
# (C) Copyright 2015,2016 Hewlett Packard Enterprise Development Company LP
# (C) Copyright 2015,2016,2017 Hewlett Packard Enterprise Development Company LP
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
@ -18,3 +18,8 @@ from falcon.http_error import HTTPError
class HTTPUnprocessableEntityError(HTTPError):
def __init__(self, title, description, **kwargs):
HTTPError.__init__(self, '422 Unprocessable Entity', title, description, **kwargs)
class HTTPBadRequestError(HTTPError):
def __init__(self, title, description, **kwargs):
HTTPError.__init__(self, '400 Bad Request', title, description, **kwargs)

View File

@ -24,6 +24,7 @@ import pyparsing
from monasca_api.api import alarm_definitions_api_v2
from monasca_api.common.repositories import exceptions
import monasca_api.expression_parser.alarm_expr_parser
from monasca_api.v2.common.exceptions import HTTPBadRequestError
from monasca_api.v2.common.exceptions import HTTPUnprocessableEntityError
from monasca_api.v2.common.schemas import (
alarm_definition_request_body_schema as schema_alarms)
@ -134,8 +135,7 @@ class AlarmDefinitions(alarm_definitions_api_v2.AlarmDefinitionsV2API,
def on_put(self, req, res, alarm_definition_id=None):
if not alarm_definition_id:
raise HTTPUnprocessableEntityError('Unprocessable Entity',
'Alarm definition ID not provided')
raise HTTPBadRequestError('Bad Request', 'Alarm definition ID not provided')
helpers.validate_authorization(req, self._default_authorized_roles)
@ -176,8 +176,7 @@ class AlarmDefinitions(alarm_definitions_api_v2.AlarmDefinitionsV2API,
def on_patch(self, req, res, alarm_definition_id=None):
if not alarm_definition_id:
raise HTTPUnprocessableEntityError('Unprocessable Entity',
'Alarm definition ID not provided')
raise HTTPBadRequestError('Bad Request', 'Alarm definition ID not provided')
helpers.validate_authorization(req, self._default_authorized_roles)
@ -225,8 +224,7 @@ class AlarmDefinitions(alarm_definitions_api_v2.AlarmDefinitionsV2API,
def on_delete(self, req, res, alarm_definition_id=None):
if not alarm_definition_id:
raise HTTPUnprocessableEntityError('Unprocessable Entity',
'Alarm definition ID not provided')
raise HTTPBadRequestError('Bad Request', 'Alarm definition ID not provided')
helpers.validate_authorization(req, self._default_authorized_roles)
self._alarm_definition_delete(req.project_id, alarm_definition_id)