Allow lower case for queries with state and severity

Add tests to validate. Change some tempest tests to validate.

Change-Id: I92bcf8fc8f1605dcf3a291b3fd224d930f96b1f0
This commit is contained in:
Craig Bryant 2017-01-24 21:19:58 -07:00
parent d9794a53f3
commit 65aefd7772
7 changed files with 64 additions and 25 deletions

View File

@ -1,4 +1,4 @@
# (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP
# (C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP
# Copyright 2015 Cray Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
@ -18,6 +18,7 @@ import unittest
import falcon
import mock
import monasca_api.v2.common.exceptions as common_exceptions
import monasca_api.v2.common.schemas.alarm_definition_request_body_schema as schemas_alarm_defs
import monasca_api.v2.common.schemas.exceptions as schemas_exceptions
import monasca_api.v2.common.schemas.notifications_request_body_schema as schemas_notifications
@ -137,6 +138,51 @@ class TestValueMetaValidation(unittest.TestCase):
value_meta)
class TestStateValidation(unittest.TestCase):
VALID_STATES = "OK", "ALARM", "UNDETERMINED"
def test_valid_states(self):
for state in self.VALID_STATES:
validation.validate_alarm_state(state)
def test_valid_states_lower_case(self):
for state in self.VALID_STATES:
validation.validate_alarm_state(state.lower())
def test_invalid_state(self):
self.assertRaises(common_exceptions.HTTPUnprocessableEntityError,
validation.validate_alarm_state, 'BOGUS')
class TestSeverityValidation(unittest.TestCase):
VALID_SEVERITIES = "LOW", "MEDIUM", "HIGH", "CRITICAL"
def test_valid_severities(self):
for state in self.VALID_SEVERITIES:
validation.validate_severity_query(state)
def test_valid_severities_lower_case(self):
for state in self.VALID_SEVERITIES:
validation.validate_severity_query(state.lower())
def test_valid_multi_severities(self):
validation.validate_severity_query('|'.join(self.VALID_SEVERITIES))
def test_valid_multi_severities_lower_case(self):
validation.validate_severity_query('|'.join(self.VALID_SEVERITIES)
.lower())
def test_invalid_state(self):
self.assertRaises(common_exceptions.HTTPUnprocessableEntityError,
validation.validate_severity_query,
'BOGUS')
self.assertRaises(common_exceptions.HTTPUnprocessableEntityError,
validation.validate_severity_query,
'|'.join([self.VALID_SEVERITIES[0], 'BOGUS']))
class TestRoleValidation(unittest.TestCase):
def test_role_valid(self):

View File

@ -1,4 +1,4 @@
# (C) Copyright 2015,2016 Hewlett Packard Enterprise Development Company LP
# (C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP
#
# 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
@ -56,14 +56,14 @@ def dimension_value(value):
def validate_alarm_state(state):
if state not in VALID_ALARM_STATES:
if state.upper() not in VALID_ALARM_STATES:
raise HTTPUnprocessableEntityError("Invalid State",
"State {} must be one of {}".format(state.encode('utf8'),
VALID_ALARM_STATES))
def validate_alarm_definition_severity(severity):
if severity not in VALID_ALARM_DEFINITION_SEVERITIES:
if severity.upper() not in VALID_ALARM_DEFINITION_SEVERITIES:
raise HTTPUnprocessableEntityError("Invalid Severity",
"Severity {} must be one of {}".format(severity.encode('utf8'),
VALID_ALARM_DEFINITION_SEVERITIES))
@ -115,12 +115,6 @@ def validate_value_meta(value_meta):
assert len(value_meta[name]) >= 1, "ValueMeta value cannot be empty"
def validate_state_query(state_str):
if state_str not in VALID_ALARM_STATES:
raise HTTPUnprocessableEntityError("Unprocessable Entity",
"state {} must be one of 'ALARM','OK','UNDETERMINED'".format(state_str))
def validate_email_address(email):
if re.match(EMAIL_PATTERN, email) is None:
return False

View File

@ -1,4 +1,4 @@
# (C) Copyright 2014,2015-2017 Hewlett Packard Enterprise Development LP
# (C) Copyright 2014-2017 Hewlett Packard Enterprise Development LP
#
# 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
@ -89,6 +89,7 @@ class AlarmDefinitions(alarm_definitions_api_v2.AlarmDefinitionsV2API,
severity = helpers.get_query_param(req, "severity", default_val=None)
if severity is not None:
validation.validate_severity_query(severity)
severity = severity.upper()
sort_by = helpers.get_query_param(req, 'sort_by', default_val=None)
if sort_by is not None:
if isinstance(sort_by, basestring):

View File

@ -1,4 +1,4 @@
# Copyright 2014-2016 Hewlett Packard Enterprise Development Company LP
# Copyright 2014-2017 Hewlett Packard Enterprise Development LP
#
# 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
@ -115,9 +115,11 @@ class Alarms(alarms_api_v2.AlarmsV2API,
query_parms = falcon.uri.parse_query_string(req.query_string)
if 'state' in query_parms:
validation.validate_alarm_state(query_parms['state'])
query_parms['state'] = query_parms['state'].upper()
if 'severity' in query_parms:
validation.validate_severity_query(query_parms['severity'])
query_parms['severity'] = query_parms['severity'].upper()
if 'sort_by' in query_parms:
if isinstance(query_parms['sort_by'], basestring):
@ -128,12 +130,6 @@ class Alarms(alarms_api_v2.AlarmsV2API,
'state_updated_timestamp', 'updated_timestamp', 'created_timestamp'}
validation.validate_sort_by(query_parms['sort_by'], allowed_sort_by)
if 'state' in query_parms:
validation.validate_alarm_state(query_parms['state'])
if 'severity' in query_parms:
validation.validate_severity_query(query_parms['severity'])
# ensure metric_dimensions is a list
if 'metric_dimensions' in query_parms and isinstance(query_parms['metric_dimensions'], str):
query_parms['metric_dimensions'] = query_parms['metric_dimensions'].split(',')
@ -395,9 +391,11 @@ class AlarmsCount(alarms_api_v2.AlarmsCountV2API, alarming.Alarming):
if 'state' in query_parms:
validation.validate_alarm_state(query_parms['state'])
query_parms['state'] = query_parms['state'].upper()
if 'severity' in query_parms:
validation.validate_severity_query(query_parms['severity'])
query_parms['severity'] = query_parms['severity'].upper()
if 'group_by' in query_parms:
if not isinstance(query_parms['group_by'], list):

View File

@ -1,4 +1,4 @@
# (C) Copyright 2015,2016 Hewlett Packard Enterprise Development Company LP
# (C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP
#
# 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
@ -426,7 +426,7 @@ class TestAlarmDefinitions(base.BaseMonascaTest):
name=name,
description="description",
expression=expression,
severity="LOW")
severity="low")
resp, res_body_create_alarm_def = self.monasca_client.\
create_alarm_definitions(alarm_definition)
self.assertEqual(201, resp.status)

View File

@ -1,4 +1,4 @@
# (C) Copyright 2015-2016 Hewlett Packard Enterprise Development Company LP
# (C) Copyright 2015-2017 Hewlett Packard Enterprise Development LP
#
# 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
@ -252,7 +252,7 @@ class TestAlarms(base.BaseMonascaTest):
resp, response_body1 = self.monasca_client.list_alarms(query_parms)
len1 = len(response_body1['elements'])
self.assertEqual(200, resp.status)
query_parms = '?state=OK'
query_parms = '?state=ok'
resp, response_body2 = self.monasca_client.list_alarms(query_parms)
len2 = len(response_body2['elements'])
self.assertEqual(200, resp.status)

View File

@ -1,4 +1,4 @@
# (C) Copyright 2016 Hewlett Packard Enterprise Development Company LP
# (C) Copyright 2016-2017 Hewlett Packard Enterprise Development LP
#
# 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
@ -194,7 +194,7 @@ class TestAlarmsCount(base.BaseMonascaTest):
resp, response_body = self.monasca_client.list_alarms("?state=ALARM")
self.assertEqual(200, resp.status)
alarm_state_count = len(response_body['elements'])
resp, response_body = self.monasca_client.list_alarms("?state=UNDETERMINED")
resp, response_body = self.monasca_client.list_alarms("?state=undetermined")
self.assertEqual(200, resp.status)
undet_state_count = len(response_body['elements'])
@ -235,7 +235,7 @@ class TestAlarmsCount(base.BaseMonascaTest):
# test with filter parameters
@test.attr(type='gate')
def test_filter_params(self):
resp, response_body = self.monasca_client.list_alarms("?severity=LOW")
resp, response_body = self.monasca_client.list_alarms("?severity=low")
self.assertEqual(200, resp.status)
expected_count = len(response_body['elements'])