diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml index 941f9e488..49e9dcc7f 100644 --- a/tests/data/cli/compare/virt-install-many-devices.xml +++ b/tests/data/cli/compare/virt-install-many-devices.xml @@ -365,6 +365,11 @@
+ + + + + diff --git a/tests/test_cli.py b/tests/test_cli.py index feccb3aa3..51dff97d4 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -629,6 +629,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser --network user,model=virtio,address.type=spapr-vio,address.reg=0x500,link.state=no --network vhostuser,source_type=unix,source_path=/tmp/vhost1.sock,source_mode=server,model=virtio,source.type=unix,source.path=/tmp/vhost1.sock,address.type=pci,address.bus=0x00,address.slot=0x10,address.function=0x0,address.domain=0x0000 --network user,address.type=ccw,address.cssid=0xfe,address.ssid=0,address.devno=01,boot.order=15,boot.loadparm=SYSTEM1 +--network model=vmxnet3 --graphics sdl --graphics spice,keymap=none diff --git a/tests/test_misc.py b/tests/test_misc.py new file mode 100644 index 000000000..f908c74ad --- /dev/null +++ b/tests/test_misc.py @@ -0,0 +1,126 @@ +# Copyright (C) 2013, 2014 Red Hat, Inc. +# +# This work is licensed under the GNU GPLv2 or later. +# See the COPYING file in the top-level directory. + +import virtinst + +from tests import utils + + +# Misc tests for various virtinst special behavior. These should only aim for +# testing any particularly tricky bits, general XML generation should +# be through virt-install examples in test_cli + + +def test_misc_cpu_topology(): + """ + Various topology calculation corner cases + """ + conn = utils.URIs.open_testdefault_cached() + cpu = virtinst.DomainCpu(conn) + cpu.set_topology_defaults(6) + assert cpu.topology.sockets is None + + cpu.topology.sockets = "2" + cpu.set_topology_defaults(6) + def get_top(_c): + return [_c.topology.sockets, _c.topology.cores, _c.topology.threads] + assert get_top(cpu) == [2, 3, 1] + + cpu = virtinst.DomainCpu(conn) + cpu.topology.cores = "4" + cpu.set_topology_defaults(9) + assert get_top(cpu) == [2, 4, 1] + + cpu = virtinst.DomainCpu(conn) + cpu.topology.threads = "3" + cpu.set_topology_defaults(14) + assert get_top(cpu) == [4, 1, 3] + + cpu = virtinst.DomainCpu(conn) + cpu.topology.sockets = 5 + cpu.topology.cores = 2 + assert cpu.vcpus_from_topology() == 10 + + cpu = virtinst.DomainCpu(conn) + assert cpu.vcpus_from_topology() == 1 + + +def test_misc_guest_osinfo_metadata(): + """ + Test that reading an unknown OS ID from guest XML will not blow up + """ + # pylint: disable=protected-access + g = virtinst.Guest(utils.URIs.open_testdefault_cached()) + g._metadata.libosinfo.os_id = "http://fedoraproject.org/fedora/20" + assert g.osinfo.name == "fedora20" + + g = virtinst.Guest(utils.URIs.open_testdefault_cached()) + g._metadata.libosinfo.os_id = "http://example.com/idontexit" + assert g.osinfo.name == "generic" + + +def test_misc_nonpredicatble_generate(): + """ + Bypass our testsuite 'predicatable' handling to test actual random output + """ + from virtinst import cli + predconn = utils.URIs.open_testdefault_cached() + kvm_uri = utils.URIs.kvm.replace(",predictable", "") + kvmconn = cli.getConnection(kvm_uri) + testconn = cli.getConnection("test:///default") + + testuuid = virtinst.Guest.generate_uuid(predconn) + randomuuid = virtinst.Guest.generate_uuid(testconn) + assert randomuuid != testuuid + assert len(randomuuid) == len(testuuid) + + testmac = virtinst.DeviceInterface.generate_mac(predconn) + randommac = virtinst.DeviceInterface.generate_mac(testconn) + qemumac = virtinst.DeviceInterface.generate_mac(kvmconn) + assert randommac != testmac + assert qemumac != testmac + assert len(randommac) == len(testmac) + + # Ensure check_mac_in_use doesn't error on None + virtinst.DeviceInterface.check_mac_in_use(predconn, None) + + +def test_misc_support_cornercases(): + """ + Test support.py corner cases + """ + conn = utils.URIs.open_testdefault_cached() + try: + conn.lookupByName("foobar-idontexist") + except Exception as e: + if not conn.support.is_libvirt_error_no_domain(e): + raise + + +def test_misc_osxml_cornercases(): + """ + Test OSXML corner cases + """ + conn = utils.URIs.open_testdefault_cached() + guest = virtinst.Guest(conn) + guest.os.set_initargs_string("foo bar") + guest.os.set_initargs_string("baz wibble") + assert [i.val for i in guest.os.initargs] == ["baz", "wibble"] + + +def test_misc_cpu_cornercases(): + """ + Hit the validation paths for default HOST_MODEL_ONLY + """ + kvmconn = utils.URIs.open_kvm() + guest = virtinst.Guest(kvmconn) + guest.x86_cpu_default = guest.cpu.SPECIAL_MODE_HOST_MODEL_ONLY + guest.set_defaults(guest) + assert guest.cpu.model == "Opteron_G4" + + # pylint: disable=protected-access + guest.cpu.model = "idontexist" + guest.cpu._validate_default_host_model_only(guest) + assert guest.cpu.model is None diff --git a/tests/test_xmlconfig.py b/tests/test_xmlconfig.py deleted file mode 100644 index 56afd1d52..000000000 --- a/tests/test_xmlconfig.py +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright (C) 2013, 2014 Red Hat, Inc. -# -# This work is licensed under the GNU GPLv2 or later. -# See the COPYING file in the top-level directory. - -import os -import unittest - -import virtinst - -from tests import utils - - -def _make_guest(conn=None, os_variant=None): - if not conn: - conn = utils.URIs.open_testdriver_cached() - - g = virtinst.Guest(conn) - g.name = "TestGuest" - g.currentMemory = int(200 * 1024) - g.memory = int(400 * 1024) - - if os_variant: - g.set_os_name(os_variant) - - # File disk - d = virtinst.DeviceDisk(conn) - d.path = "/dev/default-pool/new-test-suite.img" - if d.wants_storage_creation(): - parent_pool = d.get_parent_pool() - vol_install = virtinst.DeviceDisk.build_vol_install(conn, - os.path.basename(d.path), parent_pool, .0000001, True) - d.set_vol_install(vol_install) - d.validate() - g.add_device(d) - - # Block disk - d = virtinst.DeviceDisk(conn) - d.path = "/dev/disk-pool/diskvol1" - d.validate() - g.add_device(d) - - # Network device - dev = virtinst.DeviceInterface(conn) - g.add_device(dev) - - return g - - -class TestXMLMisc(unittest.TestCase): - """ - Misc tests for various XML special behavior. These should only aim for - testing any particularly tricky bits, general XML generation should - be through virt-install examples in test_cli - """ - @property - def conn(self): - return utils.URIs.open_testdefault_cached() - - def testCPUTopology(self): - # Test CPU topology determining - cpu = virtinst.DomainCpu(self.conn) - cpu.set_topology_defaults(6) - assert cpu.topology.sockets is None - - cpu.topology.sockets = "2" - cpu.set_topology_defaults(6) - def get_top(_c): - return [_c.topology.sockets, _c.topology.cores, _c.topology.threads] - assert get_top(cpu) == [2, 3, 1] - - cpu = virtinst.DomainCpu(self.conn) - cpu.topology.cores = "4" - cpu.set_topology_defaults(9) - assert get_top(cpu) == [2, 4, 1] - - cpu = virtinst.DomainCpu(self.conn) - cpu.topology.threads = "3" - cpu.set_topology_defaults(14) - assert get_top(cpu) == [4, 1, 3] - - cpu = virtinst.DomainCpu(self.conn) - cpu.topology.sockets = 5 - cpu.topology.cores = 2 - assert cpu.vcpus_from_topology() == 10 - - cpu = virtinst.DomainCpu(self.conn) - assert cpu.vcpus_from_topology() == 1 - - def test_set_defaults_double(self): - """ - Check that a common config has idempotent set_defaults - """ - g = _make_guest(conn=utils.URIs.open_kvm(), os_variant="fedora-unknown") - - g.set_defaults(None) - xml1 = g.get_xml() - g.set_defaults(None) - xml2 = g.get_xml() - assert xml1 == xml2 - - def test_guest_osinfo_metadata(self): - """ - Test that reading an unknown OS ID from guest XML will not blow up - """ - # pylint: disable=protected-access - g = virtinst.Guest(utils.URIs.open_testdefault_cached()) - g._metadata.libosinfo.os_id = "http://fedoraproject.org/fedora/20" - assert g.osinfo.name == "fedora20" - - g = virtinst.Guest(utils.URIs.open_testdefault_cached()) - g._metadata.libosinfo.os_id = "http://example.com/idontexit" - assert g.osinfo.name == "generic" - - def test_nonpredicatble_generate(self): - from virtinst import cli - kvm_uri = utils.URIs.kvm.replace(",predictable", "") - kvmconn = cli.getConnection(kvm_uri) - testconn = cli.getConnection("test:///default") - - testuuid = virtinst.Guest.generate_uuid(self.conn) - randomuuid = virtinst.Guest.generate_uuid(testconn) - assert randomuuid != testuuid - assert len(randomuuid) == len(testuuid) - - testmac = virtinst.DeviceInterface.generate_mac(self.conn) - randommac = virtinst.DeviceInterface.generate_mac(testconn) - qemumac = virtinst.DeviceInterface.generate_mac(kvmconn) - assert randommac != testmac - assert qemumac != testmac - assert len(randommac) == len(testmac) - - # Ensure check_mac_in_use doesn't error on None - virtinst.DeviceInterface.check_mac_in_use(self.conn, None) - - def test_support_misc(self): - try: - self.conn.lookupByName("foobar-idontexist") - except Exception as e: - if not self.conn.support.is_libvirt_error_no_domain(e): - raise diff --git a/tests/test_xmlparse.py b/tests/test_xmlparse.py index 0d817035a..aabc50f58 100644 --- a/tests/test_xmlparse.py +++ b/tests/test_xmlparse.py @@ -287,7 +287,8 @@ class XMLParseTest(unittest.TestCase): self._alter_compare(guest.get_xml(), outfile) # Hits a codepath when domcaps don't provide the needed info - guest = virtinst.Guest(self.conn, xml) + emptyconn = utils.URIs.open_testdefault_cached() + guest = virtinst.Guest(emptyconn, xml) guest.cpu.check_security_features(guest) assert guest.cpu.secure is False @@ -1138,23 +1139,3 @@ class XMLParseTest(unittest.TestCase): # Little test for DeviceAddress.pretty_desc assert devs[-1].address.pretty_desc() == "0:0:0:3" - - def testCPUHostModelOnly(self): - """ - Hit the validation paths for default HOST_MODEL_ONLY - """ - guest = virtinst.Guest(self.kvmconn) - guest.x86_cpu_default = guest.cpu.SPECIAL_MODE_HOST_MODEL_ONLY - guest.set_defaults(guest) - assert guest.cpu.model == "Opteron_G4" - - # pylint: disable=protected-access - guest.cpu.model = "idontexist" - guest.cpu._validate_default_host_model_only(guest) - assert guest.cpu.model is None - - def testOSXMLInitargsRemove(self): - guest = virtinst.Guest(self.conn) - guest.os.set_initargs_string("foo bar") - guest.os.set_initargs_string("baz wibble") - assert [i.val for i in guest.os.initargs] == ["baz", "wibble"]