Merge "Improve combination rule validation"
This commit is contained in:
commit
f46a8b160e
@ -1572,6 +1572,9 @@ class AlarmCombinationRule(_Base):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def validate(rule):
|
def validate(rule):
|
||||||
rule.alarm_ids = sorted(set(rule.alarm_ids), key=rule.alarm_ids.index)
|
rule.alarm_ids = sorted(set(rule.alarm_ids), key=rule.alarm_ids.index)
|
||||||
|
if len(rule.alarm_ids) <= 1:
|
||||||
|
raise ClientSideError(_('Alarm combination rule should contain at'
|
||||||
|
' least two different alarm ids.'))
|
||||||
return rule
|
return rule
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -1194,6 +1194,34 @@ class TestAlarms(FunctionalTest,
|
|||||||
self.assertEqual(['a', 'd', 'c', 'b'],
|
self.assertEqual(['a', 'd', 'c', 'b'],
|
||||||
alarms[0].rule.get('alarm_ids'))
|
alarms[0].rule.get('alarm_ids'))
|
||||||
|
|
||||||
|
def _test_post_alarm_combination_rule_less_than_two_alarms(self,
|
||||||
|
alarm_ids=[]):
|
||||||
|
json_body = {
|
||||||
|
'name': 'one_alarm_in_combination_rule',
|
||||||
|
'type': 'combination',
|
||||||
|
'combination_rule': {
|
||||||
|
'alarm_ids': alarm_ids
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = self.post_json('/alarms', params=json_body,
|
||||||
|
expect_errors=True, status=400,
|
||||||
|
headers=self.auth_headers)
|
||||||
|
self.assertEqual(
|
||||||
|
'Alarm combination rule should contain at'
|
||||||
|
' least two different alarm ids.',
|
||||||
|
resp.json['error_message']['faultstring'])
|
||||||
|
|
||||||
|
def test_post_alarm_combination_rule_with_no_alarm(self):
|
||||||
|
self._test_post_alarm_combination_rule_less_than_two_alarms()
|
||||||
|
|
||||||
|
def test_post_alarm_combination_rule_with_one_alarm(self):
|
||||||
|
self._test_post_alarm_combination_rule_less_than_two_alarms(['a'])
|
||||||
|
|
||||||
|
def test_post_alarm_combination_rule_with_two_same_alarms(self):
|
||||||
|
self._test_post_alarm_combination_rule_less_than_two_alarms(['a',
|
||||||
|
'a'])
|
||||||
|
|
||||||
def test_put_alarm(self):
|
def test_put_alarm(self):
|
||||||
json = {
|
json = {
|
||||||
'enabled': False,
|
'enabled': False,
|
||||||
@ -1363,7 +1391,7 @@ class TestAlarms(FunctionalTest,
|
|||||||
'name': 'name4',
|
'name': 'name4',
|
||||||
'type': 'combination',
|
'type': 'combination',
|
||||||
'combination_rule': {
|
'combination_rule': {
|
||||||
'alarm_ids': ['d'],
|
'alarm_ids': ['d', 'a'],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1382,6 +1410,41 @@ class TestAlarms(FunctionalTest,
|
|||||||
msg = 'Cannot specify alarm %s itself in combination rule' % alarm_id
|
msg = 'Cannot specify alarm %s itself in combination rule' % alarm_id
|
||||||
self.assertEqual(msg, resp.json['error_message']['faultstring'])
|
self.assertEqual(msg, resp.json['error_message']['faultstring'])
|
||||||
|
|
||||||
|
def _test_put_alarm_combination_rule_less_than_two_alarms(self,
|
||||||
|
alarm_ids=[]):
|
||||||
|
json_body = {
|
||||||
|
'name': 'name4',
|
||||||
|
'type': 'combination',
|
||||||
|
'combination_rule': {
|
||||||
|
'alarm_ids': alarm_ids
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = self.get_json('/alarms',
|
||||||
|
q=[{'field': 'name',
|
||||||
|
'value': 'name4',
|
||||||
|
}])
|
||||||
|
self.assertEqual(1, len(data))
|
||||||
|
alarm_id = data[0]['alarm_id']
|
||||||
|
|
||||||
|
resp = self.put_json('/alarms/%s' % alarm_id, params=json_body,
|
||||||
|
expect_errors=True, status=400,
|
||||||
|
headers=self.auth_headers)
|
||||||
|
self.assertEqual(
|
||||||
|
'Alarm combination rule should contain at'
|
||||||
|
' least two different alarm ids.',
|
||||||
|
resp.json['error_message']['faultstring'])
|
||||||
|
|
||||||
|
def test_put_alarm_combination_rule_with_no_alarm(self):
|
||||||
|
self._test_put_alarm_combination_rule_less_than_two_alarms()
|
||||||
|
|
||||||
|
def test_put_alarm_combination_rule_with_one_alarm(self):
|
||||||
|
self._test_put_alarm_combination_rule_less_than_two_alarms(['a'])
|
||||||
|
|
||||||
|
def test_put_alarm_combination_rule_with_two_same_alarm_itself(self):
|
||||||
|
self._test_put_alarm_combination_rule_less_than_two_alarms(['d',
|
||||||
|
'd'])
|
||||||
|
|
||||||
def test_put_combination_alarm_with_duplicate_ids(self):
|
def test_put_combination_alarm_with_duplicate_ids(self):
|
||||||
"""Test combination alarm doesn't allow duplicate alarm ids."""
|
"""Test combination alarm doesn't allow duplicate alarm ids."""
|
||||||
alarms = self.get_json('/alarms',
|
alarms = self.get_json('/alarms',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user