summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/capabilities.py6
-rw-r--r--tests/checkprops.py18
-rw-r--r--tests/clitest.py2
-rw-r--r--tests/clonetest.py10
-rw-r--r--tests/interface.py21
-rw-r--r--tests/nodedev.py15
-rw-r--r--tests/osdict.py2
-rw-r--r--tests/storage.py6
-rwxr-xr-xtests/test_inject.py2
-rw-r--r--tests/test_urls.py2
-rw-r--r--tests/utils.py158
-rw-r--r--tests/virtconvtest.py2
-rw-r--r--tests/xmlconfig.py43
-rw-r--r--tests/xmlparse.py93
14 files changed, 218 insertions, 162 deletions
diff --git a/tests/capabilities.py b/tests/capabilities.py
index f7135816..70a7575f 100644
--- a/tests/capabilities.py
+++ b/tests/capabilities.py
@@ -24,12 +24,10 @@ from virtinst import Capabilities
from virtinst import DomainCapabilities
-conn = utils.open_testdefault()
-
-
class TestCapabilities(unittest.TestCase):
def _buildCaps(self, filename):
path = os.path.join("tests/capabilities-xml", filename)
+ conn = utils.URIs.open_testdefault_cached()
return Capabilities(conn, open(path).read())
def testCapsCPUFeaturesOldSyntax(self):
@@ -122,7 +120,7 @@ class TestCapabilities(unittest.TestCase):
def testDomainCapabilities(self):
xml = open("tests/capabilities-xml/test-domcaps.xml").read()
- caps = DomainCapabilities(utils.open_testdriver(), xml)
+ caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
self.assertEqual(caps.os.loader.supported, True)
self.assertEqual(caps.os.loader.get_values(),
diff --git a/tests/checkprops.py b/tests/checkprops.py
index 25a26dc0..c713dd5f 100644
--- a/tests/checkprops.py
+++ b/tests/checkprops.py
@@ -1,4 +1,5 @@
+import logging
import traceback
import unittest
@@ -12,15 +13,28 @@ class CheckPropsTest(unittest.TestCase):
# pylint: disable=protected-access
# Access to protected member, needed to unittest stuff
+ skip = False
+ try:
+ # Accessing an internal detail of unittest, but it's only
+ # to prevent incorrect output in the case that other tests
+ # failed or were skipped, which can give a false postive here
+ result = self._outcome.result
+ skip = bool(result.errors or result.failures or result.skipped)
+ except Exception:
+ logging.debug("unittest skip hack failed", exc_info=True)
+ if skip:
+ self.skipTest("skipping as other tests failed/skipped")
+
# If a certain environment variable is set, XMLBuilder tracks
# every property registered and every one of those that is
# actually altered. The test suite sets that env variable.
#
- # test000ClearProps resets the 'set' list, and this test
+ # testClearProps resets the 'set' list, and this test
# ensures that every property we know about has been touched
# by one of the above tests.
fail = [p for p in virtinst.xmlbuilder._allprops
if p not in virtinst.xmlbuilder._seenprops]
+ msg = None
try:
self.assertEqual([], fail)
except AssertionError:
@@ -30,4 +44,6 @@ class CheckPropsTest(unittest.TestCase):
"by a previous test suite failure, or if you added\n"
"a new property and didn't extend the test suite.\n"
"Look into extending clitest.py and/or xmlparse.py.")
+
+ if msg:
self.fail(msg)
diff --git a/tests/clitest.py b/tests/clitest.py
index 1cb9b1fd..8802bc8f 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -227,7 +227,7 @@ class Command(object):
conn = None
for idx in reversed(range(len(self.argv))):
if self.argv[idx] == "--connect":
- conn = utils.openconn(self.argv[idx + 1])
+ conn = utils.URIs.openconn(self.argv[idx + 1])
break
if not conn:
diff --git a/tests/clonetest.py b/tests/clonetest.py
index 2f0f0556..31e38227 100644
--- a/tests/clonetest.py
+++ b/tests/clonetest.py
@@ -61,7 +61,7 @@ class TestClone(unittest.TestCase):
in_content = utils.read_file(infile)
if not conn:
- conn = utils.open_testdriver()
+ conn = utils.URIs.open_testdriver_cached()
cloneobj = Cloner(conn)
cloneobj.original_xml = in_content
for force in force_list or []:
@@ -113,12 +113,12 @@ class TestClone(unittest.TestCase):
connection to ensure we don't get any errors"""
outfile = os.path.join(clonexml_dir, filebase + "-out.xml")
outxml = utils.read_file(outfile)
- conn = utils.open_testdriver()
+ conn = utils.URIs.open_testdriver_cached()
utils.test_create(conn, outxml)
def testRemoteNoStorage(self):
"""Test remote clone where VM has no storage that needs cloning"""
- conn = utils.open_test_remote()
+ conn = utils.URIs.open_test_remote()
self._clone("nostorage", conn=conn)
self._clone("noclone-storage", conn=conn)
@@ -127,7 +127,7 @@ class TestClone(unittest.TestCase):
Test remote clone with storage needing cloning. Should fail,
since libvirt has no storage clone api.
"""
- conn = utils.open_test_remote()
+ conn = utils.URIs.open_test_remote()
disks = ["%s/1.img" % POOL1, "%s/2.img" % POOL1]
try:
self._clone("general-cfg", disks=disks, conn=conn)
@@ -143,7 +143,7 @@ class TestClone(unittest.TestCase):
self._clone("managed-storage", disks=disks)
def testCloneStorageCrossPool(self):
- conn = utils.open_test_remote()
+ conn = utils.URIs.open_test_remote()
clone_disks_file = os.path.join(
clonexml_dir, "cross-pool-disks-out.xml")
disks = ["%s/new1.img" % POOL2, "%s/new2.img" % POOL1]
diff --git a/tests/interface.py b/tests/interface.py
index bd5b7bb3..1e731656 100644
--- a/tests/interface.py
+++ b/tests/interface.py
@@ -22,18 +22,18 @@ import logging
from virtinst import Interface, InterfaceProtocol
from tests import utils
-conn = utils.open_testdriver()
datadir = "tests/interface-xml"
-def _m(_n):
- xml = conn.interfaceLookupByName(_n).XMLDesc(0)
- return Interface(conn, parsexml=xml)
class TestInterfaces(unittest.TestCase):
+ @property
+ def conn(self):
+ return utils.URIs.open_testdriver_cached()
+
def build_interface(self, interface_type, name):
- iobj = Interface(conn)
+ iobj = Interface(self.conn)
iobj.type = interface_type
iobj.name = name
@@ -43,11 +43,14 @@ class TestInterfaces(unittest.TestCase):
iface_obj.mtu = 1501
iface_obj.macaddr = "AA:AA:AA:AA:AA:AA"
iface_obj.start_mode = Interface.INTERFACE_START_MODE_ONBOOT
- proto = InterfaceProtocol(conn)
+ proto = InterfaceProtocol(self.conn)
proto.family = InterfaceProtocol.INTERFACE_PROTOCOL_FAMILY_IPV4
iface_obj.add_protocol(proto)
def add_child_interfaces(self, iface_obj):
+ def _m(_n):
+ xml = self.conn.interfaceLookupByName(_n).XMLDesc(0)
+ return Interface(self.conn, parsexml=xml)
if iface_obj.type == Interface.INTERFACE_TYPE_BRIDGE:
iface_obj.add_interface(_m("vlaneth1"))
iface_obj.add_interface(_m("bond-brbond"))
@@ -93,7 +96,7 @@ class TestInterfaces(unittest.TestCase):
self.add_child_interfaces(obj)
# IPv4 proto
- iface_proto1 = InterfaceProtocol(conn)
+ iface_proto1 = InterfaceProtocol(self.conn)
iface_proto1.family = InterfaceProtocol.INTERFACE_PROTOCOL_FAMILY_IPV4
iface_proto1.add_ip("129.63.1.2")
iface_proto1.add_ip("255.255.255.0")
@@ -102,7 +105,7 @@ class TestInterfaces(unittest.TestCase):
iface_proto1.dhcp_peerdns = True
# IPv6 proto
- iface_proto2 = InterfaceProtocol(conn)
+ iface_proto2 = InterfaceProtocol(self.conn)
iface_proto2.family = InterfaceProtocol.INTERFACE_PROTOCOL_FAMILY_IPV6
iface_proto2.add_ip("fe99::215:58ff:fe6e:5", prefix="32")
@@ -204,7 +207,7 @@ class TestInterfaces(unittest.TestCase):
protoxml = (" <protocol family='ipv6'>\n"
" <dhcp/>\n"
" </protocol>\n")
- proto = InterfaceProtocol(conn, parsexml=protoxml)
+ proto = InterfaceProtocol(self.conn, parsexml=protoxml)
obj.add_protocol(proto)
self.define_xml(obj)
diff --git a/tests/nodedev.py b/tests/nodedev.py
index cf661598..ae662dd2 100644
--- a/tests/nodedev.py
+++ b/tests/nodedev.py
@@ -25,8 +25,6 @@ from virtinst import VirtualHostDevice
from tests import utils
-conn = utils.open_testdriver()
-
unknown_xml = """
<device>
<name>foodevice</name>
@@ -61,11 +59,14 @@ funky_chars_xml = """
class TestNodeDev(unittest.TestCase):
+ @property
+ def conn(self):
+ return utils.URIs.open_testdriver_cached()
def _nodeDevFromName(self, devname):
- node = conn.nodeDeviceLookupByName(devname)
+ node = self.conn.nodeDeviceLookupByName(devname)
xml = node.XMLDesc(0)
- return NodeDevice.parse(conn, xml)
+ return NodeDevice.parse(self.conn, xml)
def _testCompare(self, devname, vals, devxml=None):
def _compare(dev, vals, root=""):
@@ -82,7 +83,7 @@ class TestNodeDev(unittest.TestCase):
self.assertEqual(vals[attr], getattr(dev, attr))
if devxml:
- dev = NodeDevice.parse(conn, devxml)
+ dev = NodeDevice.parse(self.conn, devxml)
else:
dev = self._nodeDevFromName(devname)
@@ -94,7 +95,7 @@ class TestNodeDev(unittest.TestCase):
if not nodedev:
nodedev = self._nodeDevFromName(nodename)
- dev = VirtualHostDevice(conn)
+ dev = VirtualHostDevice(self.conn)
dev.set_from_nodedev(nodedev)
utils.diff_compare(dev.get_xml_config() + "\n", devfile)
@@ -248,7 +249,7 @@ class TestNodeDev(unittest.TestCase):
"device_type": NodeDevice.CAPABILITY_TYPE_DRM,
"drm_type": "render"}
dev = self._testCompare(devname, vals)
- self.assertEqual(dev.drm_pretty_name(conn),
+ self.assertEqual(dev.drm_pretty_name(self.conn),
"0000:00:02:0 Intel Corporation HD Graphics 530 (render)")
def testUnknownDevice(self):
diff --git a/tests/osdict.py b/tests/osdict.py
index 6fa63ea7..7a04a552 100644
--- a/tests/osdict.py
+++ b/tests/osdict.py
@@ -47,7 +47,7 @@ class TestOSDB(unittest.TestCase):
(osobj.name, osobj.get_typename()))
def test_recommended_resources(self):
- conn = utils.open_testdefault()
+ conn = utils.URIs.open_testdefault_cached()
guest = conn.caps.lookup_virtinst_guest()
assert not OSDB.lookup_os("generic").get_recommended_resources(guest)
diff --git a/tests/storage.py b/tests/storage.py
index 821459c3..2bac6bc0 100644
--- a/tests/storage.py
+++ b/tests/storage.py
@@ -105,9 +105,9 @@ def createVol(conn, poolobj, volname=None, input_vol=None, clone_vol=None):
class TestStorage(unittest.TestCase):
-
- def setUp(self):
- self.conn = utils.open_testdefault()
+ @property
+ def conn(self):
+ return utils.URIs.open_testdefault_cached()
def testDirPool(self):
poolobj = createPool(self.conn,
diff --git a/tests/test_inject.py b/tests/test_inject.py
index dd68a35e..44a595f8 100755
--- a/tests/test_inject.py
+++ b/tests/test_inject.py
@@ -16,7 +16,7 @@ from virtinst.initrdinject import perform_initrd_injections
cleanup = []
_alldistros = {}
-testconn = utils.open_testdefault()
+testconn = utils.URIs.open_testdefault_cached()
guest = Guest(testconn)
guest.os.os_type = "hvm"
guest.os.arch = "x86_64"
diff --git a/tests/test_urls.py b/tests/test_urls.py
index 878fb0ad..6a066560 100644
--- a/tests/test_urls.py
+++ b/tests/test_urls.py
@@ -100,7 +100,7 @@ class _DistroURL(object):
return "x86_64"
return "x86_64"
-testconn = utils.open_testdefault()
+testconn = utils.URIs.open_testdefault_cached()
hvmguest = Guest(testconn)
hvmguest.os.os_type = "hvm"
xenguest = Guest(testconn)
diff --git a/tests/utils.py b/tests/utils.py
index 8211306a..b8050a77 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -17,6 +17,10 @@
import difflib
import os
+import sys
+import unittest
+
+import libvirt
import virtinst
import virtinst.cli
@@ -75,75 +79,99 @@ def _make_uri(base, connver=None, libver=None):
return base
-_conn_cache = {}
-
-
-def openconn(uri):
- """
- Extra super caching to speed up the test suite. We basically
- cache the first guest/pool/vol poll attempt for each URI, and save it
- across multiple reopenings of that connection. We aren't caching
- libvirt objects, just parsed XML objects. This works fine since
- generally every test uses a fresh virConnect, or undoes the
- persistent changes it makes.
- """
- virtinst.util.register_libvirt_error_handler()
- conn = virtinst.cli.getConnection(uri)
- uri = conn._open_uri
+class _URIs(object):
+ def __init__(self):
+ self._conn_cache = {}
+ self._testdriver_cache = None
+ self._testdriver_error = None
+ self._testdriver_default = None
+
+ def openconn(self, uri):
+ """
+ Extra super caching to speed up the test suite. We basically
+ cache the first guest/pool/vol poll attempt for each URI, and save it
+ across multiple reopenings of that connection. We aren't caching
+ libvirt objects, just parsed XML objects. This works fine since
+ generally every test uses a fresh virConnect, or undoes the
+ persistent changes it makes.
+ """
+ virtinst.util.register_libvirt_error_handler()
+ is_testdriver_xml = "/testdriver.xml" in uri
+
+ if not (is_testdriver_xml and self._testdriver_error):
+ try:
+ conn = virtinst.cli.getConnection(uri)
+ except libvirt.libvirtError as e:
+ if not is_testdriver_xml:
+ raise
+ self._testdriver_error = (
+ "error opening testdriver.xml: %s\n"
+ "libvirt is probably too old" % str(e))
+ print(self._testdriver_error, file=sys.stderr)
+
+ if is_testdriver_xml and self._testdriver_error:
+ raise unittest.SkipTest(self._testdriver_error)
+
+ uri = conn._open_uri
+
+ # For the basic test:///default URI, skip this caching, so we have
+ # an option to test the stock code
+ if uri == uri_test_default:
+ return conn
+
+ if uri not in self._conn_cache:
+ conn.fetch_all_guests()
+ conn.fetch_all_pools()
+ conn.fetch_all_vols()
+ conn.fetch_all_nodedevs()
+
+ self._conn_cache[uri] = {}
+ for key, value in conn._fetch_cache.items():
+ self._conn_cache[uri][key] = value[:]
+
+ # Prime the internal connection cache
+ for key, value in self._conn_cache[uri].items():
+ conn._fetch_cache[key] = value[:]
+
+ def cb_cache_new_pool(poolobj):
+ # Used by clonetest.py nvram-newpool test
+ if poolobj.name() == "nvram-newpool":
+ from virtinst import StorageVolume
+ vol = StorageVolume(conn)
+ vol.pool = poolobj
+ vol.name = "clone-orig-vars.fd"
+ vol.capacity = 1024 * 1024
+ vol.install()
+ conn._cache_new_pool_raw(poolobj)
+
+ conn.cb_cache_new_pool = cb_cache_new_pool
- # For the basic test:///default URI, skip this caching, so we have
- # an option to test the stock code
- if uri == uri_test_default:
return conn
- if uri not in _conn_cache:
- conn.fetch_all_guests()
- conn.fetch_all_pools()
- conn.fetch_all_vols()
- conn.fetch_all_nodedevs()
-
- _conn_cache[uri] = {}
- for key, value in conn._fetch_cache.items():
- _conn_cache[uri][key] = value[:]
-
- # Prime the internal connection cache
- for key, value in _conn_cache[uri].items():
- conn._fetch_cache[key] = value[:]
-
- def cb_cache_new_pool(poolobj):
- # Used by clonetest.py nvram-newpool test
- if poolobj.name() == "nvram-newpool":
- from virtinst import StorageVolume
- vol = StorageVolume(conn)
- vol.pool = poolobj
- vol.name = "clone-orig-vars.fd"
- vol.capacity = 1024 * 1024
- vol.install()
- conn._cache_new_pool_raw(poolobj)
-
- conn.cb_cache_new_pool = cb_cache_new_pool
-
- return conn
-
-
-def open_testdefault():
- return openconn(uri_test_default)
-
-
-def open_testdriver():
- return openconn(uri_test)
-
-
-def open_kvm(connver=None, libver=None):
- return openconn(_make_uri(uri_kvm, connver, libver))
-
-
-def open_kvm_rhel(connver=None):
- return openconn(_make_uri(uri_kvm_rhel, connver))
-
+ def open_testdriver_cached(self):
+ """
+ Open plain testdriver.xml and cache the instance. Tests that
+ use this are expected to clean up after themselves so driver
+ state doesn't become polluted.
+ """
+ if not self._testdriver_cache:
+ self._testdriver_cache = self.openconn(uri_test)
+ return self._testdriver_cache
+
+ def open_testdefault_cached(self):
+ if not self._testdriver_default:
+ self._testdriver_default = self.openconn(uri_test_default)
+ return self._testdriver_default
+
+ def open_kvm(self, connver=None, libver=None):
+ return self.openconn(_make_uri(uri_kvm, connver, libver))
+ def open_kvm_rhel(self, connver=None):
+ return self.openconn(_make_uri(uri_kvm_rhel, connver))
+ def open_test_remote(self):
+ return self.openconn(uri_test_remote)
+
+URIs = _URIs()
-def open_test_remote():
- return openconn(uri_test_remote)
def test_create(testconn, xml, define_func="defineXML"):
diff --git a/tests/virtconvtest.py b/tests/virtconvtest.py
index 095b5944..31d78bc7 100644
--- a/tests/virtconvtest.py
+++ b/tests/virtconvtest.py
@@ -34,7 +34,7 @@ class TestVirtConv(unittest.TestCase):
def print_cb(msg):
print(msg, file=outbuf)
- conn = utils.open_kvm()
+ conn = utils.URIs.open_kvm()
converter = VirtConverter(conn, in_path, print_cb=print_cb)
if converter.parser.name != in_type:
diff --git a/tests/xmlconfig.py b/tests/xmlconfig.py
index f37d861c..1781d813 100644
--- a/tests/xmlconfig.py
+++ b/tests/xmlconfig.py
@@ -25,16 +25,12 @@ from virtcli import CLIConfig
from tests import utils
-_default_conn = utils.open_testdefault()
-_feature_conn = utils.open_testdriver()
-
-
def _make_guest(installer=None, conn=None, os_variant=None):
if not conn:
if installer:
conn = installer.conn
else:
- conn = _feature_conn
+ conn = utils.URIs.open_testdriver_cached()
if not installer:
installer = _make_installer(conn=conn)
@@ -102,7 +98,7 @@ def _make_guest(installer=None, conn=None, os_variant=None):
def _make_installer(location=None, conn=None):
- conn = conn or _feature_conn
+ conn = conn or utils.URIs.open_testdriver_cached()
inst = virtinst.DistroInstaller(conn)
if location:
inst.location = location
@@ -118,6 +114,10 @@ class TestXMLMisc(unittest.TestCase):
testing any particularly tricky bits, general XML generation should
be through virt-install examples in clitest
"""
+ @property
+ def conn(self):
+ return utils.URIs.open_testdefault_cached()
+
def _compare(self, guest, filebase, do_install):
filename = os.path.join("tests/xmlconfig-xml", filebase + ".xml")
@@ -139,16 +139,16 @@ class TestXMLMisc(unittest.TestCase):
return "bzz0"
setattr(deviceinterface, "_default_bridge", newbridge)
- dev1 = virtinst.VirtualNetworkInterface(_default_conn)
+ dev1 = virtinst.VirtualNetworkInterface(self.conn)
dev1.macaddr = "22:22:33:44:55:66"
- dev2 = virtinst.VirtualNetworkInterface(_default_conn,
+ dev2 = virtinst.VirtualNetworkInterface(self.conn,
parsexml=dev1.get_xml_config())
dev2.source = None
dev2.source = "foobr0"
dev2.macaddr = "22:22:33:44:55:67"
- dev3 = virtinst.VirtualNetworkInterface(_default_conn,
+ dev3 = virtinst.VirtualNetworkInterface(self.conn,
parsexml=dev1.get_xml_config())
dev3.source = None
dev3.macaddr = "22:22:33:44:55:68"
@@ -172,7 +172,7 @@ class TestXMLMisc(unittest.TestCase):
def testCpustrToTuple(self):
# Various testing our cpustr handling
- conn = _default_conn
+ conn = self.conn
base = [False] * 16
expect = base[:]
@@ -213,7 +213,7 @@ class TestXMLMisc(unittest.TestCase):
self.assertEqual(VirtualDisk.target_to_num("xvdaaa"),
26 * 26 * 1 + 26 * 1 + 0)
- disk = virtinst.VirtualDisk(_default_conn)
+ disk = virtinst.VirtualDisk(self.conn)
disk.bus = "ide"
self.assertEqual("hda", disk.generate_target([]))
@@ -243,27 +243,27 @@ class TestXMLMisc(unittest.TestCase):
def testCPUTopology(self):
# Test CPU topology determining
- cpu = virtinst.CPU(_default_conn)
+ cpu = virtinst.CPU(self.conn)
cpu.sockets = "2"
cpu.set_topology_defaults(6)
self.assertEqual([cpu.sockets, cpu.cores, cpu.threads], [2, 3, 1])
- cpu = virtinst.CPU(_default_conn)
+ cpu = virtinst.CPU(self.conn)
cpu.cores = "4"
cpu.set_topology_defaults(9)
self.assertEqual([cpu.sockets, cpu.cores, cpu.threads], [2, 4, 1])
- cpu = virtinst.CPU(_default_conn)
+ cpu = virtinst.CPU(self.conn)
cpu.threads = "3"
cpu.set_topology_defaults(14)
self.assertEqual([cpu.sockets, cpu.cores, cpu.threads], [4, 1, 3])
- cpu = virtinst.CPU(_default_conn)
+ cpu = virtinst.CPU(self.conn)
cpu.sockets = 5
cpu.cores = 2
self.assertEqual(cpu.vcpus_from_topology(), 10)
- cpu = virtinst.CPU(_default_conn)
+ cpu = virtinst.CPU(self.conn)
self.assertEqual(cpu.vcpus_from_topology(), 1)
def testAC97(self):
@@ -275,9 +275,10 @@ class TestXMLMisc(unittest.TestCase):
xml, ignore = g.start_install(return_xml=True, dry=True)
return "ac97" in xml
- self.assertTrue(has_ac97(utils.open_kvm(connver=11000)))
- self.assertFalse(has_ac97(utils.open_kvm(libver=5000)))
- self.assertFalse(has_ac97(utils.open_kvm(libver=7000, connver=7000)))
+ self.assertTrue(has_ac97(utils.URIs.open_kvm(connver=11000)))
+ self.assertFalse(has_ac97(utils.URIs.open_kvm(libver=5000)))
+ self.assertFalse(has_ac97(
+ utils.URIs.open_kvm(libver=7000, connver=7000)))
def testOSDeviceDefaultChange(self):
"""
@@ -285,7 +286,7 @@ class TestXMLMisc(unittest.TestCase):
distro/variant mid process
"""
# Use connver=12005 so that non-rhel displays ac97
- conn = utils.open_kvm_rhel(connver=12005)
+ conn = utils.URIs.open_kvm_rhel(connver=12005)
g = _make_guest(conn=conn, os_variant="fedora11")
self._compare(g, "install-f11-norheldefaults", False)
@@ -307,7 +308,7 @@ class TestXMLMisc(unittest.TestCase):
def test_hyperv_clock(self):
def _make(connver):
- conn = utils.open_kvm(libver=1002002, connver=connver)
+ conn = utils.URIs.open_kvm(libver=1002002, connver=connver)
g = _make_guest(conn=conn, os_variant="win7")
g.emulator = "/usr/libexec/qemu-kvm"
return g
diff --git a/tests/xmlparse.py b/tests/xmlparse.py
index 7c2c6ca2..9b56adae 100644
--- a/tests/xmlparse.py
+++ b/tests/xmlparse.py
@@ -23,9 +23,6 @@ import virtinst
from tests import utils
-conn = utils.open_testdefault()
-kvmconn = utils.open_kvm()
-
def sanitize_file_xml(xml):
# s/"/'/g from generated XML, matches what libxml dumps out
@@ -34,17 +31,29 @@ def sanitize_file_xml(xml):
class XMLParseTest(unittest.TestCase):
+ _kvmconn = None
+
+ @property
+ def conn(self):
+ return utils.URIs.open_testdefault_cached()
+
+ @property
+ def kvmconn(self):
+ if not self._kvmconn:
+ self._kvmconn = utils.URIs.open_kvm()
+ return self._kvmconn
+
def _roundtrip_compare(self, filename):
expectXML = sanitize_file_xml(open(filename).read())
- guest = virtinst.Guest(conn, parsexml=expectXML)
+ guest = virtinst.Guest(self.conn, parsexml=expectXML)
actualXML = guest.get_xml_config()
utils.diff_compare(actualXML, expect_out=expectXML)
def _alter_compare(self, actualXML, outfile, support_check=None):
utils.diff_compare(actualXML, outfile)
- if (support_check and not conn.check_support(support_check)):
+ if (support_check and not self.conn.check_support(support_check)):
return
- utils.test_create(conn, actualXML)
+ utils.test_create(self.conn, actualXML)
def testRoundTrip(self):
"""
@@ -87,7 +96,7 @@ class XMLParseTest(unittest.TestCase):
def _get_test_content(self, basename, kvm=False):
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- guest = virtinst.Guest(kvm and kvmconn or conn,
+ guest = virtinst.Guest(kvm and self.kvmconn or self.conn,
parsexml=open(infile).read())
return guest, outfile
@@ -223,7 +232,7 @@ class XMLParseTest(unittest.TestCase):
check("locked", False, True)
self._alter_compare(guest.get_xml_config(), outfile,
- support_check=conn.SUPPORT_CONN_VMPORT)
+ support_check=self.conn.SUPPORT_CONN_VMPORT)
def testSeclabel(self):
guest, outfile = self._get_test_content("change-seclabel")
@@ -421,7 +430,7 @@ class XMLParseTest(unittest.TestCase):
def testSingleDisk(self):
xml = ("""<disk type="file" device="disk"><source file="/a.img"/>\n"""
"""<target dev="hda" bus="ide"/></disk>\n""")
- d = virtinst.VirtualDisk(conn, parsexml=xml)
+ d = virtinst.VirtualDisk(self.conn, parsexml=xml)
self._set_and_check(d, "target", "hda", "hdb")
self.assertEqual(xml.replace("hda", "hdb"), d.get_xml_config())
@@ -683,7 +692,7 @@ class XMLParseTest(unittest.TestCase):
def testAlterHostdevs(self):
infile = "tests/xmlparse-xml/change-hostdevs-in.xml"
outfile = "tests/xmlparse-xml/change-hostdevs-out.xml"
- guest = virtinst.Guest(conn,
+ guest = virtinst.Guest(self.conn,
parsexml=open(infile).read())
dev1 = guest.get_devices("hostdev")[0]
@@ -798,7 +807,7 @@ class XMLParseTest(unittest.TestCase):
def testAlterSounds(self):
infile = "tests/xmlparse-xml/change-sounds-in.xml"
outfile = "tests/xmlparse-xml/change-sounds-out.xml"
- guest = virtinst.Guest(conn,
+ guest = virtinst.Guest(self.conn,
parsexml=open(infile).read())
dev1 = guest.get_devices("sound")[0]
@@ -964,7 +973,7 @@ class XMLParseTest(unittest.TestCase):
basename = "change-xmlns-qemu"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- guest = virtinst.Guest(kvmconn, parsexml=open(infile).read())
+ guest = virtinst.Guest(self.kvmconn, parsexml=open(infile).read())
check = self._make_checker(guest.xmlns_qemu.args[0])
check("value", "-somearg", "-somenewarg")
@@ -990,10 +999,10 @@ class XMLParseTest(unittest.TestCase):
guest.remove_device(rmdev)
# Basic device add
- guest.add_device(virtinst.VirtualWatchdog(conn))
+ guest.add_device(virtinst.VirtualWatchdog(self.conn))
# Test adding device with child properties (address value)
- adddev = virtinst.VirtualNetworkInterface(conn=conn)
+ adddev = virtinst.VirtualNetworkInterface(self.conn)
adddev.type = "network"
adddev.source = "default"
adddev.macaddr = "1A:2A:3A:4A:5A:6A"
@@ -1005,7 +1014,7 @@ class XMLParseTest(unittest.TestCase):
guest.add_device(adddev)
# Test adding device built from parsed XML
- guest.add_device(virtinst.VirtualAudio(conn,
+ guest.add_device(virtinst.VirtualAudio(self.conn,
parsexml="""<sound model='pcspk'/>"""))
self._alter_compare(guest.get_xml_config(), outfile)
@@ -1045,7 +1054,7 @@ class XMLParseTest(unittest.TestCase):
basename = "change-snapshot"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- snap = virtinst.DomainSnapshot(conn, parsexml=open(infile).read())
+ snap = virtinst.DomainSnapshot(self.conn, parsexml=open(infile).read())
check = self._make_checker(snap)
check("name", "offline-root-child1", "name-foo")
@@ -1070,7 +1079,7 @@ class XMLParseTest(unittest.TestCase):
basename = "test-bridge-ip"
infile = "tests/interface-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/interface-%s-out.xml" % basename
- iface = virtinst.Interface(conn, parsexml=open(infile).read())
+ iface = virtinst.Interface(self.conn, parsexml=open(infile).read())
self.assertEqual(len(iface.protocols), 2)
self.assertEqual(len(iface.interfaces), 3)
@@ -1104,13 +1113,13 @@ class XMLParseTest(unittest.TestCase):
self.assertEqual(len(child_iface.interfaces), 2)
utils.diff_compare(iface.get_xml_config(), outfile)
- utils.test_create(conn, iface.get_xml_config(), "interfaceDefineXML")
+ utils.test_create(self.conn, iface.get_xml_config(), "interfaceDefineXML")
def testInterfaceBondArp(self):
basename = "test-bond-arp"
infile = "tests/interface-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/interface-%s-out.xml" % basename
- iface = virtinst.Interface(conn, parsexml=open(infile).read())
+ iface = virtinst.Interface(self.conn, parsexml=open(infile).read())
check = self._make_checker(iface)
check("start_mode", "onboot", "hotplug")
@@ -1123,13 +1132,13 @@ class XMLParseTest(unittest.TestCase):
check("arp_validate_mode", "backup", "active")
utils.diff_compare(iface.get_xml_config(), outfile)
- utils.test_create(conn, iface.get_xml_config(), "interfaceDefineXML")
+ utils.test_create(self.conn, iface.get_xml_config(), "interfaceDefineXML")
def testInterfaceBondMii(self):
basename = "test-bond-mii"
infile = "tests/interface-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/interface-%s-out.xml" % basename
- iface = virtinst.Interface(conn, parsexml=open(infile).read())
+ iface = virtinst.Interface(self.conn, parsexml=open(infile).read())
check = self._make_checker(iface)
check("mii_frequency", 123, 111)
@@ -1138,20 +1147,20 @@ class XMLParseTest(unittest.TestCase):
check("mii_carrier_mode", "netif", "ioctl")
utils.diff_compare(iface.get_xml_config(), outfile)
- utils.test_create(conn, iface.get_xml_config(), "interfaceDefineXML")
+ utils.test_create(self.conn, iface.get_xml_config(), "interfaceDefineXML")
def testInterfaceVLAN(self):
basename = "test-vlan"
infile = "tests/interface-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/interface-%s-out.xml" % basename
- iface = virtinst.Interface(conn, parsexml=open(infile).read())
+ iface = virtinst.Interface(self.conn, parsexml=open(infile).read())
check = self._make_checker(iface)
check("tag", 123, 456)
check("parent_interface", "eth2", "foonew")
utils.diff_compare(iface.get_xml_config(), outfile)
- utils.test_create(conn, iface.get_xml_config(), "interfaceDefineXML")
+ utils.test_create(self.conn, iface.get_xml_config(), "interfaceDefineXML")
#################
@@ -1162,7 +1171,7 @@ class XMLParseTest(unittest.TestCase):
basename = "pool-fs"
infile = "tests/xmlparse-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- pool = virtinst.StoragePool(conn, parsexml=open(infile).read())
+ pool = virtinst.StoragePool(self.conn, parsexml=open(infile).read())
check = self._make_checker(pool)
check("type", "fs", "dir")
@@ -1179,13 +1188,13 @@ class XMLParseTest(unittest.TestCase):
check("source_name", None, "fooname")
utils.diff_compare(pool.get_xml_config(), outfile)
- utils.test_create(conn, pool.get_xml_config(), "storagePoolDefineXML")
+ utils.test_create(self.conn, pool.get_xml_config(), "storagePoolDefineXML")
def testISCSIPool(self):
basename = "pool-iscsi"
infile = "tests/storage-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- pool = virtinst.StoragePool(conn, parsexml=open(infile).read())
+ pool = virtinst.StoragePool(self.conn, parsexml=open(infile).read())
check = self._make_checker(pool)
check("iqn", "foo.bar.baz.iqn", "my.iqn")
@@ -1193,17 +1202,17 @@ class XMLParseTest(unittest.TestCase):
check("name", "some.random.hostname", "my.host")
utils.diff_compare(pool.get_xml_config(), outfile)
- utils.test_create(conn, pool.get_xml_config(), "storagePoolDefineXML")
+ utils.test_create(self.conn, pool.get_xml_config(), "storagePoolDefineXML")
def testGlusterPool(self):
- if not conn.check_support(conn.SUPPORT_CONN_POOL_GLUSTERFS):
+ if not self.conn.check_support(self.conn.SUPPORT_CONN_POOL_GLUSTERFS):
raise unittest.SkipTest("Gluster pools not supported with this "
"libvirt version.")
basename = "pool-gluster"
infile = "tests/storage-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- pool = virtinst.StoragePool(conn, parsexml=open(infile).read())
+ pool = virtinst.StoragePool(self.conn, parsexml=open(infile).read())
check = self._make_checker(pool)
check("source_path", "/some/source/path", "/foo")
@@ -1211,13 +1220,13 @@ class XMLParseTest(unittest.TestCase):
check("name", "some.random.hostname", "my.host")
utils.diff_compare(pool.get_xml_config(), outfile)
- utils.test_create(conn, pool.get_xml_config(), "storagePoolDefineXML")
+ utils.test_create(self.conn, pool.get_xml_config(), "storagePoolDefineXML")
def testRBDPool(self):
basename = "pool-rbd"
infile = "tests/xmlparse-xml/%s.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- pool = virtinst.StoragePool(conn, parsexml=open(infile).read())
+ pool = virtinst.StoragePool(self.conn, parsexml=open(infile).read())
check = self._make_checker(pool.hosts[0])
check("name", "ceph-mon-1.example.com")
@@ -1233,13 +1242,13 @@ class XMLParseTest(unittest.TestCase):
hostobj.port = "5555"
utils.diff_compare(pool.get_xml_config(), outfile)
- utils.test_create(conn, pool.get_xml_config(), "storagePoolDefineXML")
+ utils.test_create(self.conn, pool.get_xml_config(), "storagePoolDefineXML")
def testVol(self):
basename = "pool-dir-vol"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- vol = virtinst.StorageVolume(conn, parsexml=open(infile).read())
+ vol = virtinst.StorageVolume(self.conn, parsexml=open(infile).read())
check = self._make_checker(vol)
check("type", None, "file")
@@ -1268,7 +1277,7 @@ class XMLParseTest(unittest.TestCase):
basename = "network-multi"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- net = virtinst.Network(conn, parsexml=open(infile).read())
+ net = virtinst.Network(self.conn, parsexml=open(infile).read())
check = self._make_checker(net)
check("name", "ipv6_multirange", "new-foo")
@@ -1330,13 +1339,13 @@ class XMLParseTest(unittest.TestCase):
check("netmask", None, "foo", None)
utils.diff_compare(net.get_xml_config(), outfile)
- utils.test_create(conn, net.get_xml_config(), "networkDefineXML")
+ utils.test_create(self.conn, net.get_xml_config(), "networkDefineXML")
def testNetOpen(self):
basename = "network-open"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- net = virtinst.Network(conn, parsexml=open(infile).read())
+ net = virtinst.Network(self.conn, parsexml=open(infile).read())
check = self._make_checker(net)
check("name", "open", "new-foo")
@@ -1356,13 +1365,13 @@ class XMLParseTest(unittest.TestCase):
check("end", "192.168.100.254", "192.168.101.254")
utils.diff_compare(net.get_xml_config(), outfile)
- utils.test_create(conn, net.get_xml_config(), "networkDefineXML")
+ utils.test_create(self.conn, net.get_xml_config(), "networkDefineXML")
def testNetVfPool(self):
basename = "network-vf-pool"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- net = virtinst.Network(conn, parsexml=open(infile).read())
+ net = virtinst.Network(self.conn, parsexml=open(infile).read())
check = self._make_checker(net)
check("name", "passthrough", "new-foo")
@@ -1382,7 +1391,7 @@ class XMLParseTest(unittest.TestCase):
check("function", 0x0)
utils.diff_compare(net.get_xml_config(), outfile)
- utils.test_create(conn, net.get_xml_config(), "networkDefineXML")
+ utils.test_create(self.conn, net.get_xml_config(), "networkDefineXML")
##############
@@ -1394,7 +1403,7 @@ class XMLParseTest(unittest.TestCase):
basename = "clear-cpu-unknown-vals"
infile = "tests/xmlparse-xml/%s-in.xml" % basename
outfile = "tests/xmlparse-xml/%s-out.xml" % basename
- guest = virtinst.Guest(kvmconn, parsexml=open(infile).read())
+ guest = virtinst.Guest(self.kvmconn, parsexml=open(infile).read())
guest.cpu.copy_host_cpu()
guest.cpu.clear()
@@ -1404,7 +1413,7 @@ class XMLParseTest(unittest.TestCase):
# Make sure our XML engine doesn't mangle non-libvirt XML bits
infile = "tests/xmlparse-xml/domain-roundtrip.xml"
outfile = "tests/xmlparse-xml/domain-roundtrip.xml"
- guest = virtinst.Guest(conn, parsexml=open(infile).read())
+ guest = virtinst.Guest(self.conn, parsexml=open(infile).read())
utils.diff_compare(guest.get_xml_config(), outfile)