Fix CloudPipe extension XML serialization
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
This commit is contained in:
committed by
Mauro S. M. Rodrigues
parent
0d565de78b
commit
2ba27f66cf
@@ -37,15 +37,21 @@ authorize = extensions.extension_authorizer('compute', 'cloudpipe')
|
|||||||
|
|
||||||
class CloudpipeTemplate(xmlutil.TemplateBuilder):
|
class CloudpipeTemplate(xmlutil.TemplateBuilder):
|
||||||
def construct(self):
|
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):
|
class CloudpipesTemplate(xmlutil.TemplateBuilder):
|
||||||
def construct(self):
|
def construct(self):
|
||||||
root = xmlutil.TemplateElement('cloudpipes')
|
root = xmlutil.TemplateElement('cloudpipes')
|
||||||
elem = xmlutil.make_flat_dict('cloudpipe', selector='cloudpipes',
|
elem1 = xmlutil.SubTemplateElement(root, 'cloudpipe',
|
||||||
subselector='cloudpipe')
|
selector='cloudpipes')
|
||||||
root.append(elem)
|
elem2 = xmlutil.SubTemplateElement(elem1, xmlutil.Selector(0),
|
||||||
|
selector=xmlutil.get_items)
|
||||||
|
elem2.text = 1
|
||||||
return xmlutil.MasterTemplate(root, 1)
|
return xmlutil.MasterTemplate(root, 1)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -152,25 +152,24 @@ class CloudpipesXMLSerializerTest(test.TestCase):
|
|||||||
def test_index_serializer(self):
|
def test_index_serializer(self):
|
||||||
serializer = cloudpipe.CloudpipesTemplate()
|
serializer = cloudpipe.CloudpipesTemplate()
|
||||||
exemplar = dict(cloudpipes=[
|
exemplar = dict(cloudpipes=[
|
||||||
dict(cloudpipe=dict(
|
dict(
|
||||||
project_id='1234',
|
project_id='1234',
|
||||||
public_ip='1.2.3.4',
|
public_ip='1.2.3.4',
|
||||||
public_port='321',
|
public_port='321',
|
||||||
instance_id='1234-1234-1234-1234',
|
instance_id='1234-1234-1234-1234',
|
||||||
created_at=timeutils.isotime(),
|
created_at=timeutils.isotime(),
|
||||||
state='running')),
|
state='running'),
|
||||||
dict(cloudpipe=dict(
|
dict(
|
||||||
project_id='4321',
|
project_id='4321',
|
||||||
public_ip='4.3.2.1',
|
public_ip='4.3.2.1',
|
||||||
public_port='123',
|
public_port='123',
|
||||||
state='pending'))])
|
state='pending')])
|
||||||
text = serializer.serialize(exemplar)
|
text = serializer.serialize(exemplar)
|
||||||
tree = etree.fromstring(text)
|
tree = etree.fromstring(text)
|
||||||
self.assertEqual('cloudpipes', tree.tag)
|
self.assertEqual('cloudpipes', tree.tag)
|
||||||
self.assertEqual(len(exemplar['cloudpipes']), len(tree))
|
self.assertEqual(len(exemplar['cloudpipes']), len(tree))
|
||||||
for idx, cl_pipe in enumerate(tree):
|
for idx, cl_pipe in enumerate(tree):
|
||||||
self.assertEqual('cloudpipe', cl_pipe.tag)
|
kp_data = exemplar['cloudpipes'][idx]
|
||||||
kp_data = exemplar['cloudpipes'][idx]['cloudpipe']
|
|
||||||
for child in cl_pipe:
|
for child in cl_pipe:
|
||||||
self.assertTrue(child.tag in kp_data)
|
self.assertTrue(child.tag in kp_data)
|
||||||
self.assertEqual(child.text, kp_data[child.tag])
|
self.assertEqual(child.text, kp_data[child.tag])
|
||||||
|
|||||||
Reference in New Issue
Block a user