blob: daa09394a46f199ee781a7dbdfa488bc4feea4bf [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
Fei Long Wangd39431f2015-05-14 11:30:48 +120016from 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
liu-sheng67b730e2015-07-16 15:19:33 +080020class TelemetryAlarmingAPITestJSON(base.BaseAlarmingTest):
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
Chris Hoge7579c1a2015-02-26 14:12:15 -080032 @test.idempotent_id('1c918e06-210b-41eb-bd45-14676dd77cd6')
vrovachev95a16cc2014-02-04 15:29:48 +040033 def test_alarm_list(self):
nayna-patelc3a39ba2014-03-12 13:28:05 +000034 # List alarms
liu-sheng67b730e2015-07-16 15:19:33 +080035 alarm_list = self.alarming_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
Chris Hoge7579c1a2015-02-26 14:12:15 -080045 @test.idempotent_id('1297b095-39c1-4e74-8a1f-4ae998cedd67')
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')
liu-sheng67b730e2015-07-16 15:19:33 +080049 body = self.alarming_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}
piyush110786c3328e42015-09-14 11:14:58 +053059 alarm_name_updated = data_utils.rand_name('telemetry-alarm-update')
liu-sheng67b730e2015-07-16 15:19:33 +080060 body = self.alarming_client.update_alarm(
nayna-patela4c56c92014-03-24 12:16:52 +000061 alarm_id,
62 threshold_rule=new_rule,
piyush110786c3328e42015-09-14 11:14:58 +053063 name=alarm_name_updated,
nayna-patela4c56c92014-03-24 12:16:52 +000064 type='threshold')
piyush110786c3328e42015-09-14 11:14:58 +053065 self.assertEqual(alarm_name_updated, body['name'])
nayna-patela4c56c92014-03-24 12:16:52 +000066 self.assertDictContainsSubset(new_rule, body['threshold_rule'])
67 # Get and verify details of an alarm after update
liu-sheng67b730e2015-07-16 15:19:33 +080068 body = self.alarming_client.show_alarm(alarm_id)
piyush110786c3328e42015-09-14 11:14:58 +053069 self.assertEqual(alarm_name_updated, body['name'])
nayna-patela4c56c92014-03-24 12:16:52 +000070 self.assertDictContainsSubset(new_rule, body['threshold_rule'])
piyush110786c3328e42015-09-14 11:14:58 +053071 # Get history for the alarm and verify the same
liu-sheng67b730e2015-07-16 15:19:33 +080072 body = self.alarming_client.show_alarm_history(alarm_id)
piyush110786c3328e42015-09-14 11:14:58 +053073 self.assertEqual("rule change", body[0]['type'])
74 self.assertIn(alarm_name_updated, body[0]['detail'])
75 self.assertEqual("creation", body[1]['type'])
76 self.assertIn(alarm_name, body[1]['detail'])
nayna-patela4c56c92014-03-24 12:16:52 +000077 # Delete alarm and verify if deleted
liu-sheng67b730e2015-07-16 15:19:33 +080078 self.alarming_client.delete_alarm(alarm_id)
Masayuki Igawabfa07602015-01-20 18:47:17 +090079 self.assertRaises(lib_exc.NotFound,
liu-sheng67b730e2015-07-16 15:19:33 +080080 self.alarming_client.show_alarm, alarm_id)
nayna-patela4c56c92014-03-24 12:16:52 +000081
Chris Hoge7579c1a2015-02-26 14:12:15 -080082 @test.idempotent_id('aca49486-70bb-4016-87e0-f6131374f741')
nayna-patela4c56c92014-03-24 12:16:52 +000083 def test_set_get_alarm_state(self):
84 alarm_states = ['ok', 'alarm', 'insufficient data']
David Kranz20d06f42015-02-09 14:54:15 -050085 alarm = self.create_alarm(threshold_rule=self.rule)
nayna-patela4c56c92014-03-24 12:16:52 +000086 # Set alarm state and verify
87 new_state =\
88 [elem for elem in alarm_states if elem != alarm['state']][0]
liu-sheng67b730e2015-07-16 15:19:33 +080089 state = self.alarming_client.alarm_set_state(alarm['alarm_id'],
90 new_state)
David Kranzd7e97b42015-02-16 09:37:31 -050091 self.assertEqual(new_state, state.data)
nayna-patela4c56c92014-03-24 12:16:52 +000092 # Get alarm state and verify
liu-sheng67b730e2015-07-16 15:19:33 +080093 state = self.alarming_client.show_alarm_state(alarm['alarm_id'])
David Kranzd7e97b42015-02-16 09:37:31 -050094 self.assertEqual(new_state, state.data)
nayna-patela4c56c92014-03-24 12:16:52 +000095
Chris Hoge7579c1a2015-02-26 14:12:15 -080096 @test.idempotent_id('08d7e45a-1344-4e5c-ba6f-f6cbb77f55b9')
nayna-patela4c56c92014-03-24 12:16:52 +000097 def test_create_delete_alarm_with_combination_rule(self):
98 rule = {"alarm_ids": self.alarm_ids,
99 "operator": "or"}
100 # Verifies alarm create
101 alarm_name = data_utils.rand_name('combination_alarm')
liu-sheng67b730e2015-07-16 15:19:33 +0800102 body = self.alarming_client.create_alarm(name=alarm_name,
103 combination_rule=rule,
104 type='combination')
nayna-patela4c56c92014-03-24 12:16:52 +0000105 self.assertEqual(alarm_name, body['name'])
106 alarm_id = body['alarm_id']
107 self.assertDictContainsSubset(rule, body['combination_rule'])
108 # Verify alarm delete
liu-sheng67b730e2015-07-16 15:19:33 +0800109 self.alarming_client.delete_alarm(alarm_id)
Masayuki Igawabfa07602015-01-20 18:47:17 +0900110 self.assertRaises(lib_exc.NotFound,
liu-sheng67b730e2015-07-16 15:19:33 +0800111 self.alarming_client.show_alarm, alarm_id)