blob: cb2d2bd0b5aa6e1172ce61390fe00f5120ae4f29 [file] [log] [blame]
vrovachev95a16cc2014-02-04 15:29:48 +04001# Licensed under the Apache License, Version 2.0 (the "License"); you may
2# not use this file except in compliance with the License. You may obtain
3# a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10# License for the specific language governing permissions and limitations
11# under the License.
12
Masayuki Igawabfa07602015-01-20 18:47:17 +090013from tempest_lib import exceptions as lib_exc
14
vrovachev95a16cc2014-02-04 15:29:48 +040015from tempest.api.telemetry import base
nayna-patela4c56c92014-03-24 12:16:52 +000016from tempest.common.utils import data_utils
Matthew Treinish5c660ab2014-05-18 21:14:36 -040017from tempest import test
vrovachev95a16cc2014-02-04 15:29:48 +040018
19
20class TelemetryAlarmingAPITestJSON(base.BaseTelemetryTest):
vrovachev95a16cc2014-02-04 15:29:48 +040021
nayna-patela4c56c92014-03-24 12:16:52 +000022 @classmethod
Andrea Frittolic76d04d2014-09-15 13:14:54 +010023 def resource_setup(cls):
24 super(TelemetryAlarmingAPITestJSON, cls).resource_setup()
nayna-patela4c56c92014-03-24 12:16:52 +000025 cls.rule = {'meter_name': 'cpu_util',
26 'comparison_operator': 'gt',
27 'threshold': 80.0,
28 'period': 70}
29 for i in range(2):
30 cls.create_alarm(threshold_rule=cls.rule)
31
Matthew Treinish5c660ab2014-05-18 21:14:36 -040032 @test.attr(type="gate")
vrovachev95a16cc2014-02-04 15:29:48 +040033 def test_alarm_list(self):
nayna-patelc3a39ba2014-03-12 13:28:05 +000034 # List alarms
David Kranz20d06f42015-02-09 14:54:15 -050035 alarm_list = self.telemetry_client.list_alarms()
vrovachev95a16cc2014-02-04 15:29:48 +040036
nayna-patelc3a39ba2014-03-12 13:28:05 +000037 # Verify created alarm in the list
38 fetched_ids = [a['alarm_id'] for a in alarm_list]
nayna-patela4c56c92014-03-24 12:16:52 +000039 missing_alarms = [a for a in self.alarm_ids if a not in fetched_ids]
nayna-patelc3a39ba2014-03-12 13:28:05 +000040 self.assertEqual(0, len(missing_alarms),
41 "Failed to find the following created alarm(s)"
42 " in a fetched list: %s" %
43 ', '.join(str(a) for a in missing_alarms))
44
Matthew Treinish5c660ab2014-05-18 21:14:36 -040045 @test.attr(type="gate")
nayna-patela4c56c92014-03-24 12:16:52 +000046 def test_create_update_get_delete_alarm(self):
47 # Create an alarm
48 alarm_name = data_utils.rand_name('telemetry_alarm')
David Kranz20d06f42015-02-09 14:54:15 -050049 body = self.telemetry_client.create_alarm(
nayna-patela4c56c92014-03-24 12:16:52 +000050 name=alarm_name, type='threshold', threshold_rule=self.rule)
nayna-patela4c56c92014-03-24 12:16:52 +000051 self.assertEqual(alarm_name, body['name'])
52 alarm_id = body['alarm_id']
53 self.assertDictContainsSubset(self.rule, body['threshold_rule'])
54 # Update alarm with new rule and new name
55 new_rule = {'meter_name': 'cpu',
56 'comparison_operator': 'eq',
57 'threshold': 70.0,
58 'period': 60}
59 alarm_name = data_utils.rand_name('telemetry-alarm-update')
David Kranz20d06f42015-02-09 14:54:15 -050060 body = self.telemetry_client.update_alarm(
nayna-patela4c56c92014-03-24 12:16:52 +000061 alarm_id,
62 threshold_rule=new_rule,
63 name=alarm_name,
64 type='threshold')
nayna-patela4c56c92014-03-24 12:16:52 +000065 self.assertEqual(alarm_name, body['name'])
66 self.assertDictContainsSubset(new_rule, body['threshold_rule'])
67 # Get and verify details of an alarm after update
David Kranz20d06f42015-02-09 14:54:15 -050068 body = self.telemetry_client.get_alarm(alarm_id)
nayna-patela4c56c92014-03-24 12:16:52 +000069 self.assertEqual(alarm_name, body['name'])
70 self.assertDictContainsSubset(new_rule, body['threshold_rule'])
71 # Delete alarm and verify if deleted
David Kranz20d06f42015-02-09 14:54:15 -050072 self.telemetry_client.delete_alarm(alarm_id)
Masayuki Igawabfa07602015-01-20 18:47:17 +090073 self.assertRaises(lib_exc.NotFound,
nayna-patela4c56c92014-03-24 12:16:52 +000074 self.telemetry_client.get_alarm, alarm_id)
75
Matthew Treinish5c660ab2014-05-18 21:14:36 -040076 @test.attr(type="gate")
nayna-patela4c56c92014-03-24 12:16:52 +000077 def test_set_get_alarm_state(self):
78 alarm_states = ['ok', 'alarm', 'insufficient data']
David Kranz20d06f42015-02-09 14:54:15 -050079 alarm = self.create_alarm(threshold_rule=self.rule)
nayna-patela4c56c92014-03-24 12:16:52 +000080 # Set alarm state and verify
81 new_state =\
82 [elem for elem in alarm_states if elem != alarm['state']][0]
David Kranzd7e97b42015-02-16 09:37:31 -050083 state = self.telemetry_client.alarm_set_state(alarm['alarm_id'],
84 new_state)
85 self.assertEqual(new_state, state.data)
nayna-patela4c56c92014-03-24 12:16:52 +000086 # Get alarm state and verify
David Kranzd7e97b42015-02-16 09:37:31 -050087 state = self.telemetry_client.alarm_get_state(alarm['alarm_id'])
88 self.assertEqual(new_state, state.data)
nayna-patela4c56c92014-03-24 12:16:52 +000089
Matthew Treinish5c660ab2014-05-18 21:14:36 -040090 @test.attr(type="gate")
nayna-patela4c56c92014-03-24 12:16:52 +000091 def test_create_delete_alarm_with_combination_rule(self):
92 rule = {"alarm_ids": self.alarm_ids,
93 "operator": "or"}
94 # Verifies alarm create
95 alarm_name = data_utils.rand_name('combination_alarm')
David Kranz20d06f42015-02-09 14:54:15 -050096 body = self.telemetry_client.create_alarm(name=alarm_name,
97 combination_rule=rule,
98 type='combination')
nayna-patela4c56c92014-03-24 12:16:52 +000099 self.assertEqual(alarm_name, body['name'])
100 alarm_id = body['alarm_id']
101 self.assertDictContainsSubset(rule, body['combination_rule'])
102 # Verify alarm delete
David Kranz20d06f42015-02-09 14:54:15 -0500103 self.telemetry_client.delete_alarm(alarm_id)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900104 self.assertRaises(lib_exc.NotFound,
nayna-patela4c56c92014-03-24 12:16:52 +0000105 self.telemetry_client.get_alarm, alarm_id)