summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliu-sheng <liusheng@huawei.com>2015-06-15 17:16:59 +0800
committerliusheng <liusheng2048@gmail.com>2015-06-17 09:31:12 +0000
commit2e7d1af50878b28d35231cde1a8315585694562b (patch)
tree7db6c1cc975d60ee5dbf7bbcf5b68a68931393b4
parent6add8c4fbf42be369b464489e204fea8655e2acf (diff)
downloadpython-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.py10
-rw-r--r--ceilometerclient/v2/shell.py7
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)