Fix alarm-list from CLI failing if multiple sort-by

If you run the command: monasca alarm-list  --sort-by severity,state
It fails with: "Unprocessable Entity" complaining that 'name,state'
is not a valid sort_by field. It is treating the comma separated
list as a single entry.

Fix by doing a split using ',' if the sort_by field is a string.

Created a tempest test that showed the problem

Change-Id: I68ce80ccea8493f5980e4d95929a38e587464949
This commit is contained in:
Craig Bryant 2017-02-14 14:46:29 -07:00
parent 9d470036f5
commit 55dab3b887
2 changed files with 23 additions and 1 deletions

View File

@ -127,7 +127,7 @@ class Alarms(alarms_api_v2.AlarmsV2API,
if 'sort_by' in query_parms:
if isinstance(query_parms['sort_by'], basestring):
query_parms['sort_by'] = [query_parms['sort_by']]
query_parms['sort_by'] = query_parms['sort_by'].split(',')
allowed_sort_by = {'alarm_id', 'alarm_definition_id', 'alarm_definition_name',
'state', 'severity', 'lifecycle_state', 'link',

View File

@ -13,6 +13,7 @@
# under the License.
import time
import urllib
import six.moves.urllib.parse as urlparse
@ -516,6 +517,27 @@ class TestAlarms(base.BaseMonascaTest):
element['created_timestamp'])
last_timestamp = element['created_timestamp']
# Set link and lifecycle_state to sort in opposite order
self.monasca_client.patch_alarm(elements[0]['id'], lifecycle_state='3', link='2')
self.monasca_client.patch_alarm(elements[1]['id'], lifecycle_state='2', link='2')
self.monasca_client.patch_alarm(elements[2]['id'], lifecycle_state='4', link='1')
for iter in range(2):
sort_by_params = 'link,lifecycle_state'
if iter == 1:
query_parms = urllib.urlencode([('sort_by', sort_by_params)])
else:
query_parms = 'sort_by=' + sort_by_params
resp, response_body = self.monasca_client.list_alarms(
'?metric_name=' + expected_metric['name'] + '&' + query_parms)
elements = response_body['elements']
self.assertEqual(3, len(elements))
self.assertEqual('1', elements[0]['link'])
self.assertEqual('4', elements[0]['lifecycle_state'])
self.assertEqual('2', elements[1]['link'])
self.assertEqual('2', elements[1]['lifecycle_state'])
self.assertEqual('2', elements[2]['link'])
self.assertEqual('3', elements[2]['lifecycle_state'])
allowed_sort_by = {'alarm_id', 'alarm_definition_id', 'alarm_definition_name',
'state', 'severity', 'lifecycle_state', 'link',
'state_updated_timestamp', 'updated_timestamp',