Skip to content

Commit 4a84d5b

Browse files
committed
tests: Add unit tests for pvh virt_mode
1 parent 67c06eb commit 4a84d5b

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

qubes/tests/vm/qubesvm.py

+77
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ class TestProp(object):
4848
# pylint: disable=too-few-public-methods
4949
__name__ = 'testprop'
5050

51+
class TestDeviceCollection(object):
52+
def __init__(self):
53+
self._list = []
54+
55+
def persistent(self):
56+
return self._list
57+
5158
class TestVM(object):
5259
# pylint: disable=too-few-public-methods
5360
app = TestApp()
@@ -57,6 +64,7 @@ def __init__(self, **kwargs):
5764
self.installed_by_rpm = False
5865
for k, v in kwargs.items():
5966
setattr(self, k, v)
67+
self.devices = {'pci': TestDeviceCollection()}
6068

6169
def is_running(self):
6270
return self.running
@@ -109,6 +117,12 @@ def test_040_setter_virt_mode(self):
109117
self.assertEqual(
110118
qubes.vm.qubesvm._setter_virt_mode(self.vm, self.prop, 'PV'),
111119
'pv')
120+
self.assertEqual(
121+
qubes.vm.qubesvm._setter_virt_mode(self.vm, self.prop, 'pvh'),
122+
'pvh')
123+
self.vm.devices['pci']._list.append(object())
124+
with self.assertRaises(ValueError):
125+
qubes.vm.qubesvm._setter_virt_mode(self.vm, self.prop, 'pvh')
112126
with self.assertRaises(ValueError):
113127
qubes.vm.qubesvm._setter_virt_mode(self.vm, self.prop, 'True')
114128

@@ -608,3 +622,66 @@ def test_600_libvirt_xml_hvm(self):
608622
libvirt_xml = vm.create_config_file()
609623
self.assertXMLEqual(lxml.etree.XML(libvirt_xml),
610624
lxml.etree.XML(expected))
625+
626+
def test_600_libvirt_xml_pvh(self):
627+
expected = '''<domain type="xen">
628+
<name>test-inst-test</name>
629+
<uuid>7db78950-c467-4863-94d1-af59806384ea</uuid>
630+
<memory unit="MiB">500</memory>
631+
<currentMemory unit="MiB">400</currentMemory>
632+
<vcpu placement="static">2</vcpu>
633+
<cpu mode='host-passthrough'>
634+
<!-- disable nested HVM -->
635+
<feature name='vmx' policy='disable'/>
636+
<feature name='svm' policy='disable'/>
637+
<!-- disable SMAP inside VM, because of Linux bug -->
638+
<feature name='smap' policy='disable'/>
639+
</cpu>
640+
<os>
641+
<type arch="x86_64" machine="xenfv">hvm</type>
642+
<kernel>/tmp/kernel/vmlinuz</kernel>
643+
<initrd>/tmp/kernel/initramfs</initrd>
644+
<cmdline>root=/dev/mapper/dmroot ro nomodeset console=hvc0 rd_NO_PLYMOUTH rd.plymouth.enable=0 plymouth.enable=0 nopat</cmdline>
645+
</os>
646+
<features>
647+
<pae/>
648+
<acpi/>
649+
<apic/>
650+
<viridian/>
651+
</features>
652+
<clock offset='utc' adjustment='reset'>
653+
<timer name="tsc" mode="native"/>
654+
</clock>
655+
<on_poweroff>destroy</on_poweroff>
656+
<on_reboot>destroy</on_reboot>
657+
<on_crash>destroy</on_crash>
658+
<devices>
659+
<disk type="block" device="disk">
660+
<driver name="phy" />
661+
<source dev="/tmp/kernel/modules.img" />
662+
<target dev="xvdd" />
663+
<backenddomain name="dom0" />
664+
</disk>
665+
<emulator type="none" />
666+
<console type="pty">
667+
<target type="xen" port="0"/>
668+
</console>
669+
</devices>
670+
</domain>
671+
'''
672+
my_uuid = '7db78950-c467-4863-94d1-af59806384ea'
673+
vm = self.get_vm(uuid=my_uuid)
674+
vm.netvm = None
675+
vm.virt_mode = 'pvh'
676+
# tests for storage are later
677+
vm.volumes['kernel'] = unittest.mock.Mock(**{
678+
'kernels_dir': '/tmp/kernel',
679+
'block_device.return_value.domain': 'dom0',
680+
'block_device.return_value.script': None,
681+
'block_device.return_value.path': '/tmp/kernel/modules.img',
682+
'block_device.return_value.devtype': 'disk',
683+
'block_device.return_value.name': 'kernel',
684+
})
685+
libvirt_xml = vm.create_config_file()
686+
self.assertXMLEqual(lxml.etree.XML(libvirt_xml),
687+
lxml.etree.XML(expected))

0 commit comments

Comments
 (0)