diff options
| author | Naveed Massjouni <naveedm9@gmail.com> | 2011-09-04 05:39:21 -0400 |
|---|---|---|
| committer | Naveed Massjouni <naveedm9@gmail.com> | 2011-09-04 05:39:21 -0400 |
| commit | 9b35957eef001ae1c3329e9197984d3aca0da787 (patch) | |
| tree | fa7ed9b680d6f44e4443be25018a86478bf2453f | |
| parent | c5ad2b155a2ad7d7aefea316362cc354d0cf4cf3 (diff) | |
Fixing xml serialization of limits resource.
| -rw-r--r-- | nova/api/openstack/limits.py | 24 | ||||
| -rw-r--r-- | nova/tests/api/openstack/test_limits.py | 34 |
2 files changed, 29 insertions, 29 deletions
diff --git a/nova/api/openstack/limits.py b/nova/api/openstack/limits.py index 2896ac396..f6df94eea 100644 --- a/nova/api/openstack/limits.py +++ b/nova/api/openstack/limits.py @@ -87,25 +87,25 @@ class LimitsXMLSerializer(wsgi.XMLDictSerializer): def __init__(self): pass - def _create_rates_node(self, rates_dict): + def _create_rates_node(self, rates): rates_elem = etree.Element('rates', nsmap=self.NSMAP) - for rate in rates_dict.items(): + for rate in rates: rate_node = etree.SubElement(rates_elem, 'rate') rate_node.set('uri', rate['uri']) rate_node.set('regex', rate['regex']) - for limit in rate['limits']: + for limit in rate['limit']: limit_elem = etree.SubElement(rate_node, 'limit') - limit_elem.set('value', str(rate['value'])) - limit_elem.set('verb', str(rate['verb'])) - limit_elem.set('remaining', str(rate['remaining'])) - limit_elem.set('unit', str(rate['unit'])) - limit_elem.set('next-available', str(rate['next-available'])) + limit_elem.set('value', str(limit['value'])) + limit_elem.set('verb', str(limit['verb'])) + limit_elem.set('remaining', str(limit['remaining'])) + limit_elem.set('unit', str(limit['unit'])) + limit_elem.set('next-available', str(limit['next-available'])) return rates_elem def _create_absolute_node(self, absolute_dict): absolute_elem = etree.Element('absolute', nsmap=self.NSMAP) for key, value in absolute_dict.items(): - limit_elem = etree.SubElement(rate_node, 'limit') + limit_elem = etree.SubElement(absolute_elem, 'limit') limit_elem.set('name', str(key)) limit_elem.set('value', str(value)) return absolute_elem @@ -114,16 +114,16 @@ class LimitsXMLSerializer(wsgi.XMLDictSerializer): """Populate a limits xml element from a dict.""" rates_elem = self._create_rates_node( - limits_dict.get('rates', {})) + limits_dict.get('rate', [])) limits_elem.append(rates_elem) absolutes_elem = self._create_absolute_node( - limits_dict.get('absolutes', {})) + limits_dict.get('absolute', {})) limits_elem.append(absolutes_elem) def index(self, limits_dict): limits = etree.Element('limits', nsmap=self.NSMAP) - self._populate_limits(limits, limits_dict) + self._populate_limits(limits, limits_dict['limits']) return self._to_xml(limits) diff --git a/nova/tests/api/openstack/test_limits.py b/nova/tests/api/openstack/test_limits.py index f71d9c454..3db57ee86 100644 --- a/nova/tests/api/openstack/test_limits.py +++ b/nova/tests/api/openstack/test_limits.py @@ -41,8 +41,10 @@ TEST_LIMITS = [ limits.Limit("PUT", "*", "", 10, limits.PER_MINUTE), limits.Limit("PUT", "/servers", "^/servers", 5, limits.PER_MINUTE), ] -NS = "{http://docs.openstack.org/compute/api/v1.1}" -ATOMNS = "{http://www.w3.org/2005/Atom}" +NS = { + 'atom': 'http://www.w3.org/2005/Atom', + 'ns': 'http://docs.openstack.org/compute/api/v1.1' +} class BaseLimitTestSuite(unittest.TestCase): @@ -998,7 +1000,8 @@ class LimitsXMLSerializationTest(test.TestCase): def test_index(self): serializer = limits.LimitsXMLSerializer() - fixture = {"limits": { + fixture = { + "limits": { "rate": [{ "uri": "*", "regex": ".*", @@ -1027,28 +1030,27 @@ class LimitsXMLSerializationTest(test.TestCase): xmlutil.validate_schema(root, 'limits') #verify absolute limits - absolute = root.find('{0}absolute'.format(NS)) - absolutes = absolute.findall('limit'.format(NS)) + absolutes = root.xpath('ns:absolute/ns:limit', namespaces=NS) + self.assertEqual(len(absolutes), 4) for limit in absolutes: name = limit.get('name') value = limit.get('value') self.assertEqual(value, str(fixture['limits']['absolute'][name])) #verify rate limits - rate_root = root.find('{0}rates'.format(NS)) - rates = rate_root.findall('{0}rate'.format(NS)) - for i in range(len(rates)): - rate = rates[i] + rates = root.xpath('ns:rates/ns:rate', namespaces=NS) + self.assertEqual(len(rates), 2) + for i, rate in enumerate(rates): for key in ['uri', 'regex']: self.assertEqual(rate.get(key), str(fixture['limits']['rate'][i][key])) - rate_limits = rate.findall('{0}limit'.format(NS)) - for z in range(len(rate_limits)): - limit = rate_limits[z] + rate_limits = rate.xpath('ns:limit', namespaces=NS) + self.assertEqual(len(rate_limits), 1) + for j, limit in enumerate(rate_limits): for key in ['verb', 'value', 'remaining', 'unit', 'next-available']: self.assertEqual(limit.get(key), - str(fixture['limits']['rate'][i]['limit'][z][key])) + str(fixture['limits']['rate'][i]['limit'][j][key])) def test_index_no_limits(self): serializer = limits.LimitsXMLSerializer() @@ -1063,11 +1065,9 @@ class LimitsXMLSerializationTest(test.TestCase): xmlutil.validate_schema(root, 'limits') #verify absolute limits - absolute = root.find('{0}absolute'.format(NS)) - absolutes = absolute.findall('limit'.format(NS)) + absolutes = root.xpath('ns:absolute/ns:limit', namespaces=NS) self.assertEqual(len(absolutes), 0) #verify rate limits - rate_root = root.find('{0}rates'.format(NS)) - rates = rate_root.findall('{0}rate'.format(NS)) + rates = root.xpath('ns:rates/ns:rate', namespaces=NS) self.assertEqual(len(rates), 0) |
