summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtur Svechnikov <asvechnikov@mirantis.com>2014-05-01 17:00:26 +0400
committerArtur Svechnikov <asvechnikov@mirantis.com>2014-06-16 14:42:16 +0400
commitb8a3fe54c06c7e04314d39da80b5964a589356f0 (patch)
treec5fbeeeedf763c52a96860314b8ebaf7a02aa274
parent4862913edd70a2b18279283f32979a4fc16977b5 (diff)
downloadpython-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.py38
-rw-r--r--ceilometerclient/tests/v2/test_events.py45
-rw-r--r--ceilometerclient/tests/v2/test_resources.py11
-rw-r--r--ceilometerclient/v2/alarms.py16
-rw-r--r--ceilometerclient/v2/events.py5
-rw-r--r--ceilometerclient/v2/resources.py5
-rw-r--r--ceilometerclient/v2/shell.py5
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)