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
This commit is contained in:
liu-sheng
2015-06-15 17:16:59 +08:00
committed by liusheng
parent 6add8c4fbf
commit 2e7d1af508
2 changed files with 16 additions and 1 deletions

View File

@@ -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):

View File

@@ -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)