summaryrefslogtreecommitdiff
path: root/ceilometerclient/tests/unit/v2/test_alarms.py
diff options
context:
space:
mode:
Diffstat (limited to 'ceilometerclient/tests/unit/v2/test_alarms.py')
-rw-r--r--ceilometerclient/tests/unit/v2/test_alarms.py559
1 files changed, 0 insertions, 559 deletions
diff --git a/ceilometerclient/tests/unit/v2/test_alarms.py b/ceilometerclient/tests/unit/v2/test_alarms.py
deleted file mode 100644
index 20fa118..0000000
--- a/ceilometerclient/tests/unit/v2/test_alarms.py
+++ /dev/null
@@ -1,559 +0,0 @@
-#
-# Copyright 2013 Red Hat, Inc
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import copy
-
-import six
-from six.moves import xrange # noqa
-import testtools
-
-from ceilometerclient.apiclient import client
-from ceilometerclient.apiclient import fake_client
-from ceilometerclient import exc
-from ceilometerclient.v2 import alarms
-
-AN_ALARM = {u'alarm_actions': [u'http://site:8000/alarm'],
- u'ok_actions': [u'http://site:8000/ok'],
- u'description': u'An alarm',
- u'type': u'threshold',
- u'severity': 'low',
- u'threshold_rule': {
- u'meter_name': u'storage.objects',
- u'query': [{u'field': u'key_name',
- u'op': u'eq',
- u'value': u'key_value'}],
- u'evaluation_periods': 2,
- u'period': 240.0,
- u'statistic': u'avg',
- u'threshold': 200.0,
- u'comparison_operator': 'gt'},
- u'time_constraints': [
- {
- u'name': u'cons1',
- u'description': u'desc1',
- u'start': u'0 11 * * *',
- u'duration': 300,
- u'timezone': u''},
- {
- u'name': u'cons2',
- u'description': u'desc2',
- u'start': u'0 23 * * *',
- u'duration': 600,
- u'timezone': ''}],
- u'timestamp': u'2013-05-09T13:41:23.085000',
- u'enabled': True,
- u'alarm_id': u'alarm-id',
- u'state': u'ok',
- u'insufficient_data_actions': [u'http://site:8000/nodata'],
- u'user_id': u'user-id',
- u'project_id': u'project-id',
- u'state_timestamp': u'2013-05-09T13:41:23.085000',
- u'repeat_actions': False,
- u'name': 'SwiftObjectAlarm'}
-CREATE_ALARM = copy.deepcopy(AN_ALARM)
-del CREATE_ALARM['timestamp']
-del CREATE_ALARM['state_timestamp']
-del CREATE_ALARM['alarm_id']
-CREATE_ALARM_WITHOUT_TC = copy.deepcopy(CREATE_ALARM)
-del CREATE_ALARM_WITHOUT_TC['time_constraints']
-DELTA_ALARM = {u'alarm_actions': ['url1', 'url2']}
-DELTA_ALARM_RULE = {u'comparison_operator': u'lt',
- u'threshold': 42.1,
- u'meter_name': u'foobar',
- u'query': [{u'field': u'key_name',
- u'op': u'eq',
- u'value': u'key_value'}]}
-DELTA_ALARM_TC = [{u'name': u'cons1',
- u'duration': 500}]
-DELTA_ALARM['time_constraints'] = DELTA_ALARM_TC
-DELTA_ALARM['user_id'] = u'new-user-id'
-UPDATED_ALARM = copy.deepcopy(AN_ALARM)
-UPDATED_ALARM.update(DELTA_ALARM)
-UPDATED_ALARM['threshold_rule'].update(DELTA_ALARM_RULE)
-DELTA_ALARM['remove_time_constraints'] = 'cons2'
-UPDATED_ALARM['time_constraints'] = [{u'name': u'cons1',
- u'description': u'desc1',
- u'start': u'0 11 * * *',
- u'duration': 500,
- u'timezone': u''}]
-DELTA_ALARM['threshold_rule'] = DELTA_ALARM_RULE
-UPDATE_ALARM = copy.deepcopy(UPDATED_ALARM)
-UPDATE_ALARM['remove_time_constraints'] = 'cons2'
-UPDATE_ALARM['user_id'] = u'new-user-id'
-del UPDATE_ALARM['project_id']
-del UPDATE_ALARM['name']
-del UPDATE_ALARM['alarm_id']
-del UPDATE_ALARM['timestamp']
-del UPDATE_ALARM['state_timestamp']
-
-AN_LEGACY_ALARM = {u'alarm_actions': [u'http://site:8000/alarm'],
- u'ok_actions': [u'http://site:8000/ok'],
- u'description': u'An alarm',
- u'matching_metadata': {u'key_name': u'key_value'},
- u'evaluation_periods': 2,
- u'timestamp': u'2013-05-09T13:41:23.085000',
- u'enabled': True,
- u'meter_name': u'storage.objects',
- u'period': 240.0,
- u'alarm_id': u'alarm-id',
- u'state': u'ok',
- u'severity': u'low',
- u'insufficient_data_actions': [u'http://site:8000/nodata'],
- u'statistic': u'avg',
- u'threshold': 200.0,
- u'user_id': u'user-id',
- u'project_id': u'project-id',
- u'state_timestamp': u'2013-05-09T13:41:23.085000',
- u'comparison_operator': 'gt',
- u'repeat_actions': False,
- u'name': 'SwiftObjectAlarm'}
-CREATE_LEGACY_ALARM = copy.deepcopy(AN_LEGACY_ALARM)
-del CREATE_LEGACY_ALARM['timestamp']
-del CREATE_LEGACY_ALARM['state_timestamp']
-del CREATE_LEGACY_ALARM['alarm_id']
-DELTA_LEGACY_ALARM = {u'alarm_actions': ['url1', 'url2'],
- u'comparison_operator': u'lt',
- u'meter_name': u'foobar',
- u'threshold': 42.1}
-DELTA_LEGACY_ALARM['time_constraints'] = [{u'name': u'cons1',
- u'duration': 500}]
-DELTA_LEGACY_ALARM['user_id'] = u'new-user-id'
-DELTA_LEGACY_ALARM['remove_time_constraints'] = 'cons2'
-UPDATED_LEGACY_ALARM = copy.deepcopy(AN_LEGACY_ALARM)
-UPDATED_LEGACY_ALARM.update(DELTA_LEGACY_ALARM)
-UPDATE_LEGACY_ALARM = copy.deepcopy(UPDATED_LEGACY_ALARM)
-UPDATE_LEGACY_ALARM['user_id'] = u'new-user-id'
-del UPDATE_LEGACY_ALARM['project_id']
-del UPDATE_LEGACY_ALARM['name']
-del UPDATE_LEGACY_ALARM['alarm_id']
-del UPDATE_LEGACY_ALARM['timestamp']
-del UPDATE_LEGACY_ALARM['state_timestamp']
-
-FULL_DETAIL = ('{"alarm_actions": [], '
- '"user_id": "8185aa72421a4fd396d4122cba50e1b5", '
- '"name": "scombo", '
- '"timestamp": "2013-10-03T08:58:33.647912", '
- '"enabled": true, '
- '"state_timestamp": "2013-10-03T08:58:33.647912", '
- '"rule": {"operator": "or", "alarm_ids": '
- '["062cc907-3a9f-4867-ab3b-fa83212b39f7"]}, '
- '"alarm_id": "alarm-id, '
- '"state": "insufficient data", '
- '"insufficient_data_actions": [], '
- '"repeat_actions": false, '
- '"ok_actions": [], '
- '"project_id": "57d04f24d0824b78b1ea9bcecedbda8f", '
- '"type": "combination", '
- '"description": "Combined state of alarms '
- '062cc907-3a9f-4867-ab3b-fa83212b39f7"}')
-ALARM_HISTORY = [{'on_behalf_of': '57d04f24d0824b78b1ea9bcecedbda8f',
- 'user_id': '8185aa72421a4fd396d4122cba50e1b5',
- 'event_id': 'c74a8611-6553-4764-a860-c15a6aabb5d0',
- 'timestamp': '2013-10-03T08:59:28.326000',
- 'detail': '{"state": "alarm"}',
- 'alarm_id': 'alarm-id',
- 'project_id': '57d04f24d0824b78b1ea9bcecedbda8f',
- 'type': 'state transition'},
- {'on_behalf_of': '57d04f24d0824b78b1ea9bcecedbda8f',
- 'user_id': '8185aa72421a4fd396d4122cba50e1b5',
- 'event_id': 'c74a8611-6553-4764-a860-c15a6aabb5d0',
- 'timestamp': '2013-10-03T08:59:28.326000',
- 'detail': '{"description": "combination of one"}',
- 'alarm_id': 'alarm-id',
- 'project_id': '57d04f24d0824b78b1ea9bcecedbda8f',
- 'type': 'rule change'},
- {'on_behalf_of': '57d04f24d0824b78b1ea9bcecedbda8f',
- 'user_id': '8185aa72421a4fd396d4122cba50e1b5',
- 'event_id': '4fd7df9e-190d-4471-8884-dc5a33d5d4bb',
- 'timestamp': '2013-10-03T08:58:33.647000',
- 'detail': FULL_DETAIL,
- 'alarm_id': 'alarm-id',
- 'project_id': '57d04f24d0824b78b1ea9bcecedbda8f',
- 'type': 'creation'}]
-
-fixtures = {
- '/v2/alarms':
- {
- 'GET': (
- {},
- [AN_ALARM],
- ),
- 'POST': (
- {},
- CREATE_ALARM,
- ),
- },
- '/v2/alarms/alarm-id':
- {
- 'GET': (
- {},
- AN_ALARM,
- ),
- 'PUT': (
- {},
- UPDATED_ALARM,
- ),
- 'DELETE': (
- {},
- None,
- ),
- },
- '/v2/alarms/unk-alarm-id':
- {
- 'GET': (
- {},
- None,
- ),
- 'PUT': (
- {},
- None,
- ),
- },
- '/v2/alarms/alarm-id/state':
- {
- 'PUT': (
- {},
- {'alarm': 'alarm'}
- ),
- 'GET': (
- {},
- {'alarm': 'alarm'}
- ),
-
- },
- '/v2/alarms?q.field=project_id&q.field=name&q.op=&q.op='
- '&q.type=&q.type=&q.value=project-id&q.value=SwiftObjectAlarm':
- {
- 'GET': (
- {},
- [AN_ALARM],
- ),
- },
- '/v2/alarms/victim-id':
- {
- 'DELETE': (
- {},
- None,
- ),
- },
- '/v2/alarms/alarm-id/history':
- {
- 'GET': (
- {},
- ALARM_HISTORY,
- ),
- },
- '/v2/alarms/alarm-id/history?q.field=timestamp&q.op=&q.type=&q.value=NOW':
- {
- 'GET': (
- {},
- ALARM_HISTORY,
- ),
- },
-}
-
-
-class AlarmManagerTest(testtools.TestCase):
-
- def setUp(self):
- super(AlarmManagerTest, self).setUp()
- self.http_client = fake_client.FakeHTTPClient(fixtures=fixtures)
- self.api = client.BaseClient(self.http_client)
- self.mgr = alarms.AlarmManager(self.api)
-
- def test_list_all(self):
- alarms = list(self.mgr.list())
- expect = [
- 'GET', '/v2/alarms'
- ]
- self.http_client.assert_called(*expect)
- self.assertEqual(1, len(alarms))
- self.assertEqual('alarm-id', alarms[0].alarm_id)
-
- def test_list_with_query(self):
- alarms = list(self.mgr.list(q=[{"field": "project_id",
- "value": "project-id"},
- {"field": "name",
- "value": "SwiftObjectAlarm"}]))
- expect = [
- 'GET',
- '/v2/alarms?q.field=project_id&q.field=name&q.op=&q.op='
- '&q.type=&q.type=&q.value=project-id&q.value=SwiftObjectAlarm',
- ]
- self.http_client.assert_called(*expect)
- self.assertEqual(1, len(alarms))
- self.assertEqual('alarm-id', alarms[0].alarm_id)
-
- def test_get(self):
- alarm = self.mgr.get(alarm_id='alarm-id')
- expect = [
- 'GET', '/v2/alarms/alarm-id'
- ]
- self.http_client.assert_called(*expect)
- self.assertIsNotNone(alarm)
- self.assertEqual('alarm-id', alarm.alarm_id)
- self.assertEqual(alarm.rule, alarm.threshold_rule)
-
- def test_create(self):
- alarm = self.mgr.create(**CREATE_ALARM)
- expect = [
- 'POST', '/v2/alarms'
- ]
- self.http_client.assert_called(*expect, body=CREATE_ALARM)
- self.assertIsNotNone(alarm)
-
- def test_update(self):
- alarm = self.mgr.update(alarm_id='alarm-id', **UPDATE_ALARM)
- expect_get = [
- 'GET', '/v2/alarms/alarm-id'
- ]
- expect_put = [
- 'PUT', '/v2/alarms/alarm-id', UPDATED_ALARM
- ]
- self.http_client.assert_called(*expect_get, pos=0)
- self.http_client.assert_called(*expect_put, pos=1)
- self.assertIsNotNone(alarm)
- self.assertEqual('alarm-id', alarm.alarm_id)
- for (key, value) in six.iteritems(UPDATED_ALARM):
- self.assertEqual(getattr(alarm, key), value)
-
- def test_update_delta(self):
- alarm = self.mgr.update(alarm_id='alarm-id', **DELTA_ALARM)
- expect_get = [
- 'GET', '/v2/alarms/alarm-id'
- ]
- expect_put = [
- 'PUT', '/v2/alarms/alarm-id', UPDATED_ALARM
- ]
- self.http_client.assert_called(*expect_get, pos=0)
- self.http_client.assert_called(*expect_put, pos=1)
- self.assertIsNotNone(alarm)
- self.assertEqual('alarm-id', alarm.alarm_id)
- for (key, value) in six.iteritems(UPDATED_ALARM):
- self.assertEqual(getattr(alarm, key), value)
-
- def test_set_state(self):
- state = self.mgr.set_state(alarm_id='alarm-id', state='alarm')
- expect = [
- 'PUT', '/v2/alarms/alarm-id/state'
- ]
- self.http_client.assert_called(*expect, body='alarm')
- self.assertEqual({'alarm': 'alarm'}, state)
-
- def test_get_state(self):
- state = self.mgr.get_state(alarm_id='alarm-id')
- expect = [
- 'GET', '/v2/alarms/alarm-id/state'
- ]
- self.http_client.assert_called(*expect)
- self.assertEqual({'alarm': 'alarm'}, state)
-
- def test_delete(self):
- deleted = self.mgr.delete(alarm_id='victim-id')
- expect = [
- 'DELETE', '/v2/alarms/victim-id'
- ]
- self.http_client.assert_called(*expect)
- self.assertIsNone(deleted)
-
- def test_get_from_alarm_class(self):
- alarm = self.mgr.get(alarm_id='alarm-id')
- self.assertIsNotNone(alarm)
- alarm.get()
- expect = [
- 'GET', '/v2/alarms/alarm-id'
- ]
- self.http_client.assert_called(*expect, pos=0)
- self.http_client.assert_called(*expect, pos=1)
- 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.assertIsNotNone(alarm)
- state = alarm.get_state()
- expect_get_1 = [
- 'GET', '/v2/alarms/alarm-id'
- ]
- expect_get_2 = [
- 'GET', '/v2/alarms/alarm-id/state'
- ]
- self.http_client.assert_called(*expect_get_1, pos=0)
- self.http_client.assert_called(*expect_get_2, pos=1)
- self.assertEqual('alarm', state)
-
- def test_update_missing(self):
- alarm = None
- try:
- alarm = self.mgr.update(alarm_id='unk-alarm-id', **UPDATE_ALARM)
- except exc.CommandError:
- pass
- self.assertIsNone(alarm)
-
- def test_delete_from_alarm_class(self):
- alarm = self.mgr.get(alarm_id='alarm-id')
- self.assertIsNotNone(alarm)
- deleted = alarm.delete()
- expect_get = [
- 'GET', '/v2/alarms/alarm-id'
- ]
- expect_delete = [
- 'DELETE', '/v2/alarms/alarm-id'
- ]
- self.http_client.assert_called(*expect_get, pos=0)
- self.http_client.assert_called(*expect_delete, pos=1)
- self.assertIsNone(deleted)
-
- def _do_test_get_history(self, q, url):
- history = self.mgr.get_history(q=q, alarm_id='alarm-id')
- expect = ['GET', url]
- self.http_client.assert_called(*expect)
- for i in xrange(len(history)):
- change = history[i]
- self.assertIsInstance(change, alarms.AlarmChange)
- for k, v in six.iteritems(ALARM_HISTORY[i]):
- self.assertEqual(getattr(change, k), v)
-
- def test_get_all_history(self):
- url = '/v2/alarms/alarm-id/history'
- self._do_test_get_history(None, url)
-
- def test_get_constrained_history(self):
- q = [dict(field='timestamp', value='NOW')]
- url = ('/v2/alarms/alarm-id/history?q.field=timestamp'
- '&q.op=&q.type=&q.value=NOW')
- self._do_test_get_history(q, url)
-
-
-class AlarmLegacyManagerTest(testtools.TestCase):
-
- def setUp(self):
- super(AlarmLegacyManagerTest, self).setUp()
- self.http_client = fake_client.FakeHTTPClient(fixtures=fixtures)
- self.api = client.BaseClient(self.http_client)
- self.mgr = alarms.AlarmManager(self.api)
-
- def test_create(self):
- alarm = self.mgr.create(**CREATE_LEGACY_ALARM)
- expect = [
- 'POST', '/v2/alarms', CREATE_ALARM_WITHOUT_TC,
- ]
- self.http_client.assert_called(*expect)
- self.assertIsNotNone(alarm)
-
- def test_create_counter_name(self):
- create = {}
- create.update(CREATE_LEGACY_ALARM)
- create['counter_name'] = CREATE_LEGACY_ALARM['meter_name']
- del create['meter_name']
- alarm = self.mgr.create(**create)
- expect = [
- 'POST', '/v2/alarms', CREATE_ALARM_WITHOUT_TC,
- ]
- self.http_client.assert_called(*expect)
- self.assertIsNotNone(alarm)
-
- def test_update(self):
- alarm = self.mgr.update(alarm_id='alarm-id', **DELTA_LEGACY_ALARM)
- expect_put = [
- 'PUT', '/v2/alarms/alarm-id', UPDATED_ALARM
- ]
- self.http_client.assert_called(*expect_put)
- self.assertIsNotNone(alarm)
- self.assertEqual('alarm-id', alarm.alarm_id)
- for (key, value) in six.iteritems(UPDATED_ALARM):
- self.assertEqual(getattr(alarm, key), value)
-
- def test_update_counter_name(self):
- updated = {}
- updated.update(UPDATE_LEGACY_ALARM)
- updated['counter_name'] = UPDATED_LEGACY_ALARM['meter_name']
- del updated['meter_name']
- alarm = self.mgr.update(alarm_id='alarm-id', **updated)
- expect_put = [
- 'PUT', '/v2/alarms/alarm-id', UPDATED_ALARM
- ]
- self.http_client.assert_called(*expect_put)
- self.assertIsNotNone(alarm)
- self.assertEqual('alarm-id', alarm.alarm_id)
- for (key, value) in six.iteritems(UPDATED_ALARM):
- self.assertEqual(getattr(alarm, key), value)
-
-
-class AlarmTimeConstraintTest(testtools.TestCase):
-
- def setUp(self):
- super(AlarmTimeConstraintTest, self).setUp()
- self.http_client = fake_client.FakeHTTPClient(fixtures=fixtures)
- self.api = client.BaseClient(self.http_client)
- self.mgr = alarms.AlarmManager(self.api)
-
- def test_add_new(self):
- new_constraint = dict(name='cons3',
- start='0 0 * * *',
- duration=500)
- kwargs = dict(time_constraints=[new_constraint])
- self.mgr.update(alarm_id='alarm-id', **kwargs)
- body = copy.deepcopy(AN_ALARM)
- body[u'time_constraints'] = \
- AN_ALARM[u'time_constraints'] + [new_constraint]
- expect = [
- 'PUT', '/v2/alarms/alarm-id', body
- ]
- self.http_client.assert_called(*expect)
-
- def test_update_existing(self):
- updated_constraint = dict(name='cons2',
- duration=500)
- kwargs = dict(time_constraints=[updated_constraint])
- self.mgr.update(alarm_id='alarm-id', **kwargs)
- body = copy.deepcopy(AN_ALARM)
- body[u'time_constraints'][1] = dict(name='cons2',
- description='desc2',
- start='0 23 * * *',
- duration=500,
- timezone='')
-
- expect = [
- 'PUT', '/v2/alarms/alarm-id', body
- ]
- self.http_client.assert_called(*expect)
-
- def test_update_time_constraint_no_name(self):
- updated_constraint = {
- 'start': '0 23 * * *',
- 'duration': 500
- }
- kwargs = dict(time_constraints=[updated_constraint])
- self.mgr.update(alarm_id='alarm-id', **kwargs)
- body = copy.deepcopy(AN_ALARM)
- body[u'time_constraints'].append({
- 'start': '0 23 * * *',
- 'duration': 500,
- })
- expect = [
- 'PUT', '/v2/alarms/alarm-id', body
- ]
- self.http_client.assert_called(*expect)
-
- def test_remove(self):
- kwargs = dict(remove_time_constraints=['cons2'])
- self.mgr.update(alarm_id='alarm-id', **kwargs)
- body = copy.deepcopy(AN_ALARM)
- body[u'time_constraints'] = AN_ALARM[u'time_constraints'][:1]
- expect = [
- 'PUT', '/v2/alarms/alarm-id', body
- ]
- self.http_client.assert_called(*expect)