api: handle case where metadata is None

This fixes bug #1158808

Change-Id: Ib63f42417262544b12f3cdf267d3c2f2eb47746a
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Julien Danjou
2013-03-22 16:20:20 +01:00
parent d207bdb5b5
commit 5d01edce3f
2 changed files with 26 additions and 3 deletions

View File

@@ -194,9 +194,11 @@ def _flatten_metadata(metadata):
"""Return flattened resource metadata without nested structures """Return flattened resource metadata without nested structures
and with all values converted to unicode strings. and with all values converted to unicode strings.
""" """
return dict((k, unicode(v)) if metadata:
for k, v in metadata.iteritems() return dict((k, unicode(v))
if type(v) not in set([list, dict, set])) for k, v in metadata.iteritems()
if type(v) not in set([list, dict, set]))
return {}
class Sample(wtypes.Base): class Sample(wtypes.Base):

View File

@@ -39,6 +39,27 @@ class TestListResources(FunctionalTest):
data = self.get_json('/resources') data = self.get_json('/resources')
self.assertEquals([], data) 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): def test_instances(self):
counter1 = counter.Counter( counter1 = counter.Counter(
'instance', 'instance',