Merge "Handle non-ascii character in meter name"

This commit is contained in:
Jenkins 2014-06-23 15:56:18 +00:00 committed by Gerrit Code Review
commit 0ecfe09075
2 changed files with 22 additions and 8 deletions

View File

@ -972,8 +972,10 @@ class Meter(_Base):
"The unique identifier for the meter"
def __init__(self, **kwargs):
meter_id = base64.encodestring('%s+%s' % (kwargs['resource_id'],
kwargs['name']))
meter_id = '%s+%s' % (kwargs['resource_id'], kwargs['name'])
# meter_id is of type Unicode but base64.encodestring() only accepts
# strings. See bug #1333177
meter_id = base64.encodestring(meter_id.encode('utf-8'))
kwargs['meter_id'] = meter_id
super(Meter, self).__init__(**kwargs)

View File

@ -163,6 +163,17 @@ class TestListMeters(v2.FunctionalTest,
'size': 0,
'util': 0.58,
'is_public': True},
source='test_source1'),
sample.Sample(
u'meter.accent\xe9\u0437',
'gauge',
'',
1,
'user-id4',
'project-id2',
'resource-id4',
timestamp=datetime.datetime(2014, 7, 2, 10, 43),
resource_metadata={},
source='test_source1')]:
msg = utils.meter_message_from_counter(
cnt,
@ -172,13 +183,14 @@ class TestListMeters(v2.FunctionalTest,
def test_list_meters(self):
data = self.get_json('/meters')
self.assertEqual(5, len(data))
self.assertEqual(6, len(data))
self.assertEqual(set(['resource-id',
'resource-id2',
'resource-id3',
'resource-id4']),
set(r['resource_id'] for r in data))
self.assertEqual(set(['meter.test', 'meter.mine', 'meter.test.new']),
self.assertEqual(set(['meter.test', 'meter.mine', 'meter.test.new',
u'meter.accent\xe9\u0437']),
set(r['name'] for r in data))
self.assertEqual(set(['test_source', 'test_source1']),
set(r['source'] for r in data))
@ -199,7 +211,7 @@ class TestListMeters(v2.FunctionalTest,
def test_list_samples(self):
data = self.get_json('/samples')
self.assertEqual(6, len(data))
self.assertEqual(7, len(data))
def test_query_samples_with_invalid_field_name_and_non_eq_operator(self):
resp = self.get_json('/samples',
@ -484,7 +496,7 @@ class TestListMeters(v2.FunctionalTest,
'value': 'test_source1',
}])
nids = set(r['name'] for r in data)
self.assertEqual(set(['meter.mine']), nids)
self.assertEqual(set(['meter.mine', u'meter.accent\xe9\u0437']), nids)
sids = set(r['source'] for r in data)
self.assertEqual(set(['test_source1']), sids)
@ -654,6 +666,6 @@ class TestListMeters(v2.FunctionalTest,
def test_list_meters_meter_id(self):
data = self.get_json('/meters')
for i in data:
expected = base64.encodestring('%s+%s' % (i['resource_id'],
i['name']))
meter_id = '%s+%s' % (i['resource_id'], i['name'])
expected = base64.encodestring(meter_id.encode('utf-8'))
self.assertEqual(expected, i['meter_id'])