Skip to content

Commit

Permalink
Fix CloudPipe extension XML serialization
Browse files Browse the repository at this point in the history
It is completely broken right now and this fixes it to properly
traverse a list of cloudpipe instance dictionaries, resulting
in XML output that matches the API spec.

Fixes bug: 1056242

Change-Id: Ic768afeaa76d776fd55a4f618d14fa41ed4c8a63
  • Loading branch information
kk7ds authored and maurorodrigues committed Sep 28, 2012
1 parent 0d565de commit 2ba27f6
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
14 changes: 10 additions & 4 deletions nova/api/openstack/compute/contrib/cloudpipe.py
Expand Up @@ -37,15 +37,21 @@

class CloudpipeTemplate(xmlutil.TemplateBuilder):
def construct(self):
return xmlutil.MasterTemplate(xmlutil.make_flat_dict('cloudpipe'), 1)
root = xmlutil.TemplateElement('cloudpipe')
elem = xmlutil.SubTemplateElement(root, 'instance_id',
selector='instance_id')
elem.text = str
return xmlutil.MasterTemplate(root, 1)


class CloudpipesTemplate(xmlutil.TemplateBuilder):
def construct(self):
root = xmlutil.TemplateElement('cloudpipes')
elem = xmlutil.make_flat_dict('cloudpipe', selector='cloudpipes',
subselector='cloudpipe')
root.append(elem)
elem1 = xmlutil.SubTemplateElement(root, 'cloudpipe',
selector='cloudpipes')
elem2 = xmlutil.SubTemplateElement(elem1, xmlutil.Selector(0),
selector=xmlutil.get_items)
elem2.text = 1
return xmlutil.MasterTemplate(root, 1)


Expand Down
11 changes: 5 additions & 6 deletions nova/tests/api/openstack/compute/contrib/test_cloudpipe.py
Expand Up @@ -152,25 +152,24 @@ def test_default_serializer(self):
def test_index_serializer(self):
serializer = cloudpipe.CloudpipesTemplate()
exemplar = dict(cloudpipes=[
dict(cloudpipe=dict(
dict(
project_id='1234',
public_ip='1.2.3.4',
public_port='321',
instance_id='1234-1234-1234-1234',
created_at=timeutils.isotime(),
state='running')),
dict(cloudpipe=dict(
state='running'),
dict(
project_id='4321',
public_ip='4.3.2.1',
public_port='123',
state='pending'))])
state='pending')])
text = serializer.serialize(exemplar)
tree = etree.fromstring(text)
self.assertEqual('cloudpipes', tree.tag)
self.assertEqual(len(exemplar['cloudpipes']), len(tree))
for idx, cl_pipe in enumerate(tree):
self.assertEqual('cloudpipe', cl_pipe.tag)
kp_data = exemplar['cloudpipes'][idx]['cloudpipe']
kp_data = exemplar['cloudpipes'][idx]
for child in cl_pipe:
self.assertTrue(child.tag in kp_data)
self.assertEqual(child.text, kp_data[child.tag])
Expand Down

0 comments on commit 2ba27f6

Please sign in to comment.