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

View File

@@ -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',