diff options
author | liu-sheng <liusheng@huawei.com> | 2015-06-15 17:16:59 +0800 |
---|---|---|
committer | liusheng <liusheng2048@gmail.com> | 2015-06-17 09:31:12 +0000 |
commit | 2e7d1af50878b28d35231cde1a8315585694562b (patch) | |
tree | 7db6c1cc975d60ee5dbf7bbcf5b68a68931393b4 | |
parent | 6add8c4fbf42be369b464489e204fea8655e2acf (diff) | |
download | python-ceilometerclient-2e7d1af50878b28d35231cde1a8315585694562b.tar.gz |
Explicit error for wrong resource metadata format
When creating sample with wrong resource metadata format, Ceilometer CLI
will return a ValueError about json decoding, this change provide a more
explicit error info.
Change-Id: I18e757ddb319fbf0ffad13c07528355785ea5e9a
Closes-Bug: 1465193
-rw-r--r-- | ceilometerclient/tests/unit/v2/test_shell.py | 10 | ||||
-rw-r--r-- | ceilometerclient/v2/shell.py | 7 |
2 files changed, 16 insertions, 1 deletions
diff --git a/ceilometerclient/tests/unit/v2/test_shell.py b/ceilometerclient/tests/unit/v2/test_shell.py index 663cf24..c4a61a8 100644 --- a/ceilometerclient/tests/unit/v2/test_shell.py +++ b/ceilometerclient/tests/unit/v2/test_shell.py @@ -576,6 +576,16 @@ class ShellSampleCreateCommandTest(utils.BaseTestCase): +-------------------+---------------------------------------------+ ''', sys.stdout.getvalue()) + def test_sample_create_with_invalid_resource_metadata(self): + self.args.resource_metadata = 'foo=bar' + with mock.patch('ceilometerclient.exc.CommandError') as e: + e.return_value = exc.BaseException() + self.assertRaises(exc.BaseException, + ceilometer_shell.do_sample_create, + self.cc, self.args) + e.assert_called_with('Invalid resource metadata, it should be a' + ' json string, like: \'{"foo":"bar"}\'') + class ShellSampleCreateListCommandTest(utils.BaseTestCase): diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py index b67d765..7b0e89e 100644 --- a/ceilometerclient/v2/shell.py +++ b/ceilometerclient/v2/shell.py @@ -231,7 +231,12 @@ def do_sample_create(cc, args={}): k, v = var[0], var[1] if v is not None: if k == 'resource_metadata': - fields[k] = json.loads(v) + try: + fields[k] = json.loads(v) + except ValueError: + msg = ('Invalid resource metadata, it should be a json' + ' string, like: \'{"foo":"bar"}\'') + raise exc.CommandError(msg) else: fields[arg_to_field_mapping.get(k, k)] = v sample = cc.samples.create(**fields) |