@@ -39,6 +39,8 @@
sys.path.append(os.path.join(SOURCE_DIR, 'python'))
+from qemu.accel import kvm_available
+from qemu.accel import tcg_available
from qemu.machine import QEMUMachine
def is_readable_executable_file(path):
@@ -162,6 +164,28 @@ def _get_unique_tag_val(self, tag_name):
return vals.pop()
return None
+ def require_accelerator(self, accelerator):
+ """
+ Requires an accelerator to be available for the test to continue
+
+ It takes into account the currently set qemu binary.
+
+ If the check fails, the test is canceled. If the check itself
+ for the given accelerator is not available, the test is also
+ canceled.
+
+ :param accelerator: name of the accelerator, such as "kvm" or "tcg"
+ :type accelerator: str
+ """
+ checker = {'tcg': tcg_available,
+ 'kvm': kvm_available}.get(accelerator)
+ if checker is None:
+ self.cancel("Don't know how to check for the presence "
+ "of accelerator %s" % accelerator)
+ if not checker(qemu_bin=self.qemu_bin):
+ self.cancel("%s accelerator does not seem to be "
+ "available" % accelerator)
+
def setUp(self):
self._vms = {}
@@ -12,15 +12,8 @@
from avocado_qemu import LinuxTest, BUILD_DIR
-from qemu.accel import kvm_available
-from qemu.accel import tcg_available
-
from avocado import skipIf
-ACCEL_NOT_AVAILABLE_FMT = "%s accelerator does not seem to be available"
-KVM_NOT_AVAILABLE = ACCEL_NOT_AVAILABLE_FMT % "KVM"
-TCG_NOT_AVAILABLE = ACCEL_NOT_AVAILABLE_FMT % "TCG"
-
class BootLinuxX8664(LinuxTest):
"""
@@ -34,8 +27,7 @@ def test_pc_i440fx_tcg(self):
:avocado: tags=machine:pc
:avocado: tags=accel:tcg
"""
- if not tcg_available(self.qemu_bin):
- self.cancel(TCG_NOT_AVAILABLE)
+ self.require_accelerator("tcg")
self.vm.add_args("-accel", "tcg")
self.launch_and_wait()
@@ -44,8 +36,7 @@ def test_pc_i440fx_kvm(self):
:avocado: tags=machine:pc
:avocado: tags=accel:kvm
"""
- if not kvm_available(self.arch, self.qemu_bin):
- self.cancel(KVM_NOT_AVAILABLE)
+ self.require_accelerator("kvm")
self.vm.add_args("-accel", "kvm")
self.launch_and_wait()
@@ -54,8 +45,7 @@ def test_pc_q35_tcg(self):
:avocado: tags=machine:q35
:avocado: tags=accel:tcg
"""
- if not tcg_available(self.qemu_bin):
- self.cancel(TCG_NOT_AVAILABLE)
+ self.require_accelerator("tcg")
self.vm.add_args("-accel", "tcg")
self.launch_and_wait()
@@ -64,8 +54,7 @@ def test_pc_q35_kvm(self):
:avocado: tags=machine:q35
:avocado: tags=accel:kvm
"""
- if not kvm_available(self.arch, self.qemu_bin):
- self.cancel(KVM_NOT_AVAILABLE)
+ self.require_accelerator("kvm")
self.vm.add_args("-accel", "kvm")
self.launch_and_wait()
@@ -91,8 +80,7 @@ def test_virt_tcg(self):
:avocado: tags=accel:tcg
:avocado: tags=cpu:max
"""
- if not tcg_available(self.qemu_bin):
- self.cancel(TCG_NOT_AVAILABLE)
+ self.require_accelerator("tcg")
self.vm.add_args("-accel", "tcg")
self.vm.add_args("-cpu", "max")
self.vm.add_args("-machine", "virt,gic-version=2")
@@ -105,8 +93,7 @@ def test_virt_kvm_gicv2(self):
:avocado: tags=cpu:host
:avocado: tags=device:gicv2
"""
- if not kvm_available(self.arch, self.qemu_bin):
- self.cancel(KVM_NOT_AVAILABLE)
+ self.require_accelerator("kvm")
self.vm.add_args("-accel", "kvm")
self.vm.add_args("-cpu", "host")
self.vm.add_args("-machine", "virt,gic-version=2")
@@ -119,8 +106,7 @@ def test_virt_kvm_gicv3(self):
:avocado: tags=cpu:host
:avocado: tags=device:gicv3
"""
- if not kvm_available(self.arch, self.qemu_bin):
- self.cancel(KVM_NOT_AVAILABLE)
+ self.require_accelerator("kvm")
self.vm.add_args("-accel", "kvm")
self.vm.add_args("-cpu", "host")
self.vm.add_args("-machine", "virt,gic-version=3")
@@ -140,8 +126,7 @@ def test_pseries_tcg(self):
:avocado: tags=machine:pseries
:avocado: tags=accel:tcg
"""
- if not tcg_available(self.qemu_bin):
- self.cancel(TCG_NOT_AVAILABLE)
+ self.require_accelerator("tcg")
self.vm.add_args("-accel", "tcg")
self.launch_and_wait()
@@ -159,7 +144,6 @@ def test_s390_ccw_virtio_tcg(self):
:avocado: tags=machine:s390-ccw-virtio
:avocado: tags=accel:tcg
"""
- if not tcg_available(self.qemu_bin):
- self.cancel(TCG_NOT_AVAILABLE)
+ self.require_accelerator("tcg")
self.vm.add_args("-accel", "tcg")
self.launch_and_wait()
@@ -9,8 +9,6 @@
from avocado_qemu import wait_for_console_pattern
from avocado.utils import ssh
-from qemu.accel import kvm_available
-
def run_cmd(args):
subp = subprocess.Popen(args,
@@ -260,8 +258,7 @@ def setUp(self):
self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
'-device', 'virtio-net,netdev=vnet')
- if not kvm_available(self.arch, self.qemu_bin):
- self.cancel(KVM_NOT_AVAILABLE)
+ self.require_accelerator("kvm")
self.vm.add_args('-accel', 'kvm')
def tearDown(self):