diff --git a/ceilometer/api/controllers/v2.py b/ceilometer/api/controllers/v2.py index db81ad1314..164ff3a95e 100644 --- a/ceilometer/api/controllers/v2.py +++ b/ceilometer/api/controllers/v2.py @@ -88,6 +88,17 @@ class EntityNotFound(ClientSideError): status_code=404) +class AlarmNotFound(ClientSideError): + def __init__(self, alarm, auth_project): + if not auth_project: + msg = _('Alarm %s not found') % alarm + else: + msg = _('Alarm %(alarm_id)s not found in project %' + '(project)s') % { + 'alarm_id': alarm, 'project': auth_project} + super(AlarmNotFound, self).__init__(msg, status_code=404) + + class AdvEnum(wtypes.wsproperty): """Handle default and mandatory for wtypes.Enum.""" def __init__(self, name, *args, **kwargs): @@ -1767,7 +1778,7 @@ class Alarm(_Base): alarms = list(pecan.request.storage_conn.get_alarms( alarm_id=id, project=project)) if not alarms: - raise EntityNotFound(_('Alarm'), id) + raise AlarmNotFound(id, project) tc_names = [tc.name for tc in alarm.time_constraints] if len(tc_names) > len(set(tc_names)): @@ -1881,7 +1892,7 @@ class AlarmController(rest.RestController): alarms = list(self.conn.get_alarms(alarm_id=self._id, project=auth_project)) if not alarms: - raise EntityNotFound(_('Alarm'), self._id) + raise AlarmNotFound(alarm=self._id, auth_project=auth_project) return alarms[0] def _record_change(self, data, now, on_behalf_of=None, type=None): diff --git a/ceilometer/tests/api/v2/test_alarm_scenarios.py b/ceilometer/tests/api/v2/test_alarm_scenarios.py index 70575341da..9d2525a40b 100644 --- a/ceilometer/tests/api/v2/test_alarm_scenarios.py +++ b/ceilometer/tests/api/v2/test_alarm_scenarios.py @@ -234,7 +234,7 @@ class TestAlarms(v2.FunctionalTest, def test_get_not_existing_alarm(self): resp = self.get_json('/alarms/alarm-id-3', expect_errors=True) self.assertEqual(404, resp.status_code) - self.assertEqual("Alarm alarm-id-3 Not Found", + self.assertEqual('Alarm alarm-id-3 not found', jsonutils.loads(resp.body)['error_message'] ['faultstring']) @@ -1088,7 +1088,9 @@ class TestAlarms(v2.FunctionalTest, 'X-Project-Id': str(uuid.uuid4())} resp = self.post_json('/alarms', params=json, status=404, headers=an_other_user_auth) - self.assertEqual("Alarm a Not Found", + self.assertEqual("Alarm a not found in project " + "%s" % + an_other_user_auth['X-Project-Id'], jsonutils.loads(resp.body)['error_message'] ['faultstring']) @@ -1121,7 +1123,8 @@ class TestAlarms(v2.FunctionalTest, headers['X-Roles'] = 'admin' resp = self.post_json('/alarms', params=json, status=404, headers=headers) - self.assertEqual("Alarm a Not Found", + self.assertEqual("Alarm a not found in project " + "aprojectidthatisnotmine", jsonutils.loads(resp.body)['error_message'] ['faultstring']) diff --git a/ceilometer/tests/api/v2/test_app.py b/ceilometer/tests/api/v2/test_app.py index b98898efca..dafc39d237 100644 --- a/ceilometer/tests/api/v2/test_app.py +++ b/ceilometer/tests/api/v2/test_app.py @@ -213,12 +213,12 @@ class TestApiMiddleware(v2.FunctionalTest): def test_translated_then_untranslated_error(self): resp = self.get_json('/alarms/alarm-id-3', expect_errors=True) self.assertEqual(404, resp.status_code) - self.assertEqual("Alarm alarm-id-3 Not Found", + self.assertEqual("Alarm alarm-id-3 not found", json.loads(resp.body)['error_message'] ['faultstring']) with mock.patch('ceilometer.api.controllers.' - 'v2.EntityNotFound') as CustomErrorClass: + 'v2.AlarmNotFound') as CustomErrorClass: CustomErrorClass.return_value = wsme.exc.ClientSideError( "untranslated_error", status_code=404) resp = self.get_json('/alarms/alarm-id-5', expect_errors=True)