From 08b476d2c9edeff7d025038467922f3d1cda6f19 Mon Sep 17 00:00:00 2001 From: Eoghan Glynn Date: Fri, 22 Nov 2013 11:18:35 +0000 Subject: [PATCH] Allow alarm-threshold-update to upate generic attributes Fixes bug 1253989 Previously, generic (i.e. non-threshold-related) alarm attributes could not be updated with the alarm-threshold-update command. An attempt to do so failed semi-silently when a non-existent dict key was referenced. Now, all alarm attributes can be updated with this command. Change-Id: Iba3f21de879fb853575dcec1730de7873eab8afd --- ceilometerclient/tests/v2/test_shell.py | 37 +++++++++++++++++++++---- ceilometerclient/v2/shell.py | 2 +- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/ceilometerclient/tests/v2/test_shell.py b/ceilometerclient/tests/v2/test_shell.py index 146bf2af..90d4b4d1 100644 --- a/ceilometerclient/tests/v2/test_shell.py +++ b/ceilometerclient/tests/v2/test_shell.py @@ -172,7 +172,7 @@ class ShellAlarmCommandTest(utils.BaseTestCase): self.args = mock.Mock() self.args.alarm_id = self.ALARM_ID - def _do_test_alarm_update_repeat_actions(self, repeat_actions): + def _do_test_alarm_update_repeat_actions(self, method, repeat_actions): self.args.threshold = 42.0 if repeat_actions is not None: self.args.repeat_actions = repeat_actions @@ -183,7 +183,7 @@ class ShellAlarmCommandTest(utils.BaseTestCase): self.cc.alarms.update.return_value = alarm[0] try: - ceilometer_shell.do_alarm_update(self.cc, self.args) + method(self.cc, self.args) args, kwargs = self.cc.alarms.update.call_args self.assertEqual(self.ALARM_ID, args[0]) self.assertEqual(42.0, kwargs.get('threshold')) @@ -196,13 +196,40 @@ class ShellAlarmCommandTest(utils.BaseTestCase): sys.stdout = orig def test_alarm_update_repeat_actions_untouched(self): - self._do_test_alarm_update_repeat_actions(None) + method = ceilometer_shell.do_alarm_update + self._do_test_alarm_update_repeat_actions(method, None) def test_alarm_update_repeat_actions_set(self): - self._do_test_alarm_update_repeat_actions(True) + method = ceilometer_shell.do_alarm_update + self._do_test_alarm_update_repeat_actions(method, True) def test_alarm_update_repeat_actions_clear(self): - self._do_test_alarm_update_repeat_actions(False) + method = ceilometer_shell.do_alarm_update + self._do_test_alarm_update_repeat_actions(method, False) + + def test_alarm_combination_update_repeat_actions_untouched(self): + method = ceilometer_shell.do_alarm_combination_update + self._do_test_alarm_update_repeat_actions(method, None) + + def test_alarm_combination_update_repeat_actions_set(self): + method = ceilometer_shell.do_alarm_combination_update + self._do_test_alarm_update_repeat_actions(method, True) + + def test_alarm_combination_update_repeat_actions_clear(self): + method = ceilometer_shell.do_alarm_combination_update + self._do_test_alarm_update_repeat_actions(method, False) + + def test_alarm_threshold_update_repeat_actions_untouched(self): + method = ceilometer_shell.do_alarm_threshold_update + self._do_test_alarm_update_repeat_actions(method, None) + + def test_alarm_threshold_update_repeat_actions_set(self): + method = ceilometer_shell.do_alarm_threshold_update + self._do_test_alarm_update_repeat_actions(method, True) + + def test_alarm_threshold_update_repeat_actions_clear(self): + method = ceilometer_shell.do_alarm_threshold_update + self._do_test_alarm_update_repeat_actions(method, False) class ShellSampleListCommandTest(utils.BaseTestCase): diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py index 6aea22a8..b01fb9bd 100644 --- a/ceilometerclient/v2/shell.py +++ b/ceilometerclient/v2/shell.py @@ -436,7 +436,7 @@ def do_alarm_threshold_update(cc, args={}): fields = utils.key_with_slash_to_nested_dict(fields) fields.pop('alarm_id') fields['type'] = 'threshold' - if 'query' in fields['threshold_rule']: + if 'threshold_rule' in fields and 'query' in fields['threshold_rule']: fields['threshold_rule']['query'] = options.cli_to_array( fields['threshold_rule']['query']) try: