Files
python-aodhclient/aodhclient/tests/functional/test_alarm.py
whoami-rajat 179a935596 Updating alarm for different alarm types
This patch will reflect the value of "type"
parameter during parsing of "aodh update"
command which add the functionality to update
the alarm between different alarm types.

Change-Id: I5ca9a9a28c509a6767c7d77796edae9a5e8ce0dc
Closes-Bug: #1757994
2019-05-14 10:57:33 +00:00

894 lines
39 KiB
Python

# 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 os
from oslo_utils import uuidutils
import requests
import requests.auth
import six
from tempest.lib import exceptions
from aodhclient.tests.functional import base
class AodhClientTest(base.ClientTestBase):
def test_help(self):
self.aodh("help", params="alarm create")
self.aodh("help", params="alarm delete")
self.aodh("help", params="alarm list")
self.aodh("help", params="alarm show")
self.aodh("help", params="alarm update")
def test_alarm_id_or_name_scenario(self):
def _test(name):
params = "create --type event --name %s" % name
result = self.aodh('alarm', params=params)
alarm_id = self.details_multiple(result)[0]['alarm_id']
params = 'show %s' % name
result = self.aodh('alarm', params=params)
self.assertEqual(alarm_id,
self.details_multiple(result)[0]['alarm_id'])
params = 'show %s' % alarm_id
result = self.aodh('alarm', params=params)
self.assertEqual(alarm_id,
self.details_multiple(result)[0]['alarm_id'])
params = "update --state ok %s" % name
result = self.aodh('alarm', params=params)
self.assertEqual("ok", self.details_multiple(result)[0]['state'])
params = "update --state alarm %s" % alarm_id
result = self.aodh('alarm', params=params)
self.assertEqual("alarm",
self.details_multiple(result)[0]['state'])
params = "update --name another-name %s" % name
result = self.aodh('alarm', params=params)
self.assertEqual("another-name",
self.details_multiple(result)[0]['name'])
params = "update --name %s %s" % (name, alarm_id)
result = self.aodh('alarm', params=params)
self.assertEqual(name,
self.details_multiple(result)[0]['name'])
# Check update with no change is allowed
params = "update --name %s %s" % (name, name)
result = self.aodh('alarm', params=params)
self.assertEqual(name,
self.details_multiple(result)[0]['name'])
params = "update --state ok"
result = self.aodh('alarm', params=params,
fail_ok=True, merge_stderr=True)
self.assertFirstLineStartsWith(
result.splitlines(),
'You need to specify one of alarm ID and alarm name(--name) '
'to update an alarm.')
params = "delete %s" % name
result = self.aodh('alarm', params=params)
self.assertEqual("", result)
params = "create --type event --name %s" % name
result = self.aodh('alarm', params=params)
alarm_id = self.details_multiple(result)[0]['alarm_id']
params = "delete %s" % alarm_id
result = self.aodh('alarm', params=params)
self.assertEqual("", result)
_test(uuidutils.generate_uuid())
_test('normal-alarm-name')
def test_event_scenario(self):
PROJECT_ID = uuidutils.generate_uuid()
# CREATE
result = self.aodh(u'alarm',
params=(u"create --type event --name ev_alarm1 "
"--project-id %s" % PROJECT_ID))
alarm = self.details_multiple(result)[0]
ALARM_ID = alarm['alarm_id']
self.assertEqual('ev_alarm1', alarm['name'])
self.assertEqual('*', alarm['event_type'])
# UPDATE IGNORE INVALID
result = self.aodh(
'alarm', params=("update %s --severity critical --threshold 10"
% ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('critical', alarm_updated['severity'])
# UPDATE IGNORE INVALID
result = self.aodh(
'alarm', params=("update %s --event-type dummy" % ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('dummy', alarm_updated['event_type'])
# GET
result = self.aodh(
'alarm', params="show %s" % ALARM_ID)
alarm_show = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_show["alarm_id"])
self.assertEqual(PROJECT_ID, alarm_show["project_id"])
self.assertEqual('ev_alarm1', alarm_show['name'])
self.assertEqual('dummy', alarm_show['event_type'])
# GET BY NAME
result = self.aodh(
'alarm', params="show --name ev_alarm1")
alarm_show = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_show["alarm_id"])
self.assertEqual(PROJECT_ID, alarm_show["project_id"])
self.assertEqual('ev_alarm1', alarm_show['name'])
self.assertEqual('dummy', alarm_show['event_type'])
# GET BY NAME AND ID ERROR
self.assertRaises(exceptions.CommandFailed,
self.aodh, u'alarm',
params=(u"show %s --name ev_alarm1" %
ALARM_ID))
# LIST
result = self.aodh('alarm', params="list")
self.assertIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
output_colums = ['alarm_id', 'type', 'name', 'state', 'severity',
'enabled']
for alarm_list in self.parser.listing(result):
self.assertEqual(sorted(output_colums), sorted(alarm_list.keys()))
if alarm_list["alarm_id"] == ALARM_ID:
self.assertEqual('ev_alarm1', alarm_list['name'])
# LIST WITH QUERY
result = self.aodh('alarm',
params=("list --query project_id=%s" % PROJECT_ID))
alarm_list = self.parser.listing(result)[0]
self.assertEqual(ALARM_ID, alarm_list["alarm_id"])
self.assertEqual('ev_alarm1', alarm_list['name'])
# DELETE
result = self.aodh('alarm', params="delete %s" % ALARM_ID)
self.assertEqual("", result)
# GET FAIL
result = self.aodh('alarm', params="show %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
expected = "Alarm %s not found (HTTP 404)" % ALARM_ID
self.assertFirstLineStartsWith(result.splitlines(), expected)
# DELETE FAIL
result = self.aodh('alarm', params="delete %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
self.assertFirstLineStartsWith(result.splitlines(), expected)
# LIST DOES NOT HAVE ALARM
result = self.aodh('alarm', params="list")
self.assertNotIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
def test_composite_scenario(self):
project_id = uuidutils.generate_uuid()
res_id = uuidutils.generate_uuid()
# CREATE
result = self.aodh(
u'alarm',
params=(u'create --type composite --name calarm1 --composite-rule '
'\'{"or":[{"threshold": 0.8, "metric": "cpu_util", '
'"type": "gnocchi_resources_threshold", "resource_type": '
'"generic", "resource_id": "%s", '
'"aggregation_method": "mean"},'
'{"and": [{"threshold": 200, "metric": "disk.iops", '
'"type": "gnocchi_resources_threshold", "resource_type": '
'"generic", "resource_id": "%s", '
'"aggregation_method": "mean"},'
'{"threshold": 1000, "metric": "memory",'
'"type": "gnocchi_resources_threshold", "resource_type": '
'"generic", "resource_id": "%s", '
'"aggregation_method": "mean"}]}]}\' --project-id %s' %
(res_id, res_id, res_id, project_id)))
alarm = self.details_multiple(result)[0]
alarm_id = alarm['alarm_id']
self.assertEqual('calarm1', alarm['name'])
self.assertEqual('composite', alarm['type'])
self.assertIn('composite_rule', alarm)
# CREATE FAIL MISSING PARAM
self.assertRaises(exceptions.CommandFailed,
self.aodh, u'alarm',
params=(u"create --type composite --name calarm1 "
"--project-id %s" % project_id))
# UPDATE
result = self.aodh(
'alarm', params=("update %s --severity critical" % alarm_id))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(alarm_id, alarm_updated["alarm_id"])
self.assertEqual('critical', alarm_updated['severity'])
# GET
result = self.aodh(
'alarm', params="show %s" % alarm_id)
alarm_show = self.details_multiple(result)[0]
self.assertEqual(alarm_id, alarm_show["alarm_id"])
self.assertEqual(project_id, alarm_show["project_id"])
self.assertEqual('calarm1', alarm_show['name'])
# GET BY NAME
result = self.aodh(
'alarm', params="show --name calarm1")
alarm_show = self.details_multiple(result)[0]
self.assertEqual(alarm_id, alarm_show["alarm_id"])
self.assertEqual(project_id, alarm_show["project_id"])
self.assertEqual('calarm1', alarm_show['name'])
# GET BY NAME AND ID ERROR
self.assertRaises(exceptions.CommandFailed,
self.aodh, u'alarm',
params=(u"show %s --name calarm1" %
alarm_id))
# LIST
result = self.aodh('alarm', params="list")
self.assertIn(alarm_id,
[r['alarm_id'] for r in self.parser.listing(result)])
output_colums = ['alarm_id', 'type', 'name', 'state', 'severity',
'enabled']
for alarm_list in self.parser.listing(result):
self.assertEqual(sorted(output_colums), sorted(alarm_list.keys()))
if alarm_list["alarm_id"] == alarm_id:
self.assertEqual('calarm1', alarm_list['name'])
# LIST WITH QUERY
result = self.aodh('alarm',
params=("list --query project_id=%s" % project_id))
alarm_list = self.parser.listing(result)[0]
self.assertEqual(alarm_id, alarm_list["alarm_id"])
self.assertEqual('calarm1', alarm_list['name'])
# DELETE
result = self.aodh('alarm', params="delete %s" % alarm_id)
self.assertEqual("", result)
# GET FAIL
result = self.aodh('alarm', params="show %s" % alarm_id,
fail_ok=True, merge_stderr=True)
expected = "Alarm %s not found (HTTP 404)" % alarm_id
self.assertFirstLineStartsWith(result.splitlines(), expected)
# DELETE FAIL
result = self.aodh('alarm', params="delete %s" % alarm_id,
fail_ok=True, merge_stderr=True)
self.assertFirstLineStartsWith(result.splitlines(), expected)
# LIST DOES NOT HAVE ALARM
result = self.aodh('alarm', params="list")
self.assertNotIn(alarm_id,
[r['alarm_id'] for r in self.parser.listing(result)])
def _test_alarm_create_show_query(self, create_params, expected_lines):
def test(params):
result = self.aodh('alarm', params=params)
alarm = self.details_multiple(result)[0]
for key, value in six.iteritems(expected_lines):
self.assertEqual(value, alarm[key])
return alarm
alarm = test(create_params)
params = 'show %s' % alarm['alarm_id']
test(params)
self.aodh('alarm', params='delete %s' % alarm['alarm_id'])
def test_event_alarm_create_show_query(self):
params = ('create --type event --name alarm-multiple-query '
'--query "traits.project_id=789;traits.resource_id=012"')
expected_lines = {
'query': 'traits.project_id = 789 AND',
'': 'traits.resource_id = 012',
}
self._test_alarm_create_show_query(params, expected_lines)
params = ('create --type event --name alarm-single-query '
'--query "traits.project_id=789"')
expected_lines = {'query': 'traits.project_id = 789'}
self._test_alarm_create_show_query(params, expected_lines)
params = 'create --type event --name alarm-no-query'
self._test_alarm_create_show_query(params, {'query': ''})
def test_set_get_alarm_state(self):
result = self.aodh(
'alarm',
params=('create --type event --name alarm_state_test '
'--query "traits.project_id=789;traits.resource_id=012"'))
alarm = self.details_multiple(result)[0]
alarm_id = alarm['alarm_id']
result = self.aodh(
'alarm', params="show %s" % alarm_id)
alarm_show = self.details_multiple(result)[0]
self.assertEqual('insufficient data', alarm_show['state'])
result = self.aodh('alarm', params="state get %s" % alarm_id)
state_get = self.details_multiple(result)[0]
self.assertEqual('insufficient data', state_get['state'])
self.aodh('alarm',
params="state set --state ok %s" % alarm_id)
result = self.aodh('alarm', params="state get %s" % alarm_id)
state_get = self.details_multiple(result)[0]
self.assertEqual('ok', state_get['state'])
self.aodh('alarm', params='delete %s' % alarm_id)
def test_update_type_event_composite(self):
res_id = uuidutils.generate_uuid()
# CREATE
result = self.aodh(u'alarm',
params=(u"create --type event --name ev_alarm123"))
alarm = self.details_multiple(result)[0]
ALARM_ID = alarm['alarm_id']
self.assertEqual('ev_alarm123', alarm['name'])
self.assertEqual('*', alarm['event_type'])
# UPDATE TYPE TO COMPOSITE
result = self.aodh(
'alarm',
params=('update %s --type composite --composite-rule '
'\'{"or":[{"threshold": 0.8, "metric": "cpu_util", '
'"type": "gnocchi_resources_threshold", "resource_type": '
'"generic", "resource_id": "%s", '
'"aggregation_method": "mean"},'
'{"and": [{"threshold": 200, "metric": "disk.iops", '
'"type": "gnocchi_resources_threshold", "resource_type": '
'"generic", "resource_id": "%s", '
'"aggregation_method": "mean"},'
'{"threshold": 1000, "metric": "memory",'
'"type": "gnocchi_resources_threshold", "resource_type": '
'"generic", "resource_id": "%s", '
'"aggregation_method": "mean"}]}]}\'' %
(ALARM_ID, res_id, res_id, res_id)))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('composite', alarm_updated['type'])
self.assertIn('composite_rule', alarm_updated)
# UPDATE TYPE TO EVENT
result = self.aodh(
'alarm', params=("update %s --type event"
% ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('event', alarm_updated['type'])
self.assertEqual('*', alarm_updated['event_type'])
# DELETE
result = self.aodh('alarm', params="delete %s" % ALARM_ID)
self.assertEqual("", result)
class AodhClientGnocchiRulesTest(base.ClientTestBase):
def test_gnocchi_resources_threshold_scenario(self):
PROJECT_ID = uuidutils.generate_uuid()
RESOURCE_ID = uuidutils.generate_uuid()
req = requests.post(
os.environ.get("GNOCCHI_ENDPOINT") + "/v1/resource/generic",
auth=requests.auth.HTTPBasicAuth('admin', ''),
json={
"id": RESOURCE_ID,
})
self.assertEqual(201, req.status_code)
# CREATE
result = self.aodh(u'alarm',
params=(u"create "
"--type gnocchi_resources_threshold "
"--name alarm_gn1 --metric cpu_util "
"--threshold 80 "
"--resource-id %s --resource-type generic "
"--aggregation-method last "
"--project-id %s"
% (RESOURCE_ID, PROJECT_ID)))
alarm = self.details_multiple(result)[0]
ALARM_ID = alarm['alarm_id']
self.assertEqual('alarm_gn1', alarm['name'])
self.assertEqual('cpu_util', alarm['metric'])
self.assertEqual('80.0', alarm['threshold'])
self.assertEqual('last', alarm['aggregation_method'])
self.assertEqual(RESOURCE_ID,
alarm['resource_id'])
self.assertEqual('generic', alarm['resource_type'])
# CREATE WITH --TIME-CONSTRAINT
result = self.aodh(
u'alarm',
params=(u"create --type gnocchi_resources_threshold "
"--name alarm_tc --metric cpu_util --threshold 80 "
"--resource-id %s --resource-type generic "
"--aggregation-method last --project-id %s "
"--time-constraint "
"name=cons1;start='0 11 * * *';duration=300 "
"--time-constraint "
"name=cons2;start='0 23 * * *';duration=600 "
% (RESOURCE_ID, PROJECT_ID)))
alarm = self.details_multiple(result)[0]
self.assertEqual('alarm_tc', alarm['name'])
self.assertEqual('80.0', alarm['threshold'])
self.assertIsNotNone(alarm['time_constraints'])
# CREATE FAIL MISSING PARAM
self.assertRaises(exceptions.CommandFailed,
self.aodh, u'alarm',
params=(u"create "
"--type gnocchi_resources_threshold "
"--name alarm1 --metric cpu_util "
"--resource-id %s --resource-type generic "
"--aggregation-method last "
"--project-id %s"
% (RESOURCE_ID, PROJECT_ID)))
# UPDATE
result = self.aodh(
'alarm', params=("update %s --severity critical --threshold 90"
% ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('critical', alarm_updated['severity'])
self.assertEqual('90.0', alarm_updated["threshold"])
# GET
result = self.aodh(
'alarm', params="show %s" % ALARM_ID)
alarm_show = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_show["alarm_id"])
self.assertEqual(PROJECT_ID, alarm_show["project_id"])
self.assertEqual('alarm_gn1', alarm_show['name'])
self.assertEqual('cpu_util', alarm_show['metric'])
self.assertEqual('90.0', alarm_show['threshold'])
self.assertEqual('critical', alarm_show['severity'])
self.assertEqual('last', alarm_show['aggregation_method'])
self.assertEqual('generic', alarm_show['resource_type'])
# GET BY NAME
result = self.aodh(
'alarm', params="show --name alarm_gn1")
self.assertEqual(ALARM_ID, alarm_show["alarm_id"])
self.assertEqual(PROJECT_ID, alarm_show["project_id"])
self.assertEqual('alarm_gn1', alarm_show['name'])
self.assertEqual('cpu_util', alarm_show['metric'])
self.assertEqual('90.0', alarm_show['threshold'])
self.assertEqual('critical', alarm_show['severity'])
self.assertEqual('last', alarm_show['aggregation_method'])
self.assertEqual('generic', alarm_show['resource_type'])
# GET BY NAME AND ID ERROR
self.assertRaises(exceptions.CommandFailed,
self.aodh, u'alarm',
params=(u"show %s --name alarm_gn1" %
ALARM_ID))
# LIST
result = self.aodh('alarm', params="list")
self.assertIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
output_colums = ['alarm_id', 'type', 'name', 'state', 'severity',
'enabled']
for alarm_list in self.parser.listing(result):
self.assertEqual(sorted(output_colums), sorted(alarm_list.keys()))
if alarm_list["alarm_id"] == ALARM_ID:
self.assertEqual('alarm_gn1', alarm_list['name'])
# LIST WITH PAGINATION
# list with limit
result = self.aodh('alarm',
params="list --limit 1")
alarm_list = self.parser.listing(result)
self.assertEqual(1, len(alarm_list))
# list with sort with key=name dir=asc
result = self.aodh('alarm',
params="list --sort name:asc")
names = [r['name'] for r in self.parser.listing(result)]
sorted_name = sorted(names)
self.assertEqual(sorted_name, names)
# list with sort with key=name dir=asc and key=alarm_id dir=asc
result = self.aodh(
u'alarm',
params=(u"create --type gnocchi_resources_threshold "
"--name alarm_th --metric cpu_util --threshold 80 "
"--resource-id %s --resource-type generic "
"--aggregation-method last --project-id %s "
% (RESOURCE_ID, PROJECT_ID)))
created_alarm_id = self.details_multiple(result)[0]['alarm_id']
result = self.aodh('alarm',
params="list --sort name:asc --sort alarm_id:asc")
alarm_list = self.parser.listing(result)
ids_with_same_name = []
names = []
for alarm in alarm_list:
names.append(['alarm_name'])
if alarm['name'] == 'alarm_th':
ids_with_same_name.append(alarm['alarm_id'])
sorted_ids = sorted(ids_with_same_name)
sorted_names = sorted(names)
self.assertEqual(sorted_names, names)
self.assertEqual(sorted_ids, ids_with_same_name)
# list with sort with key=name dir=desc and with the marker equal to
# the alarm_id of the alarm_th we created for this test.
result = self.aodh('alarm',
params="list --sort name:desc "
"--marker %s" % created_alarm_id)
self.assertIn('alarm_tc',
[r['name'] for r in self.parser.listing(result)])
self.aodh('alarm', params="delete %s" % created_alarm_id)
# LIST WITH QUERY
result = self.aodh('alarm',
params=("list --query project_id=%s" % PROJECT_ID))
alarm_list = self.parser.listing(result)[0]
self.assertEqual(ALARM_ID, alarm_list["alarm_id"])
self.assertEqual('alarm_gn1', alarm_list['name'])
# DELETE
result = self.aodh('alarm', params="delete %s" % ALARM_ID)
self.assertEqual("", result)
# GET FAIL
result = self.aodh('alarm', params="show %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
expected = "Alarm %s not found (HTTP 404)" % ALARM_ID
self.assertFirstLineStartsWith(result.splitlines(), expected)
# DELETE FAIL
result = self.aodh('alarm', params="delete %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
self.assertFirstLineStartsWith(result.splitlines(), expected)
# LIST DOES NOT HAVE ALARM
result = self.aodh('alarm', params="list")
self.assertNotIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
def test_gnocchi_aggr_by_resources_scenario(self):
PROJECT_ID = uuidutils.generate_uuid()
# CREATE
result = self.aodh(
u'alarm',
params=(u"create "
"--type "
"gnocchi_aggregation_by_resources_threshold "
"--name alarm1 --metric cpu --threshold 80 "
"--query "
'\'{"=": {"creator": "cr3at0r"}}\' '
"--resource-type generic "
"--aggregation-method last "
"--project-id %s" % PROJECT_ID))
alarm = self.details_multiple(result)[0]
ALARM_ID = alarm['alarm_id']
self.assertEqual('alarm1', alarm['name'])
self.assertEqual('cpu', alarm['metric'])
self.assertEqual('80.0', alarm['threshold'])
self.assertEqual('last', alarm['aggregation_method'])
self.assertEqual('generic', alarm['resource_type'])
self.assertEqual('{"=": {"creator": "cr3at0r"}}',
alarm['query'])
# CREATE FAIL MISSING PARAM
self.assertRaises(
exceptions.CommandFailed,
self.aodh, u'alarm',
params=(u"create "
"--type "
"gnocchi_aggregation_by_resources_threshold "
"--name alarm1 --metric cpu "
"--query "
'\'{"=": {"creator": "cr3at0r"}}\' '
"--resource-type generic "
"--aggregation-method last "
"--project-id %s" % PROJECT_ID))
# UPDATE
result = self.aodh(
'alarm', params=("update %s --severity critical --threshold 90"
% ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('critical', alarm_updated['severity'])
self.assertEqual('90.0', alarm_updated["threshold"])
# GET
result = self.aodh(
'alarm', params="show %s" % ALARM_ID)
alarm_show = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_show["alarm_id"])
self.assertEqual(PROJECT_ID, alarm_show["project_id"])
self.assertEqual('alarm1', alarm_show['name'])
self.assertEqual('cpu', alarm_show['metric'])
self.assertEqual('90.0', alarm_show['threshold'])
self.assertEqual('critical', alarm_show['severity'])
self.assertEqual('last', alarm_show['aggregation_method'])
self.assertEqual('generic', alarm_show['resource_type'])
# LIST
result = self.aodh('alarm', params="list")
self.assertIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
output_colums = ['alarm_id', 'type', 'name', 'state', 'severity',
'enabled']
for alarm_list in self.parser.listing(result):
self.assertEqual(sorted(output_colums), sorted(alarm_list.keys()))
if alarm_list["alarm_id"] == ALARM_ID:
self.assertEqual('alarm1', alarm_list['name'])
# DELETE
result = self.aodh('alarm', params="delete %s" % ALARM_ID)
self.assertEqual("", result)
# GET FAIL
result = self.aodh('alarm', params="show %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
expected = "Alarm %s not found (HTTP 404)" % ALARM_ID
self.assertFirstLineStartsWith(result.splitlines(), expected)
# DELETE FAIL
result = self.aodh('alarm', params="delete %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
self.assertFirstLineStartsWith(result.splitlines(), expected)
# LIST DOES NOT HAVE ALARM
result = self.aodh('alarm', params="list")
self.assertNotIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
def test_gnocchi_aggr_by_metrics_scenario(self):
PROJECT_ID = uuidutils.generate_uuid()
METRIC1 = 'cpu'
METRIC2 = 'cpu_util'
# CREATE
result = self.aodh(
u'alarm',
params=(u"create "
"--type gnocchi_aggregation_by_metrics_threshold "
"--name alarm1 "
"--metrics %s "
"--metrics %s "
"--threshold 80 "
"--aggregation-method last "
"--project-id %s"
% (METRIC1, METRIC2, PROJECT_ID)))
alarm = self.details_multiple(result)[0]
ALARM_ID = alarm['alarm_id']
self.assertEqual('alarm1', alarm['name'])
metrics = "[u'cpu', u'cpu_util']" if six.PY2 else "['cpu', 'cpu_util']"
self.assertEqual(metrics, alarm['metrics'])
self.assertEqual('80.0', alarm['threshold'])
self.assertEqual('last', alarm['aggregation_method'])
# CREATE FAIL MISSING PARAM
self.assertRaises(
exceptions.CommandFailed,
self.aodh, u'alarm',
params=(u"create "
"--type gnocchi_aggregation_by_metrics_threshold "
"--name alarm1 "
"--metrics %s "
"--metrics %s "
"--aggregation-method last "
"--project-id %s"
% (METRIC1, METRIC2, PROJECT_ID)))
# UPDATE
result = self.aodh(
'alarm', params=("update %s --severity critical --threshold 90"
% ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('critical', alarm_updated['severity'])
self.assertEqual('90.0', alarm_updated["threshold"])
# GET
result = self.aodh(
'alarm', params="show %s" % ALARM_ID)
alarm_show = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_show["alarm_id"])
self.assertEqual(PROJECT_ID, alarm_show["project_id"])
self.assertEqual('alarm1', alarm_show['name'])
self.assertEqual(metrics, alarm_show['metrics'])
self.assertEqual('90.0', alarm_show['threshold'])
self.assertEqual('critical', alarm_show['severity'])
self.assertEqual('last', alarm_show['aggregation_method'])
# LIST
result = self.aodh('alarm', params="list")
self.assertIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
for alarm_list in self.parser.listing(result):
if alarm_list["alarm_id"] == ALARM_ID:
self.assertEqual('alarm1', alarm_list['name'])
# LIST WITH QUERY
result = self.aodh('alarm',
params=("list --query project_id=%s" % PROJECT_ID))
alarm_list = self.parser.listing(result)[0]
self.assertEqual(ALARM_ID, alarm_list["alarm_id"])
self.assertEqual('alarm1', alarm_list['name'])
# DELETE
result = self.aodh('alarm', params="delete %s" % ALARM_ID)
self.assertEqual("", result)
# GET FAIL
result = self.aodh('alarm', params="show %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
expected = "Alarm %s not found (HTTP 404)" % ALARM_ID
self.assertFirstLineStartsWith(result.splitlines(), expected)
# DELETE FAIL
result = self.aodh('alarm', params="delete %s" % ALARM_ID,
fail_ok=True, merge_stderr=True)
self.assertFirstLineStartsWith(result.splitlines(), expected)
# LIST DOES NOT HAVE ALARM
result = self.aodh('alarm', params="list")
output_colums = ['alarm_id', 'type', 'name', 'state', 'severity',
'enabled']
for alarm_list in self.parser.listing(result):
self.assertEqual(sorted(output_colums), sorted(alarm_list.keys()))
self.assertNotIn(ALARM_ID,
[r['alarm_id'] for r in self.parser.listing(result)])
def test_update_gnresthr_gnaggrresthr(self):
RESOURCE_ID = uuidutils.generate_uuid()
# CREATE
result = self.aodh(u'alarm',
params=(u"create "
"--type gnocchi_resources_threshold "
"--name alarm_gn123 --metric cpu_util "
"--resource-id %s --threshold 80 "
"--resource-type generic "
"--aggregation-method last "
% RESOURCE_ID))
alarm = self.details_multiple(result)[0]
ALARM_ID = alarm['alarm_id']
self.assertEqual('alarm_gn123', alarm['name'])
self.assertEqual('cpu_util', alarm['metric'])
self.assertEqual('80.0', alarm['threshold'])
self.assertEqual('last', alarm['aggregation_method'])
self.assertEqual('generic', alarm['resource_type'])
# UPDATE TYPE TO GNOCCHI_AGGREGATION_BY_RESOURCES_THRESHOLD
result = self.aodh(
'alarm', params=("update %s --type "
"gnocchi_aggregation_by_resources_threshold "
"--metric cpu --threshold 90 "
"--query "
'\'{"=": {"creator": "cr3at0r"}}\' '
"--resource-type generic "
"--aggregation-method last "
% ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('cpu', alarm_updated['metric'])
self.assertEqual('90.0', alarm_updated['threshold'])
self.assertEqual('last', alarm_updated['aggregation_method'])
self.assertEqual('generic', alarm_updated['resource_type'])
self.assertEqual('{"=": {"creator": "cr3at0r"}}',
alarm_updated['query'])
self.assertEqual('gnocchi_aggregation_by_resources_threshold',
alarm_updated['type'])
# UPDATE TYPE TO GNOCCHI_RESOURCES_THRESHOLD
result = self.aodh(
'alarm', params=("update %s "
"--type gnocchi_resources_threshold "
"--metric cpu_util "
"--resource-id %s --threshold 80 "
"--resource-type generic "
"--aggregation-method last "
% (ALARM_ID, RESOURCE_ID)))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('cpu_util', alarm_updated['metric'])
self.assertEqual('80.0', alarm_updated['threshold'])
self.assertEqual('last', alarm_updated['aggregation_method'])
self.assertEqual('generic', alarm_updated['resource_type'])
self.assertEqual('gnocchi_resources_threshold',
alarm_updated['type'])
# DELETE
result = self.aodh('alarm', params="delete %s" % ALARM_ID)
self.assertEqual("", result)
def test_update_gnaggrresthr_gnaggrmetricthr(self):
METRIC1 = 'cpu'
METRIC2 = 'cpu_util'
# CREATE
result = self.aodh(
u'alarm',
params=(u"create "
"--type "
"gnocchi_aggregation_by_resources_threshold "
"--name alarm123 --metric cpu --threshold 80 "
"--query "
'\'{"=": {"creator": "cr3at0r"}}\' '
"--resource-type generic "
"--aggregation-method last "))
alarm = self.details_multiple(result)[0]
ALARM_ID = alarm['alarm_id']
self.assertEqual('alarm123', alarm['name'])
self.assertEqual('cpu', alarm['metric'])
self.assertEqual('80.0', alarm['threshold'])
self.assertEqual('last', alarm['aggregation_method'])
self.assertEqual('generic', alarm['resource_type'])
self.assertEqual('{"=": {"creator": "cr3at0r"}}',
alarm['query'])
# UPDATE TYPE TO GNOCCHI_AGGREGATION_BY_METRICS_THRESHOLD
result = self.aodh(
'alarm', params=("update %s --type "
"gnocchi_aggregation_by_metrics_threshold "
"--metrics %s "
"--metrics %s "
"--threshold 80 "
"--aggregation-method last"
% (ALARM_ID, METRIC1, METRIC2)))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
metrics = "[u'cpu', u'cpu_util']" if six.PY2 else "['cpu', 'cpu_util']"
self.assertEqual(metrics, alarm_updated['metrics'])
self.assertEqual('80.0', alarm_updated['threshold'])
self.assertEqual('last', alarm_updated['aggregation_method'])
self.assertEqual('gnocchi_aggregation_by_metrics_threshold',
alarm_updated['type'])
# UPDATE TYPE TO GNOCCHI_AGGREGATION_BY_RESOURCES_THRESHOLD
result = self.aodh(
'alarm', params=("update %s --type "
"gnocchi_aggregation_by_resources_threshold "
"--metric cpu --threshold 80 "
"--query "
'\'{"=": {"creator": "cr3at0r"}}\' '
"--resource-type generic "
"--aggregation-method last "
% ALARM_ID))
alarm_updated = self.details_multiple(result)[0]
self.assertEqual(ALARM_ID, alarm_updated["alarm_id"])
self.assertEqual('cpu', alarm_updated['metric'])
self.assertEqual('80.0', alarm_updated['threshold'])
self.assertEqual('last', alarm_updated['aggregation_method'])
self.assertEqual('generic', alarm_updated['resource_type'])
self.assertEqual('{"=": {"creator": "cr3at0r"}}',
alarm_updated['query'])
self.assertEqual('gnocchi_aggregation_by_resources_threshold',
alarm_updated['type'])
# DELETE
result = self.aodh('alarm', params="delete %s" % ALARM_ID)
self.assertEqual("", result)