From b47f86dd036bdd29d0c245cc7c18e5b99b5b6283 Mon Sep 17 00:00:00 2001 From: xialinjuan Date: Wed, 27 Jan 2016 16:42:38 +0800 Subject: [PATCH] Fix aodh client fails when command with the arg --time-constraint when there is time-constrains attribute, we will handle it and return a dict Closes-Bug: #1538441 Change-Id: Icc6c4112082bf8f864ece41a0553793495d8be19 --- aodhclient/tests/functional/test_alarm.py | 18 +++++++++++++++- aodhclient/tests/unit/test_alarm_cli.py | 26 +++++++++++++++++++++-- aodhclient/v2/alarm_cli.py | 17 +++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/aodhclient/tests/functional/test_alarm.py b/aodhclient/tests/functional/test_alarm.py index 472b8c7..0ecfeab 100644 --- a/aodhclient/tests/functional/test_alarm.py +++ b/aodhclient/tests/functional/test_alarm.py @@ -129,7 +129,7 @@ class AodhClientTest(base.ClientTestBase): # CREATE result = self.aodh(u'alarm', params=(u"create --type threshold --name alarm1 " - " -m meter_name --threshold 5 " + "-m meter_name --threshold 5 " "--project-id %s" % PROJECT_ID)) alarm = self.details_multiple(result)[0] ALARM_ID = alarm['alarm_id'] @@ -137,6 +137,22 @@ class AodhClientTest(base.ClientTestBase): self.assertEqual('meter_name', alarm['meter_name']) self.assertEqual('5.0', alarm['threshold']) + # CREATE WITH --TIME-CONSTRAINT + result = self.aodh( + u'alarm', + params=(u"create --type threshold --name alarm_tc " + "-m meter_name --threshold 5 " + "--time-constraint " + "name=cons1;start='0 11 * * *';duration=300 " + "--time-constraint " + "name=cons2;start='0 23 * * *';duration=600 " + "--project-id %s" % PROJECT_ID)) + alarm = self.details_multiple(result)[0] + self.assertEqual('alarm_tc', alarm['name']) + self.assertEqual('meter_name', alarm['meter_name']) + self.assertEqual('5.0', alarm['threshold']) + self.assertIsNotNone(alarm['time_constraints']) + # CREATE FAIL result = self.aodh(u'alarm', params=(u"create --type threshold --name alarm1 " diff --git a/aodhclient/tests/unit/test_alarm_cli.py b/aodhclient/tests/unit/test_alarm_cli.py index 9bdfe64..47138ff 100644 --- a/aodhclient/tests/unit/test_alarm_cli.py +++ b/aodhclient/tests/unit/test_alarm_cli.py @@ -118,7 +118,8 @@ class CliAlarmCreateTest(testtools.TestCase): '--repeat-action', 'True', '--insufficient-data-action', 'http://something/insufficient', - '--time-constraint', '', + '--time-constraint', + 'name=cons1;start="0 11 * * *";duration=300;description=desc1', '--meter-name', 'cpu', '--period', '60', '--evaluation-periods', '60', @@ -147,7 +148,10 @@ class CliAlarmCreateTest(testtools.TestCase): 'ok_actions': ['http://something/ok'], 'insufficient_data_actions': ['http://something/insufficient'], - 'time_constraints': [''], + 'time_constraints': [{'description': 'desc1', + 'duration': '300', + 'name': 'cons1', + 'start': '0 11 * * *'}], 'repeat_actions': True, 'threshold_rule': { 'meter_name': 'cpu', @@ -194,3 +198,21 @@ class CliAlarmCreateTest(testtools.TestCase): } alarm_rep = self.cli_alarm_create._alarm_from_args(test_parsed_args) self.assertEqual(alarm, alarm_rep) + + def test_validate_time_constraint(self): + starts = ['0 11 * * *', ' 0 11 * * * ', + '"0 11 * * *"', '\'0 11 * * *\''] + for start in starts: + string = 'name=const1;start=%s;duration=1' % start + expected = dict(name='const1', + start='0 11 * * *', + duration='1') + self.assertEqual( + expected, + self.cli_alarm_create.validate_time_constraint(string)) + + def test_validate_time_constraint_with_bad_format(self): + string = 'name=const2;start="0 11 * * *";duration:2' + self.assertRaises(argparse.ArgumentTypeError, + self.cli_alarm_create.validate_time_constraint, + string) diff --git a/aodhclient/v2/alarm_cli.py b/aodhclient/v2/alarm_cli.py index 36972fc..69f023d 100644 --- a/aodhclient/v2/alarm_cli.py +++ b/aodhclient/v2/alarm_cli.py @@ -10,6 +10,9 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. + +import argparse + from cliff import command from cliff import lister from cliff import show @@ -134,6 +137,7 @@ class CliAlarmCreate(show.ShowOne): parser.add_argument( '--time-constraint', dest='time_constraints', metavar='