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
This commit is contained in:
@@ -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)]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user