mirror of
https://github.com/virt-manager/virt-manager.git
synced 2024-12-22 13:34:07 +03:00
e1468c04aa
Inspired by the x86_64 counterpart. Signed-off-by: Andrea Bolognani <abologna@redhat.com>
200 lines
6.4 KiB
Python
200 lines
6.4 KiB
Python
# 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 pytest
|
|
|
|
from tests import utils
|
|
|
|
from virtinst import Capabilities
|
|
from virtinst import DomainCapabilities
|
|
|
|
|
|
DATADIR = utils.DATADIR + "/capabilities"
|
|
|
|
|
|
def _buildCaps(filename):
|
|
path = os.path.join(DATADIR, filename)
|
|
conn = utils.URIs.open_testdefault_cached()
|
|
return Capabilities(conn, open(path).read())
|
|
|
|
|
|
def testCapsCPUFeaturesNewSyntax():
|
|
filename = "test-qemu-with-kvm.xml"
|
|
caps = _buildCaps(filename)
|
|
|
|
assert caps.host.cpu.arch == "x86_64"
|
|
assert caps.host.cpu.model == "core2duo"
|
|
|
|
|
|
def testCapsUtilFuncs():
|
|
caps_with_kvm = _buildCaps("test-qemu-with-kvm.xml")
|
|
caps_no_kvm = _buildCaps("test-qemu-no-kvm.xml")
|
|
caps_empty = _buildCaps("test-empty.xml")
|
|
|
|
def test_utils(caps, has_guests, is_kvm):
|
|
assert caps.has_install_options() == has_guests
|
|
if caps.guests:
|
|
assert caps.guests[0].is_kvm_available() == is_kvm
|
|
|
|
test_utils(caps_empty, False, False)
|
|
test_utils(caps_with_kvm, True, True)
|
|
test_utils(caps_no_kvm, True, False)
|
|
|
|
# Small test for extra coverage
|
|
with pytest.raises(ValueError, match=r".*virtualization type 'xen'.*"):
|
|
caps_empty.guest_lookup(os_type="linux")
|
|
with pytest.raises(ValueError, match=r".*not support any.*"):
|
|
caps_empty.guest_lookup()
|
|
|
|
|
|
def testGuestCapabilities():
|
|
filename = "kvm-x86_64.xml"
|
|
caps = _buildCaps(filename)
|
|
|
|
assert caps.guests[0].supports_externalSnapshot() is True
|
|
|
|
|
|
##############################
|
|
# domcapabilities.py testing #
|
|
##############################
|
|
|
|
def testDomainCapabilities():
|
|
xml = open(DATADIR + "/test-domcaps.xml").read()
|
|
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
|
|
|
|
assert caps.machine == "my-machine-type"
|
|
assert caps.arch == "x86_64"
|
|
assert caps.domain == "kvm"
|
|
assert caps.path == "/bin/emulatorbin"
|
|
|
|
assert caps.os.loader.supported is True
|
|
assert caps.os.loader.get_values() == ["/foo/bar", "/tmp/my_path"]
|
|
assert caps.os.loader.enum_names() == ["type", "readonly"]
|
|
assert caps.os.loader.get_enum("type").get_values() == [
|
|
"rom", "pflash"]
|
|
assert caps.os.loader.get_enum("idontexist").get_values() == []
|
|
|
|
|
|
def testDomainCapabilitiesx86():
|
|
xml = open(DATADIR + "/kvm-x86_64-domcaps-latest.xml").read()
|
|
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
|
|
|
|
custom_mode = caps.cpu.get_mode("custom")
|
|
assert bool(custom_mode)
|
|
cpu_model = custom_mode.get_model("Opteron_G4")
|
|
assert bool(cpu_model)
|
|
assert cpu_model.usable
|
|
|
|
models = caps.get_cpu_models()
|
|
assert len(models) > 10
|
|
assert "SandyBridge" in models
|
|
|
|
assert caps.label_for_firmware_path(None) == "BIOS"
|
|
assert "Custom:" in caps.label_for_firmware_path("/foobar")
|
|
assert "UEFI" in caps.label_for_firmware_path("OVMF")
|
|
|
|
assert caps.supports_filesystem_virtiofs()
|
|
assert caps.supports_memorybacking_memfd()
|
|
assert caps.supports_redirdev_usb()
|
|
assert caps.supports_channel_spicevmc()
|
|
|
|
xml = open(DATADIR + "/kvm-x86_64-domcaps-amd-sev.xml").read()
|
|
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
|
|
assert caps.supports_sev_launch_security()
|
|
|
|
|
|
def testDomainCapabilitiesAArch64():
|
|
xml = open(DATADIR + "/kvm-aarch64-domcaps.xml").read()
|
|
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
|
|
|
|
assert "Default" in caps.label_for_firmware_path(None)
|
|
assert "Custom:" in caps.label_for_firmware_path("/foobar")
|
|
assert "UEFI" in caps.label_for_firmware_path("aarch64/QEMU_EFI")
|
|
|
|
assert caps.supports_filesystem_virtiofs()
|
|
assert caps.supports_memorybacking_memfd()
|
|
assert caps.supports_redirdev_usb()
|
|
assert caps.supports_channel_spicevmc()
|
|
|
|
|
|
def testDomainCapabilitiesPPC64le():
|
|
xml = open(DATADIR + "/kvm-ppc64le-domcaps.xml").read()
|
|
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
|
|
|
|
custom_mode = caps.cpu.get_mode("custom")
|
|
assert bool(custom_mode)
|
|
|
|
models = caps.get_cpu_models()
|
|
assert "POWER9" in models
|
|
|
|
assert "Default" in caps.label_for_firmware_path(None)
|
|
|
|
assert caps.supports_filesystem_virtiofs()
|
|
assert caps.supports_memorybacking_memfd()
|
|
assert caps.supports_redirdev_usb()
|
|
assert not caps.supports_channel_spicevmc()
|
|
|
|
|
|
def testDomainCapabilitiesRISCV64():
|
|
xml = open(DATADIR + "/qemu-riscv64-domcaps.xml").read()
|
|
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
|
|
|
|
host_mode = caps.cpu.get_mode("host-passthrough")
|
|
assert bool(host_mode)
|
|
assert not host_mode.supported
|
|
max_mode = caps.cpu.get_mode("maximum")
|
|
assert bool(max_mode)
|
|
assert max_mode.supported
|
|
custom_mode = caps.cpu.get_mode("custom")
|
|
assert bool(custom_mode)
|
|
cpu_model = custom_mode.get_model("rv64")
|
|
assert bool(cpu_model)
|
|
assert cpu_model.usable
|
|
|
|
models = caps.get_cpu_models()
|
|
assert len(models) > 5
|
|
assert "veyron-v1" in models
|
|
|
|
assert "Default" in caps.label_for_firmware_path(None)
|
|
assert "Custom:" in caps.label_for_firmware_path("/foobar")
|
|
assert "UEFI" in caps.label_for_firmware_path("RISCV_VIRT_CODE.fd")
|
|
|
|
assert caps.supports_filesystem_virtiofs()
|
|
assert caps.supports_memorybacking_memfd()
|
|
assert caps.supports_redirdev_usb()
|
|
assert caps.supports_channel_spicevmc()
|
|
|
|
|
|
def testDomainCapabilitiesLoongArch64():
|
|
xml = open(DATADIR + "/kvm-loongarch64-domcaps.xml").read()
|
|
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
|
|
|
|
host_mode = caps.cpu.get_mode("host-passthrough")
|
|
assert bool(host_mode)
|
|
assert host_mode.supported
|
|
max_mode = caps.cpu.get_mode("maximum")
|
|
assert bool(max_mode)
|
|
assert max_mode.supported
|
|
custom_mode = caps.cpu.get_mode("custom")
|
|
assert bool(custom_mode)
|
|
cpu_model = custom_mode.get_model("la132")
|
|
assert bool(cpu_model)
|
|
assert cpu_model.usable
|
|
|
|
models = caps.get_cpu_models()
|
|
assert len(models) > 2
|
|
assert "la464" in models
|
|
|
|
assert "Default" in caps.label_for_firmware_path(None)
|
|
assert "Custom:" in caps.label_for_firmware_path("/foobar")
|
|
assert "UEFI" in caps.label_for_firmware_path("loongarch64/QEMU_CODE.fd")
|
|
|
|
assert caps.supports_filesystem_virtiofs()
|
|
assert caps.supports_memorybacking_memfd()
|
|
assert caps.supports_redirdev_usb()
|
|
assert caps.supports_channel_spicevmc()
|