tests: make XMLMatches work with Python3

The XMLMatcher currently assumes that it always gets XML in
a string type in UTF-8 encoding. In python3, depending on
how the input XML was created it might be string or bytes.
To deal with this difference, if we see the input is a
string type, then we decode it into bytes and use BytesIO
with a forced encoding.

This enables the tests to pass on both py2 & py3

Blueprint: nova-python3-newton
Change-Id: Iad84520dab65cb4a2e0060e64b5bfdd56381ed7b
This commit is contained in:
Daniel P. Berrange 2016-04-01 15:13:08 +01:00
parent 5b0773f53a
commit e421ea449d
2 changed files with 9 additions and 41 deletions

View File

@ -396,10 +396,17 @@ class XMLMatches(object):
SKIP_TAGS = (etree.Comment, etree.ProcessingInstruction)
@staticmethod
def _parse(text_or_bytes):
if isinstance(text_or_bytes, six.text_type):
text_or_bytes = text_or_bytes.encode("utf-8")
parser = etree.XMLParser(encoding="UTF-8")
return etree.parse(six.BytesIO(text_or_bytes), parser)
def __init__(self, expected, allow_mixed_nodes=False,
skip_empty_text_nodes=True, skip_values=('DONTCARE',)):
self.expected_xml = expected
self.expected = etree.parse(six.StringIO(expected))
self.expected = self._parse(expected)
self.allow_mixed_nodes = allow_mixed_nodes
self.skip_empty_text_nodes = skip_empty_text_nodes
self.skip_values = set(skip_values)
@ -408,7 +415,7 @@ class XMLMatches(object):
return 'XMLMatches(%r)' % self.expected_xml
def match(self, actual_xml):
actual = etree.parse(six.StringIO(actual_xml))
actual = self._parse(actual_xml)
state = XMLMatchState(self.expected_xml, actual_xml)
expected_doc_info = self._get_xml_docinfo(self.expected)

View File

@ -95,7 +95,6 @@ nova.tests.unit.test_configdrive2.ConfigDriveTestCase
nova.tests.unit.test_hacking.HackingTestCase
nova.tests.unit.test_ipv6.IPv6AccountIdentiferTestCase
nova.tests.unit.test_matchers.TestDictMatches
nova.tests.unit.test_matchers.TestXMLMatches
nova.tests.unit.test_metadata.MetadataHandlerTestCase
nova.tests.unit.test_metadata.MetadataPasswordTestCase
nova.tests.unit.test_metadata.MetadataTestCase
@ -110,44 +109,6 @@ nova.tests.unit.virt.ironic.test_driver.IronicDriverTestCase
nova.tests.unit.virt.ironic.test_patcher.IronicDriverFieldsTestCase
nova.tests.unit.virt.libvirt.storage.test_lvm.LvmTestCase
nova.tests.unit.virt.libvirt.storage.test_rbd.RbdTestCase
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigCPUFeatureTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigCPUTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigCapsTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestCPUFeatureTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestCPUNUMATest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestCPUTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestCPUTuneTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestChannelTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestClockTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestConsoleTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestControllerTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestDiskTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestFeatureTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestFilesysTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestGraphicsTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestHostdev
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestHostdevPCI
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestIDMap
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestInputTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestInterfaceTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestMemoryBackingTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestMemoryTuneTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestMetadataNovaTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestNUMATuneTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestRngTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestSMBIOSTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestSeclabel
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestSerialTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestSnapshotDiskTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestSnapshotTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestSysinfoTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestTimerTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestVideoTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigGuestWatchdogTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigMemoryBalloonTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigSecretTest
nova.tests.unit.virt.libvirt.test_config.LibvirtConfigTest
nova.tests.unit.virt.libvirt.test_driver.LibvirtConnTestCase
nova.tests.unit.virt.libvirt.test_driver.LibvirtDriverTestCase
nova.tests.unit.virt.libvirt.test_driver.LibvirtVolumeSnapshotTestCase