Merge "Fix ceilometer alarm properties schema"
This commit is contained in:
commit
834eb42e2e
@ -106,7 +106,6 @@ class CeilometerAlarm(resource.Resource):
|
|||||||
COMPARISON_OPERATOR: properties.Schema(
|
COMPARISON_OPERATOR: properties.Schema(
|
||||||
properties.Schema.STRING,
|
properties.Schema.STRING,
|
||||||
_('Operator used to compare specified statistic with threshold.'),
|
_('Operator used to compare specified statistic with threshold.'),
|
||||||
required=True,
|
|
||||||
constraints=[
|
constraints=[
|
||||||
constraints.AllowedValues(['ge', 'gt', 'eq', 'ne', 'lt',
|
constraints.AllowedValues(['ge', 'gt', 'eq', 'ne', 'lt',
|
||||||
'le']),
|
'le']),
|
||||||
@ -114,9 +113,8 @@ class CeilometerAlarm(resource.Resource):
|
|||||||
update_allowed=True
|
update_allowed=True
|
||||||
),
|
),
|
||||||
EVALUATION_PERIODS: properties.Schema(
|
EVALUATION_PERIODS: properties.Schema(
|
||||||
properties.Schema.STRING,
|
properties.Schema.INTEGER,
|
||||||
_('Number of periods to evaluate over.'),
|
_('Number of periods to evaluate over.'),
|
||||||
required=True,
|
|
||||||
update_allowed=True
|
update_allowed=True
|
||||||
),
|
),
|
||||||
METER_NAME: properties.Schema(
|
METER_NAME: properties.Schema(
|
||||||
@ -125,15 +123,13 @@ class CeilometerAlarm(resource.Resource):
|
|||||||
required=True
|
required=True
|
||||||
),
|
),
|
||||||
PERIOD: properties.Schema(
|
PERIOD: properties.Schema(
|
||||||
properties.Schema.STRING,
|
properties.Schema.INTEGER,
|
||||||
_('Period (seconds) to evaluate over.'),
|
_('Period (seconds) to evaluate over.'),
|
||||||
required=True,
|
|
||||||
update_allowed=True
|
update_allowed=True
|
||||||
),
|
),
|
||||||
STATISTIC: properties.Schema(
|
STATISTIC: properties.Schema(
|
||||||
properties.Schema.STRING,
|
properties.Schema.STRING,
|
||||||
_('Meter statistic to evaluate.'),
|
_('Meter statistic to evaluate.'),
|
||||||
required=True,
|
|
||||||
constraints=[
|
constraints=[
|
||||||
constraints.AllowedValues(['count', 'avg', 'sum', 'min',
|
constraints.AllowedValues(['count', 'avg', 'sum', 'min',
|
||||||
'max']),
|
'max']),
|
||||||
@ -141,7 +137,7 @@ class CeilometerAlarm(resource.Resource):
|
|||||||
update_allowed=True
|
update_allowed=True
|
||||||
),
|
),
|
||||||
THRESHOLD: properties.Schema(
|
THRESHOLD: properties.Schema(
|
||||||
properties.Schema.STRING,
|
properties.Schema.NUMBER,
|
||||||
_('Threshold to evaluate against.'),
|
_('Threshold to evaluate against.'),
|
||||||
required=True,
|
required=True,
|
||||||
update_allowed=True
|
update_allowed=True
|
||||||
|
@ -66,6 +66,33 @@ alarm_template = '''
|
|||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
not_string_alarm_template = '''
|
||||||
|
{
|
||||||
|
"AWSTemplateFormatVersion" : "2010-09-09",
|
||||||
|
"Description" : "Alarm Test",
|
||||||
|
"Parameters" : {},
|
||||||
|
"Resources" : {
|
||||||
|
"MEMAlarmHigh": {
|
||||||
|
"Type": "OS::Ceilometer::Alarm",
|
||||||
|
"Properties": {
|
||||||
|
"description": "Scale-up if MEM > 50% for 1 minute",
|
||||||
|
"meter_name": "MemoryUtilization",
|
||||||
|
"statistic": "avg",
|
||||||
|
"period": 60,
|
||||||
|
"evaluation_periods": 1,
|
||||||
|
"threshold": 50,
|
||||||
|
"alarm_actions": [],
|
||||||
|
"matching_metadata": {},
|
||||||
|
"comparison_operator": "gt"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"signal_handler" : {
|
||||||
|
"Type" : "SignalResourceType"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
|
||||||
combination_alarm_template = '''
|
combination_alarm_template = '''
|
||||||
{
|
{
|
||||||
"AWSTemplateFormatVersion" : "2010-09-09",
|
"AWSTemplateFormatVersion" : "2010-09-09",
|
||||||
@ -240,6 +267,73 @@ class CeilometerAlarmTest(HeatTestCase):
|
|||||||
|
|
||||||
self.m.VerifyAll()
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
@utils.stack_delete_after
|
||||||
|
def test_mem_alarm_high_correct_int_parameters(self):
|
||||||
|
self.stack = self.create_stack(not_string_alarm_template)
|
||||||
|
|
||||||
|
self.m.ReplayAll()
|
||||||
|
self.stack.create()
|
||||||
|
rsrc = self.stack['MEMAlarmHigh']
|
||||||
|
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
|
||||||
|
self.assertIsNone(rsrc.validate())
|
||||||
|
|
||||||
|
self.assertIsInstance(rsrc.properties['evaluation_periods'], int)
|
||||||
|
self.assertIsInstance(rsrc.properties['period'], int)
|
||||||
|
self.assertIsInstance(rsrc.properties['threshold'], int)
|
||||||
|
|
||||||
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_mem_alarm_high_not_correct_string_parameters(self):
|
||||||
|
snippet = template_format.parse(not_string_alarm_template)
|
||||||
|
for p in ('period', 'evaluation_periods'):
|
||||||
|
snippet['Resources']['MEMAlarmHigh']['Properties'][p] = '60a'
|
||||||
|
stack = utils.parse_stack(snippet)
|
||||||
|
|
||||||
|
rsrc = alarm.CeilometerAlarm(
|
||||||
|
'MEMAlarmHigh', snippet['Resources']['MEMAlarmHigh'], stack)
|
||||||
|
error = self.assertRaises(exception.StackValidationFailed,
|
||||||
|
rsrc.validate)
|
||||||
|
self.assertEqual(
|
||||||
|
"Property error : MEMAlarmHigh: %s Value '60a' is not an "
|
||||||
|
"integer" % p, str(error))
|
||||||
|
|
||||||
|
def test_mem_alarm_high_not_integer_parameters(self):
|
||||||
|
snippet = template_format.parse(not_string_alarm_template)
|
||||||
|
for p in ('period', 'evaluation_periods'):
|
||||||
|
snippet['Resources']['MEMAlarmHigh']['Properties'][p] = [60]
|
||||||
|
stack = utils.parse_stack(snippet)
|
||||||
|
|
||||||
|
rsrc = alarm.CeilometerAlarm(
|
||||||
|
'MEMAlarmHigh', snippet['Resources']['MEMAlarmHigh'], stack)
|
||||||
|
error = self.assertRaises(exception.StackValidationFailed,
|
||||||
|
rsrc.validate)
|
||||||
|
self.assertEqual(
|
||||||
|
"Property error : MEMAlarmHigh: %s int() argument must be "
|
||||||
|
"a string or a number, not 'list'" % p, str(error))
|
||||||
|
|
||||||
|
def test_mem_alarm_high_check_not_required_parameters(self):
|
||||||
|
snippet = template_format.parse(not_string_alarm_template)
|
||||||
|
snippet['Resources']['MEMAlarmHigh']['Properties'].pop('meter_name')
|
||||||
|
stack = utils.parse_stack(snippet)
|
||||||
|
|
||||||
|
rsrc = alarm.CeilometerAlarm(
|
||||||
|
'MEMAlarmHigh', snippet['Resources']['MEMAlarmHigh'], stack)
|
||||||
|
error = self.assertRaises(exception.StackValidationFailed,
|
||||||
|
rsrc.validate)
|
||||||
|
self.assertEqual(
|
||||||
|
"Property error : MEMAlarmHigh: Property meter_name not assigned",
|
||||||
|
str(error))
|
||||||
|
|
||||||
|
for p in ('period', 'evaluation_periods', 'statistic',
|
||||||
|
'comparison_operator'):
|
||||||
|
snippet = template_format.parse(not_string_alarm_template)
|
||||||
|
snippet['Resources']['MEMAlarmHigh']['Properties'].pop(p)
|
||||||
|
stack = utils.parse_stack(snippet)
|
||||||
|
|
||||||
|
rsrc = alarm.CeilometerAlarm(
|
||||||
|
'MEMAlarmHigh', snippet['Resources']['MEMAlarmHigh'], stack)
|
||||||
|
self.assertIsNone(rsrc.validate())
|
||||||
|
|
||||||
|
|
||||||
@testtools.skipIf(ceilometerclient is None, 'ceilometerclient unavailable')
|
@testtools.skipIf(ceilometerclient is None, 'ceilometerclient unavailable')
|
||||||
class CombinationAlarmTest(HeatTestCase):
|
class CombinationAlarmTest(HeatTestCase):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user