diff --git a/dracclient/tests/test_wsman.py b/dracclient/tests/test_wsman.py index 6cdd90c..09f7701 100644 --- a/dracclient/tests/test_wsman.py +++ b/dracclient/tests/test_wsman.py @@ -276,3 +276,41 @@ class PayloadTestCase(base.BaseTest): self.assertEqual(lxml.etree.tostring(expected_payload_obj), lxml.etree.tostring(payload_obj)) + + @mock.patch.object(uuid, 'uuid4', autospec=True) + def test_build_invoke_with_list_in_properties(self, mock_uuid): + expected_payload = """ + + + http://host:443/wsman + http://resource_uri + uuid:1234-12 + + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + http://resource_uri/method + + foo + + + + + foo + bar + baz + + + +""" # noqa + expected_payload_obj = lxml.objectify.fromstring(expected_payload) + + mock_uuid.return_value = '1234-12' + payload = dracclient.wsman._InvokePayload( + 'http://host:443/wsman', 'http://resource_uri', 'method', + {'selector': 'foo'}, {'property': ['foo', 'bar', 'baz']}).build() + payload_obj = lxml.objectify.fromstring(payload) + + self.assertEqual(lxml.etree.tostring(expected_payload_obj), + lxml.etree.tostring(payload_obj)) diff --git a/dracclient/wsman.py b/dracclient/wsman.py index fb70444..737df72 100644 --- a/dracclient/wsman.py +++ b/dracclient/wsman.py @@ -366,9 +366,13 @@ class _InvokePayload(_Payload): 'method': self.method})) for (name, value) in self.properties.items(): - property_elem = ElementTree.SubElement( - method_elem, - ('{%(resource_uri)s}%(name)s' % - {'resource_uri': self.resource_uri, - 'name': name})) - property_elem.text = value + if not isinstance(value, list): + value = [value] + + for item in value: + property_elem = ElementTree.SubElement( + method_elem, + ('{%(resource_uri)s}%(name)s' % + {'resource_uri': self.resource_uri, + 'name': name})) + property_elem.text = item