1
# -*- encoding: utf-8 -*-
3
# Copyright © 2013 eNovance <licensing@enovance.com>
5
# Author: Mehdi Abaakouk <mehdi.abaakouk@enovance.com>
6
# Angus Salkeld <asalkeld@redhat.com>
8
# Licensed under the Apache License, Version 2.0 (the 'License'); you may
9
# not use this file except in compliance with the License. You may obtain
10
# a copy of the License at
12
# http://www.apache.org/licenses/LICENSE-2.0
14
# Unless required by applicable law or agreed to in writing, software
15
# distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
16
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17
# License for the specific language governing permissions and limitations
19
'''Tests alarm operation
25
from .base import FunctionalTest
27
from ceilometer.storage.models import Alarm
29
LOG = logging.getLogger(__name__)
32
class TestListEmptyAlarms(FunctionalTest):
35
data = self.get_json('/alarms')
36
self.assertEquals([], data)
39
class TestAlarms(FunctionalTest):
42
super(TestAlarms, self).setUp()
44
self.auth_headers = {'X-User-Id': str(uuid.uuid1()),
45
'X-Project-Id': str(uuid.uuid1())}
46
for alarm in [Alarm(name='name1',
47
counter_name='meter.test',
48
comparison_operator='gt', threshold=2.0,
50
user_id=self.auth_headers['X-User-Id'],
51
project_id=self.auth_headers['X-Project-Id']),
53
counter_name='meter.mine',
54
comparison_operator='gt', threshold=2.0,
56
user_id=self.auth_headers['X-User-Id'],
57
project_id=self.auth_headers['X-Project-Id']),
59
counter_name='meter.test',
60
comparison_operator='gt', threshold=2.0,
62
user_id=self.auth_headers['X-User-Id'],
63
project_id=self.auth_headers['X-Project-Id'])]:
64
self.conn.update_alarm(alarm)
66
def test_list_alarms(self):
67
data = self.get_json('/alarms')
68
self.assertEquals(3, len(data))
69
self.assertEquals(set(r['name'] for r in data),
73
self.assertEquals(set(r['counter_name'] for r in data),
77
def test_get_alarm(self):
78
alarms = self.get_json('/alarms',
83
print '%s: %s' % (a['name'], a['alarm_id'])
84
self.assertEquals(alarms[0]['name'], 'name1')
85
self.assertEquals(alarms[0]['counter_name'], 'meter.test')
87
one = self.get_json('/alarms/%s' % alarms[0]['alarm_id'])
88
self.assertEquals(one['name'], 'name1')
89
self.assertEquals(one['counter_name'], 'meter.test')
90
self.assertEquals(one['alarm_id'], alarms[0]['alarm_id'])
92
def test_post_invalid_alarm(self):
94
'name': 'added_alarm',
95
'counter_name': 'ameter',
96
'comparison_operator': 'gt',
100
self.post_json('/alarms', params=json, expect_errors=True, status=400,
101
headers=self.auth_headers)
102
alarms = list(self.conn.get_alarms())
103
self.assertEquals(3, len(alarms))
105
def test_post_alarm(self):
107
'name': 'added_alarm',
108
'counter_name': 'ameter',
109
'comparison_operator': 'gt',
113
self.post_json('/alarms', params=json, status=200,
114
headers=self.auth_headers)
115
alarms = list(self.conn.get_alarms())
116
self.assertEquals(4, len(alarms))
118
def test_put_alarm(self):
120
'name': 'renamed_alarm',
122
data = self.get_json('/alarms',
126
self.assertEquals(1, len(data))
127
alarm_id = data[0]['alarm_id']
129
self.put_json('/alarms/%s' % alarm_id,
131
headers=self.auth_headers)
132
alarm = list(self.conn.get_alarms(alarm_id=alarm_id))[0]
133
self.assertEquals(alarm.name, json['name'])
135
def test_put_alarm_wrong_field(self):
137
Note: wsme will ignore unknown fields so will
138
just not appear in the Alarm.
141
'name': 'renamed_alarm',
142
'this_can_not_be_correct': 'ha',
144
data = self.get_json('/alarms',
148
headers=self.auth_headers)
149
self.assertEquals(1, len(data))
151
resp = self.put_json('/alarms/%s' % data[0]['alarm_id'],
154
headers=self.auth_headers)
155
self.assertEquals(resp.status_code, 200)
157
def test_delete_alarm(self):
158
data = self.get_json('/alarms')
159
self.assertEquals(3, len(data))
161
self.delete('/alarms/%s' % data[0]['alarm_id'],
163
alarms = list(self.conn.get_alarms())
164
self.assertEquals(2, len(alarms))