diff options
author | Artur Svechnikov <asvechnikov@mirantis.com> | 2014-05-01 17:00:26 +0400 |
---|---|---|
committer | Artur Svechnikov <asvechnikov@mirantis.com> | 2014-06-16 14:42:16 +0400 |
commit | b8a3fe54c06c7e04314d39da80b5964a589356f0 (patch) | |
tree | c5fbeeeedf763c52a96860314b8ebaf7a02aa274 | |
parent | 4862913edd70a2b18279283f32979a4fc16977b5 (diff) | |
download | python-ceilometerclient-b8a3fe54c06c7e04314d39da80b5964a589356f0.tar.gz |
Add methods to resource classes
Resource classes of managers should have methods
like delete() and get(). Basicly base.Resource
class has method get(), which uses id attribute,
but classes Alarm, Event, etc. have no this attribute.
Added intercept getting of id in the resource classes.
Also added catch of HTTPNotFound for alarm get()
because it affects correct functionality of
scenario tests.
Closes-Bug: #1312146
Change-Id: Ie598b73c64dece2185955467936dc6544a8a3dc7
-rw-r--r-- | ceilometerclient/tests/v2/test_alarms.py | 38 | ||||
-rw-r--r-- | ceilometerclient/tests/v2/test_events.py | 45 | ||||
-rw-r--r-- | ceilometerclient/tests/v2/test_resources.py | 11 | ||||
-rw-r--r-- | ceilometerclient/v2/alarms.py | 16 | ||||
-rw-r--r-- | ceilometerclient/v2/events.py | 5 | ||||
-rw-r--r-- | ceilometerclient/v2/resources.py | 5 | ||||
-rw-r--r-- | ceilometerclient/v2/shell.py | 5 |
7 files changed, 105 insertions, 20 deletions
diff --git a/ceilometerclient/tests/v2/test_alarms.py b/ceilometerclient/tests/v2/test_alarms.py index 13d04d1..ad6a811 100644 --- a/ceilometerclient/tests/v2/test_alarms.py +++ b/ceilometerclient/tests/v2/test_alarms.py @@ -201,6 +201,10 @@ fixtures = { {}, UPDATED_ALARM, ), + 'DELETE': ( + {}, + None, + ), }, '/v2/alarms/alarm-id/state': { @@ -343,6 +347,40 @@ class AlarmManagerTest(testtools.TestCase): self.assertEqual(self.api.calls, expect) self.assertTrue(deleted is None) + def test_get_from_alarm_class(self): + alarm = self.mgr.get(alarm_id='alarm-id') + self.assertTrue(alarm) + alarm.get() + expect = [ + ('GET', '/v2/alarms/alarm-id', {}, None), + ('GET', '/v2/alarms/alarm-id', {}, None) + ] + self.assertEqual(expect, self.api.calls) + self.assertEqual('alarm-id', alarm.alarm_id) + self.assertEqual(alarm.threshold_rule, alarm.rule) + + def test_get_state_from_alarm_class(self): + alarm = self.mgr.get(alarm_id='alarm-id') + self.assertTrue(alarm) + state = alarm.get_state() + expect = [ + ('GET', '/v2/alarms/alarm-id', {}, None), + ('GET', '/v2/alarms/alarm-id/state', {}, None) + ] + self.assertEqual(expect, self.api.calls) + self.assertEqual('alarm', state) + + def test_delete_from_alarm_class(self): + alarm = self.mgr.get(alarm_id='alarm-id') + self.assertTrue(alarm) + deleted = alarm.delete() + expect = [ + ('GET', '/v2/alarms/alarm-id', {}, None), + ('DELETE', '/v2/alarms/alarm-id', {}, None) + ] + self.assertEqual(expect, self.api.calls) + self.assertTrue(deleted is None) + def _do_test_get_history(self, q, url): history = self.mgr.get_history(q=q, alarm_id='alarm-id') expect = [('GET', url, {}, None)] diff --git a/ceilometerclient/tests/v2/test_events.py b/ceilometerclient/tests/v2/test_events.py index 96cf7f5..4935d8b 100644 --- a/ceilometerclient/tests/v2/test_events.py +++ b/ceilometerclient/tests/v2/test_events.py @@ -22,22 +22,22 @@ fixtures = { {}, [ { + 'message_id': '1', 'event_type': 'Foo', 'generated': '1970-01-01T00:00:00', - 'traits': {'trait_A': 'abc', - 'message_id': '1'}, + 'traits': {'trait_A': 'abc'}, }, { + 'message_id': '2', 'event_type': 'Foo', 'generated': '1970-01-01T00:00:00', - 'traits': {'trait_A': 'def', - 'message_id': '2'}, + 'traits': {'trait_A': 'def'}, }, { + 'message_id': '3', 'event_type': 'Bar', 'generated': '1970-01-01T00:00:00', - 'traits': {'trait_B': 'bartrait', - 'message_id': '3'}, + 'traits': {'trait_B': 'bartrait'}, }, ] ), @@ -48,18 +48,18 @@ fixtures = { {}, [ { + 'message_id': '1', 'event_type': 'Foo', 'generated': '1970-01-01T00:00:00', 'traits': {'trait_A': 'abc', - 'hostname': 'localhost', - 'message_id': '1'}, + 'hostname': 'localhost'}, }, { + 'message_id': '2', 'event_type': 'Foo', 'generated': '1970-01-01T00:00:00', 'traits': {'trait_A': 'def', - 'hostname': 'localhost', - 'message_id': '2'}, + 'hostname': 'localhost'}, } ] ), @@ -70,18 +70,18 @@ fixtures = { {}, [ { + 'message_id': '1', 'event_type': 'Foo', 'generated': '1970-01-01T00:00:00', 'traits': {'trait_A': 'abc', - 'hostname': 'foreignhost', - 'message_id': '1'}, + 'hostname': 'foreignhost'}, }, { + 'message_id': '2', 'event_type': 'Foo', 'generated': '1970-01-01T00:00:00', 'traits': {'trait_A': 'def', - 'hostname': 'foreignhost', - 'message_id': '2'}, + 'hostname': 'foreignhost'}, } ] ), @@ -93,12 +93,12 @@ fixtures = { {}, [ { + 'message_id': '1', 'event_type': 'Bar', 'generated': '1970-01-01T00:00:00', 'traits': {'trait_A': 'abc', 'hostname': 'localhost', - 'num_cpus': '5', - 'message_id': '1'}, + 'num_cpus': '5'}, }, ] ), @@ -109,10 +109,10 @@ fixtures = { 'GET': ( {}, { + 'message_id': '2', 'event_type': 'Foo', 'generated': '1970-01-01T00:00:00', 'traits': {'trait_A': 'def', - 'message_id': '2', 'intTrait': '42'}, } ), @@ -186,3 +186,14 @@ class EventManagerTest(utils.BaseTestCase): ] self.assertEqual(self.api.calls, expect) self.assertEqual(len(events), 1) + + def test_get_from_event_class(self): + event = self.mgr.get(2) + self.assertTrue(event) + event.get() + expect = [ + ('GET', '/v2/events/2', {}, None), + ('GET', '/v2/events/2', {}, None), + ] + self.assertEqual(expect, self.api.calls) + self.assertEqual('Foo', event.event_type) diff --git a/ceilometerclient/tests/v2/test_resources.py b/ceilometerclient/tests/v2/test_resources.py index 13a29fe..d62ce40 100644 --- a/ceilometerclient/tests/v2/test_resources.py +++ b/ceilometerclient/tests/v2/test_resources.py @@ -104,3 +104,14 @@ class ResourceManagerTest(utils.BaseTestCase): self.assertEqual(self.api.calls, expect) self.assertEqual(len(resources), 1) self.assertEqual(resources[0].resource_id, 'a') + + def test_get_from_resource_class(self): + resource = self.mgr.get(resource_id='a') + self.assertTrue(resource) + resource.get() + expect = [ + ('GET', '/v2/resources/a', {}, None), + ('GET', '/v2/resources/a', {}, None), + ] + self.assertEqual(expect, self.api.calls) + self.assertEqual('a', resource.resource_id) diff --git a/ceilometerclient/v2/alarms.py b/ceilometerclient/v2/alarms.py index 50fa1e4..7c46fb2 100644 --- a/ceilometerclient/v2/alarms.py +++ b/ceilometerclient/v2/alarms.py @@ -19,6 +19,7 @@ import warnings from ceilometerclient.common import base from ceilometerclient.common import utils +from ceilometerclient import exc from ceilometerclient.v2 import options @@ -48,8 +49,16 @@ class Alarm(base.Resource): # that look like the Alarm storage object if k == 'rule': k = '%s_rule' % self.type + if k == 'id': + return self.alarm_id return super(Alarm, self).__getattr__(k) + def delete(self): + return self.manager.delete(self.alarm_id) + + def get_state(self): + return self.manager.get_state(self.alarm_id) + class AlarmChange(base.Resource): def __repr__(self): @@ -74,6 +83,13 @@ class AlarmManager(base.Manager): return self._list(self._path(alarm_id), expect_single=True)[0] except IndexError: return None + except exc.HTTPNotFound: + # When we try to get deleted alarm HTTPNotFound occurs + # or when alarm doesn't exists this exception don't must + # go deeper because cleanUp() (method which remove all + # created things like instance, alarm, etc.) at scenario + # tests doesn't know how to process it + return None @classmethod def _compat_legacy_alarm_kwargs(cls, kwargs, create=False): diff --git a/ceilometerclient/v2/events.py b/ceilometerclient/v2/events.py index bf96d4c..32380d6 100644 --- a/ceilometerclient/v2/events.py +++ b/ceilometerclient/v2/events.py @@ -20,6 +20,11 @@ class Event(base.Resource): def __repr__(self): return "<Event %s>" % self._info + def __getattr__(self, k): + if k == 'id': + return self.message_id + return super(Event, self).__getattr__(k) + class EventManager(base.Manager): resource_class = Event diff --git a/ceilometerclient/v2/resources.py b/ceilometerclient/v2/resources.py index 897033e..99e6fd5 100644 --- a/ceilometerclient/v2/resources.py +++ b/ceilometerclient/v2/resources.py @@ -21,6 +21,11 @@ class Resource(base.Resource): def __repr__(self): return "<Resource %s>" % self._info + def __getattr__(self, k): + if k == 'id': + return self.resource_id + return super(Resource, self).__getattr__(k) + class ResourceManager(base.Manager): resource_class = Resource diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py index 7c4629b..6237259 100644 --- a/ceilometerclient/v2/shell.py +++ b/ceilometerclient/v2/shell.py @@ -321,9 +321,8 @@ def _display_alarm(alarm): help='ID of the alarm to show.') def do_alarm_show(cc, args={}): '''Show an alarm.''' - try: - alarm = cc.alarms.get(args.alarm_id) - except exc.HTTPNotFound: + alarm = cc.alarms.get(args.alarm_id) + if alarm is None: raise exc.CommandError('Alarm not found: %s' % args.alarm_id) else: _display_alarm(alarm) |