2013-03-17 17:06:52 -04:00
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA.
import unittest
import os
import logging
import libvirt
import urlgrabber . progress as progress
import virtinst
from virtinst import VirtualDisk
from virtinst import VirtualAudio
from virtinst import VirtualNetworkInterface
from virtinst import VirtualHostDeviceUSB , VirtualHostDevicePCI
from virtinst import VirtualCharDevice
from virtinst import VirtualVideoDevice
from virtinst import VirtualController
from virtinst import VirtualWatchdog
from virtinst import VirtualInputDevice
from virtinst import VirtualMemballoon
2013-04-11 16:32:00 -04:00
2013-04-10 19:48:07 -04:00
from tests import utils
2013-03-17 17:06:52 -04:00
2013-04-11 16:32:00 -04:00
# pylint: disable=W0212
# Access to protected member, needed to unittest stuff
2013-03-17 17:06:52 -04:00
_testconn = utils . open_testdriver ( )
_kvmconn = utils . open_testkvmdriver ( )
_plainkvm = utils . open_plainkvm ( )
_plainxen = utils . open_plainxen ( )
2013-04-13 14:34:52 -04:00
2013-03-17 17:06:52 -04:00
def qemu_uri ( ) :
return " qemu:///system "
2013-04-13 14:34:52 -04:00
2013-03-17 17:06:52 -04:00
def xen_uri ( ) :
return " xen:/// "
2013-04-13 14:34:52 -04:00
2013-03-17 17:06:52 -04:00
def build_xmlfile ( filebase ) :
if not filebase :
return None
return os . path . join ( " tests/xmlconfig-xml " , filebase + " .xml " )
2013-04-13 14:34:52 -04:00
2013-03-17 17:06:52 -04:00
class TestXMLConfig ( unittest . TestCase ) :
def setUp ( self ) :
utils . reset_conn ( )
logging . debug ( " Running %s " , self . id ( ) )
def tearDown ( self ) :
if os . path . exists ( utils . scratch ) :
os . rmdir ( utils . scratch )
def _compare ( self , guest , filebase , do_install , do_disk_boot = False ,
do_create = True ) :
filename = filebase and build_xmlfile ( filebase ) or None
guest . _prepare_install ( progress . BaseMeter ( ) )
try :
2013-04-11 10:44:27 -04:00
actualXML = guest . get_xml_config ( install = do_install ,
2013-03-17 17:06:52 -04:00
disk_boot = do_disk_boot )
if filename :
utils . diff_compare ( actualXML , filename )
if do_create :
utils . test_create ( guest . conn , actualXML )
finally :
guest . _cleanup_install ( )
def _testInstall ( self , guest ,
instxml = None , bootxml = None , contxml = None ) :
instname = build_xmlfile ( instxml )
bootname = build_xmlfile ( bootxml )
contname = build_xmlfile ( contxml )
consolecb = None
meter = None
removeOld = None
wait = True
dom = None
try :
dom = guest . start_install ( consolecb , meter , removeOld , wait )
dom . destroy ( )
# Replace kernel/initrd with known info
if ( guest . installer . _install_bootconfig and
guest . installer . _install_bootconfig . kernel ) :
guest . installer . _install_bootconfig . kernel = " kernel "
guest . installer . _install_bootconfig . initrd = " initrd "
2013-04-11 10:44:27 -04:00
xmlinst = guest . get_xml_config ( True , False )
xmlboot = guest . get_xml_config ( False , False )
xmlcont = guest . get_xml_config ( True , True )
2013-03-17 17:06:52 -04:00
if instname :
utils . diff_compare ( xmlinst , instname )
if contname :
utils . diff_compare ( xmlcont , contname )
if bootname :
utils . diff_compare ( xmlboot , bootname )
if guest . get_continue_inst ( ) :
guest . continue_install ( consolecb , meter , wait )
finally :
if dom :
try :
dom . destroy ( )
except :
pass
try :
dom . undefine ( )
except :
pass
def testBootParavirtDiskFile ( self ) :
g = utils . get_basic_paravirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( " /tmp/somerandomfilename.img " ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-disk-file " , False )
def testBootParavirtDiskFileBlktapCapable ( self ) :
2013-04-11 10:27:02 -04:00
oldblktap = virtinst . util . is_blktap_capable
2013-03-17 17:06:52 -04:00
try :
2013-04-11 10:27:02 -04:00
virtinst . util . is_blktap_capable = lambda : True
2013-03-17 17:06:52 -04:00
g = utils . get_basic_paravirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-disk-drv-tap " , False )
finally :
2013-04-11 10:27:02 -04:00
virtinst . util . is_blktap_capable = oldblktap
2013-03-17 17:06:52 -04:00
def testBootParavirtDiskBlock ( self ) :
g = utils . get_basic_paravirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_blkdisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-disk-block " , False )
def testBootParavirtDiskDrvPhy ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_blkdisk ( )
disk . driver_name = VirtualDisk . DRIVER_PHY
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-disk-drv-phy " , False )
def testBootParavirtDiskDrvFile ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( )
disk . driver_name = VirtualDisk . DRIVER_FILE
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-disk-drv-file " , False )
def testBootParavirtDiskDrvTap ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( )
disk . driver_name = VirtualDisk . DRIVER_TAP
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-disk-drv-tap " , False )
def testBootParavirtDiskDrvTapQCow ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( )
disk . driver_name = VirtualDisk . DRIVER_TAP
disk . driver_type = VirtualDisk . DRIVER_TAP_QCOW
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-disk-drv-tap-qcow " , False )
def testBootParavirtManyDisks ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( " /tmp/test2.img " )
disk . driver_name = VirtualDisk . DRIVER_TAP
disk . driver_type = VirtualDisk . DRIVER_TAP_QCOW
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( " /tmp/test1.img " ) )
g . add_device ( disk )
g . add_device ( utils . get_blkdisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-paravirt-many-disks " , False )
def testBootFullyvirtDiskFile ( self ) :
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-fullyvirt-disk-file " , False )
def testBootFullyvirtDiskBlock ( self ) :
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_blkdisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-fullyvirt-disk-block " , False )
def testInstallParavirtDiskFile ( self ) :
g = utils . get_basic_paravirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-disk-file " , True )
def testInstallParavirtDiskBlock ( self ) :
g = utils . get_basic_paravirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_blkdisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-disk-block " , True )
def testInstallParavirtDiskDrvPhy ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_blkdisk ( )
disk . driver_name = VirtualDisk . DRIVER_PHY
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-disk-drv-phy " , True )
def testInstallParavirtDiskDrvFile ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( )
disk . driver_name = VirtualDisk . DRIVER_FILE
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-disk-drv-file " , True )
def testInstallParavirtDiskDrvTap ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( )
disk . driver_name = VirtualDisk . DRIVER_TAP
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-disk-drv-tap " , True )
def testInstallParavirtDiskDrvTapQCow ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( )
disk . driver_name = VirtualDisk . DRIVER_TAP
disk . driver_type = VirtualDisk . DRIVER_TAP_QCOW
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-disk-drv-tap-qcow " , True )
def testInstallParavirtManyDisks ( self ) :
g = utils . get_basic_paravirt_guest ( )
disk = utils . get_filedisk ( " /tmp/test2.img " )
disk . driver_name = VirtualDisk . DRIVER_TAP
disk . driver_type = VirtualDisk . DRIVER_TAP_QCOW
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( " /tmp/test1.img " ) )
g . add_device ( disk )
g . add_device ( utils . get_blkdisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-many-disks " , True )
def testInstallFullyvirtDiskFile ( self ) :
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-fullyvirt-disk-file " , True )
def testInstallFullyvirtDiskBlock ( self ) :
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_blkdisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-fullyvirt-disk-block " , True )
def testInstallFVPXE ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-fullyvirt-pxe " , True )
def testBootFVPXE ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-fullyvirt-pxe " , False )
def testBootFVPXEAlways ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
g . installer . bootconfig . bootorder = [
g . installer . bootconfig . BOOT_DEVICE_NETWORK ]
g . installer . bootconfig . enable_bootmenu = True
self . _compare ( g , " boot-fullyvirt-pxe-always " , False )
def testInstallFVPXENoDisks ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
self . _compare ( g , " install-fullyvirt-pxe-nodisks " , True )
def testBootFVPXENoDisks ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
self . _compare ( g , " boot-fullyvirt-pxe-nodisks " , False )
def testInstallFVLiveCD ( self ) :
i = utils . make_live_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
self . _compare ( g , " install-fullyvirt-livecd " , False )
def testDoubleInstall ( self ) :
# Make sure that installing twice generates the same XML, to ensure
# we aren't polluting the device list during the install process
i = utils . make_live_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
self . _compare ( g , " install-fullyvirt-livecd " , False )
self . _compare ( g , " install-fullyvirt-livecd " , False )
def testDefaultDeviceRemoval ( self ) :
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
inp = VirtualInputDevice ( g . conn )
cons = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_CONSOLE ,
VirtualCharDevice . CHAR_PTY )
g . add_device ( inp )
g . add_device ( cons )
g . remove_device ( inp )
g . remove_device ( cons )
self . _compare ( g , " boot-default-device-removal " , False )
def testOSDeviceDefaultChange ( self ) :
"""
Make sure device defaults are properly changed if we change OS
distro / variant mid process
"""
utils . set_conn ( _plainkvm )
i = utils . make_distro_installer ( gtype = " kvm " )
g = utils . get_basic_fullyvirt_guest ( " kvm " , installer = i )
do_install = False
g . installer . cdrom = True
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_floppy ( ) )
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
2013-04-11 10:44:27 -04:00
# Call get_xml_config sets first round of defaults w/o os_variant set
2013-03-17 17:06:52 -04:00
g . get_xml_config ( do_install )
g . os_variant = " fedora11 "
self . _compare ( g , " install-f11 " , do_install )
def testInstallFVImport ( self ) :
i = utils . make_import_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-fullyvirt-import " , False )
def testInstallFVImportKernel ( self ) :
i = utils . make_import_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
g . installer . bootconfig . kernel = " kernel "
g . installer . bootconfig . initrd = " initrd "
g . installer . bootconfig . kernel_args = " my kernel args "
self . _compare ( g , " install-fullyvirt-import-kernel " , False )
def testInstallFVImportMulti ( self ) :
i = utils . make_import_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
g . installer . bootconfig . enable_bootmenu = False
g . installer . bootconfig . bootorder = [ " hd " , " fd " , " cdrom " , " network " ]
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-fullyvirt-import-multiboot " , False )
def testInstallPVImport ( self ) :
i = utils . make_import_installer ( " xen " )
g = utils . get_basic_paravirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-paravirt-import " , False )
def testQEMUDriverName ( self ) :
utils . set_conn ( _plainkvm )
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_blkdisk ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " misc-qemu-driver-name " , True )
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( " /iscsi-pool/diskvol1 " ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " misc-qemu-driver-type " , True )
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( " /default-pool/iso-vol " ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " misc-qemu-iso-disk " , True )
g = utils . get_basic_fullyvirt_guest ( )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( " /default-pool/iso-vol " ) )
g . get_devices ( " disk " ) [ 0 ] . driver_type = " qcow2 "
2013-03-17 17:06:52 -04:00
self . _compare ( g , " misc-qemu-driver-overwrite " , True )
def testXMLEscaping ( self ) :
g = utils . get_basic_fullyvirt_guest ( )
g . description = " foooo barrrr \n baz && snarf. ' ' \" \" @@$ \n "
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( " /tmp/ISO& ' &s " ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " misc-xml-escaping " , True )
# OS Type/Version configurations
def testF10 ( self ) :
utils . set_conn ( _plainkvm )
i = utils . make_pxe_installer ( gtype = " kvm " )
g = utils . get_basic_fullyvirt_guest ( " kvm " , installer = i )
g . os_type = " linux "
g . os_variant = " fedora10 "
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-f10 " , True )
def testF11 ( self ) :
utils . set_conn ( _plainkvm )
i = utils . make_distro_installer ( gtype = " kvm " )
g = utils . get_basic_fullyvirt_guest ( " kvm " , installer = i )
g . os_type = " linux "
g . os_variant = " fedora11 "
g . installer . cdrom = True
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_floppy ( ) )
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-f11 " , False )
def testF11AC97 ( self ) :
def build_guest ( ) :
i = utils . make_distro_installer ( gtype = " kvm " )
g = utils . get_basic_fullyvirt_guest ( " kvm " , installer = i )
g . os_type = " linux "
g . os_variant = " fedora11 "
g . installer . cdrom = True
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_floppy ( ) )
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
g . add_device ( VirtualAudio ( ) )
return g
utils . set_conn ( utils . open_plainkvm ( connver = 11000 ) )
g = build_guest ( )
self . _compare ( g , " install-f11-ac97 " , False )
oldver = libvirt . getVersion
try :
utils . set_conn ( utils . open_plainkvm ( libver = 5000 ) )
g = build_guest ( )
self . _compare ( g , " install-f11-noac97 " , False )
finally :
libvirt . getVersion = oldver
utils . set_conn ( utils . open_plainkvm ( connver = 10000 ) )
g = build_guest ( )
self . _compare ( g , " install-f11-noac97 " , False )
def testKVMKeymap ( self ) :
conn = utils . open_plainkvm ( connver = 10000 )
g = virtinst . VirtualGraphics ( conn = conn , type = " vnc " )
2013-04-13 14:34:52 -04:00
self . assertTrue ( g . keymap is not None )
2013-03-17 17:06:52 -04:00
conn = utils . open_plainkvm ( connver = 11000 )
g = virtinst . VirtualGraphics ( conn = conn , type = " vnc " )
2013-04-13 14:34:52 -04:00
self . assertTrue ( g . keymap is None )
2013-03-17 17:06:52 -04:00
def testF11Qemu ( self ) :
utils . set_conn ( _plainkvm )
i = utils . make_distro_installer ( gtype = " qemu " )
g = utils . get_basic_fullyvirt_guest ( " qemu " , installer = i )
g . os_type = " linux "
g . os_variant = " fedora11 "
g . installer . cdrom = True
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_floppy ( ) )
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-f11-qemu " , False )
def testF11Xen ( self ) :
utils . set_conn ( _plainxen )
i = utils . make_distro_installer ( gtype = " xen " )
g = utils . get_basic_fullyvirt_guest ( " xen " , installer = i )
g . os_type = " linux "
g . os_variant = " fedora11 "
g . installer . cdrom = True
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_floppy ( ) )
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " install-f11-xen " , False )
def testInstallWindowsKVM ( self ) :
utils . set_conn ( _plainkvm )
g = utils . build_win_kvm ( " /default-pool/winxp.img " )
self . _compare ( g , " winxp-kvm-stage1 " , True )
def testContinueWindowsKVM ( self ) :
utils . set_conn ( _plainkvm )
g = utils . build_win_kvm ( " /default-pool/winxp.img " )
self . _compare ( g , " winxp-kvm-stage2 " , True , True )
def testBootWindowsKVM ( self ) :
utils . set_conn ( _plainkvm )
g = utils . build_win_kvm ( " /default-pool/winxp.img " )
self . _compare ( g , " winxp-kvm-stage3 " , False )
def testInstallWindowsXenNew ( self ) :
def make_guest ( ) :
g = utils . get_basic_fullyvirt_guest ( " xen " )
g . os_type = " windows "
g . os_variant = " winxp "
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
g . add_device ( VirtualAudio ( ) )
return g
utils . set_conn ( utils . open_plainxen ( connver = 3000001 ) )
g = make_guest ( )
self . _compare ( g , " install-windowsxp-xenold " , True )
utils . set_conn ( utils . open_plainxen ( connver = 3100000 ) )
g = make_guest ( )
self . _compare ( g , " install-windowsxp-xennew " , True )
# Device heavy configurations
def testManyDisks2 ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_filedisk ( ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( VirtualDisk ( conn = g . conn , path = " /dev/loop0 " ,
2013-03-17 17:06:52 -04:00
device = VirtualDisk . DEVICE_CDROM ,
driverType = " raw " ) )
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualDisk ( conn = g . conn , path = " /dev/loop0 " ,
2013-03-17 17:06:52 -04:00
device = VirtualDisk . DEVICE_DISK ,
driverName = " qemu " , format = " qcow2 " ) )
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualDisk ( conn = g . conn , path = None ,
2013-03-17 17:06:52 -04:00
device = VirtualDisk . DEVICE_CDROM ,
bus = " scsi " ) )
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualDisk ( conn = g . conn , path = None ,
2013-03-17 17:06:52 -04:00
device = VirtualDisk . DEVICE_FLOPPY ) )
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualDisk ( conn = g . conn , path = " /dev/loop0 " ,
2013-03-17 17:06:52 -04:00
device = VirtualDisk . DEVICE_FLOPPY ,
driverName = " phy " , driverCache = " none " ) )
disk = VirtualDisk ( conn = g . conn , path = " /dev/loop0 " ,
bus = " virtio " , driverName = " qemu " ,
driverType = " qcow2 " , driverCache = " none " )
disk . driver_io = " threads "
2013-04-12 09:39:34 -04:00
g . add_device ( disk )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-many-disks2 " , False )
def testManyNICs ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
net1 = VirtualNetworkInterface ( type = " user " ,
macaddr = " 22:11:11:11:11:11 " )
net2 = utils . get_virtual_network ( )
net3 = utils . get_virtual_network ( )
net3 . model = " e1000 "
net4 = VirtualNetworkInterface ( bridge = " foobr0 " ,
macaddr = " 22:22:22:22:22:22 " )
net4 . target_dev = " foo1 "
net5 = VirtualNetworkInterface ( type = " ethernet " ,
macaddr = " 00:11:00:22:00:33 " )
net5 . source_dev = " testeth1 "
2013-04-12 09:39:34 -04:00
g . add_device ( net1 )
g . add_device ( net2 )
g . add_device ( net3 )
g . add_device ( net4 )
g . add_device ( net5 )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-many-nics " , False )
def testManyHostdevs ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
dev1 = VirtualHostDeviceUSB ( g . conn )
dev1 . product = " 0x1234 "
dev1 . vendor = " 0x4321 "
dev2 = VirtualHostDevicePCI ( g . conn )
dev2 . bus = " 0x11 "
dev2 . slot = " 0x2 "
dev2 . function = " 0x3 "
2013-04-12 09:39:34 -04:00
g . add_device ( dev1 )
g . add_device ( dev2 )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-many-hostdevs " , False )
def testManySounds ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualAudio ( " sb16 " , conn = g . conn ) )
g . add_device ( VirtualAudio ( " es1370 " , conn = g . conn ) )
g . add_device ( VirtualAudio ( " pcspk " , conn = g . conn ) )
g . add_device ( VirtualAudio ( conn = g . conn ) )
2013-03-17 17:06:52 -04:00
self . _compare ( g , " boot-many-sounds " , False )
def testManyChars ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
dev1 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_SERIAL ,
VirtualCharDevice . CHAR_NULL )
dev2 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_PARALLEL ,
VirtualCharDevice . CHAR_UNIX )
dev2 . source_path = " /tmp/foobar "
dev3 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_SERIAL ,
VirtualCharDevice . CHAR_TCP )
dev3 . protocol = " telnet "
dev3 . source_host = " my.source.host "
dev3 . source_port = " 1234 "
dev4 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_PARALLEL ,
VirtualCharDevice . CHAR_UDP )
dev4 . bind_host = " my.bind.host "
dev4 . bind_port = " 1111 "
dev4 . source_host = " my.source.host "
dev4 . source_port = " 2222 "
dev5 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_CHANNEL ,
VirtualCharDevice . CHAR_PTY )
dev5 . target_type = dev5 . CHAR_CHANNEL_TARGET_VIRTIO
dev5 . target_name = " foo.bar.frob "
dev6 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_CONSOLE ,
VirtualCharDevice . CHAR_PTY )
dev7 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_CONSOLE ,
VirtualCharDevice . CHAR_PTY )
dev7 . target_type = dev5 . CHAR_CONSOLE_TARGET_VIRTIO
dev8 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_CHANNEL ,
VirtualCharDevice . CHAR_PTY )
dev8 . target_type = dev5 . CHAR_CHANNEL_TARGET_GUESTFWD
dev8 . target_address = " 1.2.3.4 "
dev8 . target_port = " 4567 "
g . add_device ( dev1 )
g . add_device ( dev2 )
g . add_device ( dev3 )
g . add_device ( dev4 )
g . add_device ( dev5 )
g . add_device ( dev6 )
g . add_device ( dev7 )
g . add_device ( dev8 )
self . _compare ( g , " boot-many-chars " , False )
def testManyDevices ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
g . description = " foooo barrrr somedesc "
g . hugepage = True
# Hostdevs
dev1 = VirtualHostDeviceUSB ( g . conn )
dev1 . product = " 0x1234 "
dev1 . vendor = " 0x4321 "
2013-04-12 09:39:34 -04:00
g . add_device ( dev1 )
2013-03-17 17:06:52 -04:00
# Sound devices
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualAudio ( " sb16 " , conn = g . conn ) )
g . add_device ( VirtualAudio ( " es1370 " , conn = g . conn ) )
2013-03-17 17:06:52 -04:00
# Disk devices
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualDisk ( conn = g . conn , path = " /dev/loop0 " ,
2013-03-17 17:06:52 -04:00
device = VirtualDisk . DEVICE_FLOPPY ) )
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualDisk ( conn = g . conn , path = " /dev/loop0 " ,
2013-03-17 17:06:52 -04:00
bus = " scsi " ) )
2013-04-12 09:39:34 -04:00
g . add_device ( VirtualDisk ( conn = g . conn , path = " /tmp " , device = " floppy " ) )
2013-03-17 17:06:52 -04:00
d3 = VirtualDisk ( conn = g . conn , path = " /default-pool/testvol1.img " ,
bus = " scsi " , driverName = " qemu " )
d3 . address . type = " spapr-vio "
2013-04-12 09:39:34 -04:00
g . add_device ( d3 )
2013-03-17 17:06:52 -04:00
# Controller devices
c1 = VirtualController . get_class_for_type ( VirtualController . CONTROLLER_TYPE_IDE ) ( g . conn )
c1 . index = " 3 "
c2 = VirtualController . get_class_for_type ( VirtualController . CONTROLLER_TYPE_VIRTIOSERIAL ) ( g . conn )
c2 . ports = " 32 "
c2 . vectors = " 17 "
g . add_device ( c1 )
g . add_device ( c2 )
# Network devices
net1 = utils . get_virtual_network ( )
net1 . model = " e1000 "
net2 = VirtualNetworkInterface ( type = " user " ,
macaddr = " 22:11:11:11:11:11 " )
net3 = VirtualNetworkInterface ( type = virtinst . VirtualNetworkInterface . TYPE_VIRTUAL ,
macaddr = " 22:22:22:22:22:22 " , network = " default " )
net3 . model = " spapr-vlan "
net3 . set_address ( " spapr-vio " )
2013-04-12 09:39:34 -04:00
g . add_device ( net1 )
g . add_device ( net2 )
g . add_device ( net3 )
2013-03-17 17:06:52 -04:00
# Character devices
cdev1 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_SERIAL ,
VirtualCharDevice . CHAR_NULL )
cdev2 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_PARALLEL ,
VirtualCharDevice . CHAR_UNIX )
cdev2 . source_path = " /tmp/foobar "
cdev3 = VirtualCharDevice . get_dev_instance ( g . conn ,
VirtualCharDevice . DEV_CHANNEL ,
VirtualCharDevice . CHAR_SPICEVMC )
g . add_device ( cdev1 )
g . add_device ( cdev2 )
g . add_device ( cdev3 )
# Video Devices
vdev1 = VirtualVideoDevice ( g . conn )
vdev1 . model_type = " vmvga "
vdev2 = VirtualVideoDevice ( g . conn )
vdev2 . model_type = " cirrus "
vdev2 . vram = 10 * 1024
vdev2 . heads = 3
vdev3 = VirtualVideoDevice ( g . conn )
vdev4 = VirtualVideoDevice ( g . conn )
vdev4 . model_type = " qxl "
g . add_device ( vdev1 )
g . add_device ( vdev2 )
g . add_device ( vdev3 )
g . add_device ( vdev4 )
# Watchdog Devices
wdev2 = VirtualWatchdog ( g . conn )
wdev2 . model = " ib700 "
wdev2 . action = " none "
g . add_device ( wdev2 )
# Memballoon Devices
mdev1 = VirtualMemballoon ( g . conn )
mdev1 . model = " virtio "
g . add_device ( mdev1 )
# Check keymap autoconfig
gdev1 = virtinst . VirtualGraphics ( conn = g . conn , type = " vnc " )
2013-04-13 14:34:52 -04:00
self . assertTrue ( gdev1 . keymap is not None )
2013-03-17 17:06:52 -04:00
gdev1 . keymap = " en-us "
# Check keymap None
gdev2 = virtinst . VirtualGraphics ( conn = g . conn , type = " vnc " )
gdev2 . keymap = None
gdev3 = virtinst . VirtualGraphics ( conn = g . conn , type = " sdl " )
gdev4 = virtinst . VirtualGraphics ( conn = g . conn , type = " spice " )
gdev4 . passwdValidTo = " foobar "
gdev5 = virtinst . VirtualGraphics ( conn = g . conn , type = " sdl " )
gdev5 . xauth = " fooxauth "
gdev5 . display = " foodisplay "
g . add_device ( gdev1 )
g . add_device ( gdev2 )
g . add_device ( gdev3 )
g . add_device ( gdev4 )
g . add_device ( gdev5 )
g . clock . offset = " localtime "
g . seclabel . type = g . seclabel . SECLABEL_TYPE_STATIC
g . seclabel . model = " selinux "
g . seclabel . label = " foolabel "
g . seclabel . imagelabel = " imagelabel "
self . _compare ( g , " boot-many-devices " , False )
def testCpuset ( self ) :
normaltest = libvirt . open ( " test:///default " )
utils . set_conn ( normaltest )
g = utils . get_basic_fullyvirt_guest ( )
# Cpuset
cpustr = g . generate_cpuset ( g . conn , g . memory )
g . cpuset = cpustr
g . maxvcpus = 7
g . cpu . model = " footest "
g . cpu . vendor = " Intel "
g . cpu . match = " minimum "
g . cpu . threads = " 2 "
g . cpu . sockets = " 4 "
g . cpu . cores = " 5 "
g . cpu . add_feature ( " x2apic " , " force " )
g . cpu . add_feature ( " lahf_lm " , " forbid " )
self . _compare ( g , " boot-cpuset " , False )
# Test CPU topology determining
cpu = virtinst . CPU ( g . conn )
cpu . sockets = " 2 "
cpu . set_topology_defaults ( 6 )
self . assertEquals ( [ cpu . sockets , cpu . cores , cpu . threads ] , [ 2 , 3 , 1 ] )
cpu = virtinst . CPU ( g . conn )
cpu . cores = " 4 "
cpu . set_topology_defaults ( 9 )
self . assertEquals ( [ cpu . sockets , cpu . cores , cpu . threads ] , [ 2 , 4 , 1 ] )
cpu = virtinst . CPU ( g . conn )
cpu . threads = " 3 "
cpu . set_topology_defaults ( 14 )
self . assertEquals ( [ cpu . sockets , cpu . cores , cpu . threads ] , [ 4 , 1 , 3 ] )
cpu = virtinst . CPU ( g . conn )
cpu . sockets = 5
cpu . cores = 2
self . assertEquals ( cpu . vcpus_from_topology ( ) , 10 )
cpu = virtinst . CPU ( g . conn )
self . assertEquals ( cpu . vcpus_from_topology ( ) , 1 )
def testUsb2 ( self ) :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
g . add_usb_ich9_controllers ( )
self . _compare ( g , " boot-usb2 " , False )
#
# Full Install tests: try to mimic virt-install as much as possible
#
def testFullKVMRHEL6 ( self ) :
utils . set_conn ( _plainkvm )
i = utils . make_distro_installer (
location = " tests/cli-test-xml/fakerhel6tree " ,
gtype = " kvm " )
g = utils . get_basic_fullyvirt_guest ( " kvm " , installer = i )
2013-04-12 09:39:34 -04:00
g . add_device ( utils . get_floppy ( ) )
g . add_device ( utils . get_filedisk ( " /default-pool/rhel6.img " ) )
g . add_device ( utils . get_blkdisk ( ) )
g . add_device ( utils . get_virtual_network ( ) )
2013-03-17 17:06:52 -04:00
g . add_device ( VirtualAudio ( ) )
g . add_device ( VirtualVideoDevice ( g . conn ) )
g . os_autodetect = True
# Do this ugly hack to make sure the test doesn't try and use vol
# upload
origscratch = getattr ( i , " _get_system_scratchdir " )
try :
setattr ( i , " _get_system_scratchdir " ,
lambda : i . scratchdir )
self . _testInstall ( g , " rhel6-kvm-stage1 " , " rhel6-kvm-stage2 " )
finally :
setattr ( i , " _get_system_scratchdir " , origscratch )
def testFullKVMWinxp ( self ) :
utils . set_conn ( _plainkvm )
g = utils . build_win_kvm ( " /default-pool/winxp.img " )
self . _testInstall ( g , " winxp-kvm-stage1 " ,
" winxp-kvm-stage3 " , " winxp-kvm-stage2 " )
def testCreateDisk ( self ) :
"""
Doesn ' t really belong here, but what the hell :)
"""
path = " /tmp/__virtinst_create_test__.img "
sizegigs = .001
sizebytes = long ( sizegigs * 1024 L * 1024 L * 1024 L )
for sparse in [ True , False ] :
disk = VirtualDisk ( conn = utils . get_conn ( ) , path = path , size = sizegigs ,
sparse = sparse )
disk . setup ( )
actualsize = long ( os . path . getsize ( path ) )
os . unlink ( path )
self . assertEquals ( sizebytes , actualsize )
def testDefaultBridge ( self ) :
origfunc = None
util = None
try :
i = utils . make_pxe_installer ( )
g = utils . get_basic_fullyvirt_guest ( installer = i )
2013-04-11 10:27:02 -04:00
util = getattr ( virtinst , " util " )
2013-04-11 11:14:13 -04:00
origfunc = util . default_bridge
2013-03-17 17:06:52 -04:00
def newbridge ( ignore_conn ) :
return [ " bridge " , " br0 " ]
2013-04-11 11:14:13 -04:00
util . default_bridge = newbridge
2013-03-17 17:06:52 -04:00
dev1 = virtinst . VirtualNetworkInterface ( conn = g . conn )
dev1 . macaddr = " 22:22:33:44:55:66 "
g . add_device ( dev1 )
dev2 = virtinst . VirtualNetworkInterface ( conn = g . conn ,
parsexml = dev1 . get_xml_config ( ) )
dev2 . source = None
dev2 . source = " foobr0 "
dev2 . macaddr = " 22:22:33:44:55:67 "
g . add_device ( dev2 )
dev3 = virtinst . VirtualNetworkInterface ( conn = g . conn ,
parsexml = dev1 . get_xml_config ( ) )
dev3 . source = None
dev3 . macaddr = " 22:22:33:44:55:68 "
g . add_device ( dev3 )
self . _compare ( g , " boot-default-bridge " , False , do_create = False )
dev3 . type = dev3 . TYPE_USER
self . _compare ( g , None , False )
finally :
if util and origfunc :
2013-04-11 11:14:13 -04:00
util . default_bridge = origfunc
2013-03-17 17:06:52 -04:00
def testCpustrToTuple ( self ) :
conn = utils . get_conn ( )
base = [ False ] * 16
expect = base [ : ]
expect [ 1 ] = expect [ 2 ] = expect [ 3 ] = True
self . assertEquals ( tuple ( expect ) ,
virtinst . Guest . cpuset_str_to_tuple ( conn , " 1-3 " ) )
expect = base [ : ]
expect [ 1 ] = expect [ 3 ] = expect [ 5 ] = expect [ 10 ] = expect [ 11 ] = True
self . assertEquals ( tuple ( expect ) ,
virtinst . Guest . cpuset_str_to_tuple ( conn , " 1,3,5,10-11 " ) )
self . assertRaises ( ValueError ,
virtinst . Guest . cpuset_str_to_tuple ,
conn , " 16 " )
def testManyVirtio ( self ) :
d = VirtualDisk ( conn = utils . get_conn ( ) , bus = " virtio " ,
path = " /default-pool/testvol1.img " )
targetlist = [ ]
for ignore in range ( 0 , ( 26 * 2 ) + 1 ) :
d . target = None
d . generate_target ( targetlist )
targetlist . append ( d . target )
self . assertEquals ( " vdaa " , targetlist [ 26 ] )
self . assertEquals ( " vdba " , targetlist [ 26 * 2 ] )
def testFedoraTreeinfo ( self ) :
i = utils . make_distro_installer (
location = " tests/cli-test-xml/fakefedoratree " ,
gtype = " kvm " )
t , v = i . detect_distro ( )
self . assertEquals ( ( t , v ) , ( " linux " , " fedora17 " ) )
if __name__ == " __main__ " :
unittest . main ( )