summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-11-29 17:14:14 +0000
committerGerrit Code Review <review@openstack.org>2012-11-29 17:14:14 +0000
commit85ae44a753281d7ed6019020cbdfcf7dd52dfd55 (patch)
tree107c704afb48ac1a4a81111421e2742a3c608f4d
parent5c33ce67908f03a620f4b9f2abc54ac7f0de993a (diff)
parentf58f2b48a1c5ebb01ef998720e5dbd1d88ed6e5d (diff)
downloadnova-85ae44a753281d7ed6019020cbdfcf7dd52dfd55.tar.gz
nova-85ae44a753281d7ed6019020cbdfcf7dd52dfd55.tar.xz
nova-85ae44a753281d7ed6019020cbdfcf7dd52dfd55.zip
Merge "Fix HostDeserializer to enable multiple line xml"
-rw-r--r--nova/api/openstack/compute/contrib/hosts.py16
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_hosts.py11
2 files changed, 19 insertions, 8 deletions
diff --git a/nova/api/openstack/compute/contrib/hosts.py b/nova/api/openstack/compute/contrib/hosts.py
index 3479e41e2..8982f5724 100644
--- a/nova/api/openstack/compute/contrib/hosts.py
+++ b/nova/api/openstack/compute/contrib/hosts.py
@@ -70,7 +70,7 @@ class HostShowTemplate(xmlutil.TemplateBuilder):
return xmlutil.MasterTemplate(root, 1)
-class HostDeserializer(wsgi.XMLDeserializer):
+class HostUpdateDeserializer(wsgi.XMLDeserializer):
def default(self, string):
try:
node = minidom.parseString(string)
@@ -79,8 +79,16 @@ class HostDeserializer(wsgi.XMLDeserializer):
raise exception.MalformedRequestBody(reason=msg)
updates = {}
- for child in node.childNodes[0].childNodes:
- updates[child.tagName] = self.extract_text(child)
+ updates_node = self.find_first_child_named(node, 'updates')
+ if updates_node is not None:
+ maintenance = self.find_first_child_named(updates_node,
+ 'maintenance_mode')
+ if maintenance is not None:
+ updates[maintenance.tagName] = self.extract_text(maintenance)
+
+ status = self.find_first_child_named(updates_node, 'status')
+ if status is not None:
+ updates[status.tagName] = self.extract_text(status)
return dict(body=updates)
@@ -131,7 +139,7 @@ class HostController(object):
return {'hosts': _list_hosts(req)}
@wsgi.serializers(xml=HostUpdateTemplate)
- @wsgi.deserializers(xml=HostDeserializer)
+ @wsgi.deserializers(xml=HostUpdateDeserializer)
@check_host
def update(self, req, id, body):
authorize(req.environ['nova.context'])
diff --git a/nova/tests/api/openstack/compute/contrib/test_hosts.py b/nova/tests/api/openstack/compute/contrib/test_hosts.py
index 8313cb00e..f56170a06 100644
--- a/nova/tests/api/openstack/compute/contrib/test_hosts.py
+++ b/nova/tests/api/openstack/compute/contrib/test_hosts.py
@@ -272,7 +272,7 @@ class HostTestCase(test.TestCase):
class HostSerializerTest(test.TestCase):
def setUp(self):
super(HostSerializerTest, self).setUp()
- self.deserializer = os_hosts.HostDeserializer()
+ self.deserializer = os_hosts.HostUpdateDeserializer()
def test_index_serializer(self):
serializer = os_hosts.HostIndexTemplate()
@@ -336,9 +336,12 @@ class HostSerializerTest(test.TestCase):
self.assertEqual(value, tree.get(key))
def test_update_deserializer(self):
- exemplar = dict(status='enabled', foo='bar')
- intext = ("<?xml version='1.0' encoding='UTF-8'?>\n"
- '<updates><status>enabled</status><foo>bar</foo></updates>')
+ exemplar = dict(status='enabled', maintenance_mode='disable')
+ intext = """<?xml version='1.0' encoding='UTF-8'?>
+ <updates>
+ <status>enabled</status>
+ <maintenance_mode>disable</maintenance_mode>
+ </updates>"""
result = self.deserializer.deserialize(intext)
self.assertEqual(dict(body=exemplar), result)