summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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/tests/v2/test_shell.py46
-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.py6
8 files changed, 137 insertions, 35 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/tests/v2/test_shell.py b/ceilometerclient/tests/v2/test_shell.py
index 819e938..69e6a50 100644
--- a/ceilometerclient/tests/v2/test_shell.py
+++ b/ceilometerclient/tests/v2/test_shell.py
@@ -178,6 +178,20 @@ class ShellAlarmCommandTest(utils.BaseTestCase):
"type": "threshold",
"name": "cpu_high"}
+ THRESHOLD_ALARM_CLI_ARGS = [
+ '--name', 'cpu_high',
+ '--description', 'instance running hot',
+ '--meter-name', 'cpu_util',
+ '--threshold', '70.0',
+ '--comparison-operator', 'gt',
+ '--statistic', 'avg',
+ '--period', '600',
+ '--evaluation-periods', '3',
+ '--alarm-action', 'log://',
+ '--alarm-action', 'http://example.com/alarm/state',
+ '--query', 'resource_id=INSTANCE_ID'
+ ]
+
def setUp(self):
super(ShellAlarmCommandTest, self).setUp()
self.cc = mock.Mock()
@@ -241,26 +255,28 @@ class ShellAlarmCommandTest(utils.BaseTestCase):
@mock.patch('sys.stdout', new=six.StringIO())
def test_alarm_threshold_create_args(self):
+ argv = ['alarm-threshold-create'] + self.THRESHOLD_ALARM_CLI_ARGS
+ self._test_alarm_threshold_action_args('create', argv)
+
+ def test_alarm_threshold_update_args(self):
+ argv = ['alarm-threshold-update',
+ '--alarm_id', 'x'] + self.THRESHOLD_ALARM_CLI_ARGS
+ self._test_alarm_threshold_action_args('update', argv)
+
+ @mock.patch('sys.stdout', new=six.StringIO())
+ def _test_alarm_threshold_action_args(self, action, argv):
shell = base_shell.CeilometerShell()
- argv = ['alarm-threshold-create',
- '--name', 'cpu_high',
- '--description', 'instance running hot',
- '--meter-name', 'cpu_util',
- '--threshold', '70.0',
- '--comparison-operator', 'gt',
- '--statistic', 'avg',
- '--period', '600',
- '--evaluation-periods', '3',
- '--alarm-action', 'log://',
- '--alarm-action', 'http://example.com/alarm/state',
- '--query', 'resource_id=INSTANCE_ID']
_, args = shell.parse_args(argv)
alarm = alarms.Alarm(mock.Mock(), self.ALARM)
- self.cc.alarms.create.return_value = alarm
+ getattr(self.cc.alarms, action).return_value = alarm
- ceilometer_shell.do_alarm_threshold_create(self.cc, args)
- _, kwargs = self.cc.alarms.create.call_args
+ func = getattr(ceilometer_shell, 'do_alarm_threshold_' + action)
+ func(self.cc, args)
+ _, kwargs = getattr(self.cc.alarms, action).call_args
+ self._check_alarm_threshold_args(kwargs)
+
+ def _check_alarm_threshold_args(self, kwargs):
self.assertEqual('cpu_high', kwargs.get('name'))
self.assertEqual('instance running hot', kwargs.get('description'))
actions = ['log://', 'http://example.com/alarm/state']
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 9be9b02..b13ab20 100644
--- a/ceilometerclient/v2/shell.py
+++ b/ceilometerclient/v2/shell.py
@@ -322,9 +322,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)
@@ -545,6 +544,7 @@ def do_alarm_update(cc, args={}):
dest='threshold_rule/threshold',
help='Threshold to evaluate against.')
@utils.arg('-q', '--query', metavar='<QUERY>',
+ dest='threshold_rule/query',
help='key[op]data_type::value; list. data_type is optional, '
'but if supplied must be string, integer, float, or boolean.')
@utils.arg('--repeat-actions', dest='repeat_actions',