From 5d01edce3f0def54bb7c0f8ea1115e42185dea92 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Fri, 22 Mar 2013 16:20:20 +0100 Subject: [PATCH] api: handle case where metadata is None This fixes bug #1158808 Change-Id: Ib63f42417262544b12f3cdf267d3c2f2eb47746a Signed-off-by: Julien Danjou --- ceilometer/api/controllers/v2.py | 8 +++++--- tests/api/v2/test_list_resources.py | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/ceilometer/api/controllers/v2.py b/ceilometer/api/controllers/v2.py index 5c72f7a58..0129ea63f 100644 --- a/ceilometer/api/controllers/v2.py +++ b/ceilometer/api/controllers/v2.py @@ -194,9 +194,11 @@ def _flatten_metadata(metadata): """Return flattened resource metadata without nested structures and with all values converted to unicode strings. """ - return dict((k, unicode(v)) - for k, v in metadata.iteritems() - if type(v) not in set([list, dict, set])) + if metadata: + return dict((k, unicode(v)) + for k, v in metadata.iteritems() + if type(v) not in set([list, dict, set])) + return {} class Sample(wtypes.Base): diff --git a/tests/api/v2/test_list_resources.py b/tests/api/v2/test_list_resources.py index 6862491df..ab9c13596 100644 --- a/tests/api/v2/test_list_resources.py +++ b/tests/api/v2/test_list_resources.py @@ -39,6 +39,27 @@ class TestListResources(FunctionalTest): data = self.get_json('/resources') self.assertEquals([], data) + def test_instance_no_metadata(self): + counter1 = counter.Counter( + 'instance', + 'cumulative', + '', + 1, + 'user-id', + 'project-id', + 'resource-id', + timestamp=datetime.datetime(2012, 7, 2, 10, 40), + resource_metadata=None + ) + msg = meter.meter_message_from_counter(counter1, + cfg.CONF.metering_secret, + 'test', + ) + self.conn.record_metering_data(msg) + + data = self.get_json('/resources') + self.assertEquals(1, len(data)) + def test_instances(self): counter1 = counter.Counter( 'instance',