Merge "Validation Check for 'query' params of alarm type 'event'"
This commit is contained in:
commit
444817f0de
@ -13,6 +13,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import voluptuous
|
||||||
import wsme
|
import wsme
|
||||||
from wsme import types as wtypes
|
from wsme import types as wtypes
|
||||||
|
|
||||||
@ -20,6 +21,13 @@ from aodh.api.controllers.v2 import base
|
|||||||
from aodh.i18n import _
|
from aodh.i18n import _
|
||||||
|
|
||||||
|
|
||||||
|
# Schema validation for the event type query.
|
||||||
|
_q_validator = voluptuous.Schema(
|
||||||
|
{"field": voluptuous.Match(r"^[a-zA-Z.',0-9_-]*$"),
|
||||||
|
"op": voluptuous.In(base.operation_kind),
|
||||||
|
"value": voluptuous.In(["string", "integer", "float", "boolean", ""])})
|
||||||
|
|
||||||
|
|
||||||
class AlarmEventRule(base.AlarmRule):
|
class AlarmEventRule(base.AlarmRule):
|
||||||
"""Alarm Event Rule.
|
"""Alarm Event Rule.
|
||||||
|
|
||||||
@ -40,8 +48,15 @@ class AlarmEventRule(base.AlarmRule):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def validate_alarm(cls, alarm):
|
def validate_alarm(cls, alarm):
|
||||||
|
super(AlarmEventRule, cls).validate_alarm(alarm)
|
||||||
for i in alarm.event_rule.query:
|
for i in alarm.event_rule.query:
|
||||||
i._get_value_as_type()
|
i._get_value_as_type()
|
||||||
|
try:
|
||||||
|
_q_validator({"field": i.field, "op": i.op,
|
||||||
|
"value": i.type})
|
||||||
|
except voluptuous.MultipleInvalid as e:
|
||||||
|
raise base.ClientSideError(
|
||||||
|
_("Query value or traits invalid: %s") % str(e))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def default_description(self):
|
def default_description(self):
|
||||||
|
@ -28,6 +28,72 @@ tests:
|
|||||||
response_headers:
|
response_headers:
|
||||||
allow: GET, POST
|
allow: GET, POST
|
||||||
|
|
||||||
|
- name: try to POST an event type alarm
|
||||||
|
desc: what does POST response be
|
||||||
|
POST: /v2/alarms
|
||||||
|
request_headers:
|
||||||
|
content-type: application/json
|
||||||
|
data:
|
||||||
|
name: instance_off
|
||||||
|
type: event
|
||||||
|
event_rule:
|
||||||
|
query: [{'field': "{=:", 'op': "eq", 'type': "string", 'value': "sample_string"}]
|
||||||
|
status: 400
|
||||||
|
response_strings:
|
||||||
|
- "Query value or traits invalid:"
|
||||||
|
|
||||||
|
- name: try to POST an event type alarm2
|
||||||
|
desc: what does POST response be
|
||||||
|
POST: /v2/alarms
|
||||||
|
request_headers:
|
||||||
|
content-type: application/json
|
||||||
|
data:
|
||||||
|
name: instance_off
|
||||||
|
type: event
|
||||||
|
event_rule:
|
||||||
|
query: [{'field': "traits.instance_id", 'op': "eq", 'type': "", 'value': "default_string_datatype_isconsidered"}]
|
||||||
|
status: 201
|
||||||
|
|
||||||
|
- name: try to POST an event type alarm3
|
||||||
|
desc: what does POST response be
|
||||||
|
POST: /v2/alarms
|
||||||
|
request_headers:
|
||||||
|
content-type: application/json
|
||||||
|
data:
|
||||||
|
name: instance_off
|
||||||
|
type: event
|
||||||
|
event_rule:
|
||||||
|
query: [{'field': "traits.instance_id", 'op': "lt", 'type': "integer", 'value': "1234567"}]
|
||||||
|
status: 201
|
||||||
|
|
||||||
|
- name: try to POST an event type alarm4
|
||||||
|
desc: what does POST response be
|
||||||
|
POST: /v2/alarms
|
||||||
|
request_headers:
|
||||||
|
content-type: application/json
|
||||||
|
data:
|
||||||
|
name: instance_off
|
||||||
|
type: event
|
||||||
|
event_rule:
|
||||||
|
query: [{'field': "traits.instance_id", 'op': "lt", 'type': "integer", 'value': "hello"}]
|
||||||
|
status: 400
|
||||||
|
response_strings:
|
||||||
|
- "Unable to convert the value hello to the expected data type integer"
|
||||||
|
|
||||||
|
- name: try to POST an event type alarm5
|
||||||
|
desc: what does POST response be
|
||||||
|
POST: /v2/alarms
|
||||||
|
request_headers:
|
||||||
|
content-type: application/json
|
||||||
|
data:
|
||||||
|
name: instance_off
|
||||||
|
type: event
|
||||||
|
event_rule:
|
||||||
|
query: [{'field': "traits.instance_id", 'op': "ltt", 'type': "integer", 'value': "1234567"}]
|
||||||
|
status: 400
|
||||||
|
response_strings:
|
||||||
|
- "Query value or traits invalid:"
|
||||||
|
|
||||||
- name: createAlarm
|
- name: createAlarm
|
||||||
desc: Creates an alarm.
|
desc: Creates an alarm.
|
||||||
POST: /v2/alarms
|
POST: /v2/alarms
|
||||||
|
@ -27,6 +27,7 @@ requests>=2.5.2
|
|||||||
six>=1.9.0
|
six>=1.9.0
|
||||||
stevedore>=1.5.0 # Apache-2.0
|
stevedore>=1.5.0 # Apache-2.0
|
||||||
tooz>=1.28.0 # Apache-2.0
|
tooz>=1.28.0 # Apache-2.0
|
||||||
|
voluptuous>=0.8.10
|
||||||
WebOb>=1.2.3
|
WebOb>=1.2.3
|
||||||
WSME>=0.8
|
WSME>=0.8
|
||||||
cachetools>=1.1.6
|
cachetools>=1.1.6
|
||||||
|
Loading…
Reference in New Issue
Block a user