Introduce the 'version-min' tag. Tests can set it to the minimum version of QEMU they require. If QEMU is older, the tests will be cancelled (skipped):
$ python -m avocado --show=app run tests/acceptance/x86_cpu_model_versions.py (01/11) X86CPUModelAliases.test_4_0_alias_compatibility: CANCEL: Test expects version '4.1' but QEMU binary is '3.1.1' (0.10 s) (02/11) X86CPUModelAliases.test_4_1_alias: CANCEL: Test expects version '4.1' but QEMU binary is '3.1.1' (0.10 s) (03/11) X86CPUModelAliases.test_none_alias: CANCEL: Test expects version '4.1' but QEMU binary is '3.1.1' (0.10 s) ... Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> --- tests/acceptance/avocado_qemu/__init__.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py index 6618ea67c1..67c75822d5 100644 --- a/tests/acceptance/avocado_qemu/__init__.py +++ b/tests/acceptance/avocado_qemu/__init__.py @@ -19,6 +19,7 @@ import avocado SRC_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..', '..', '..') sys.path.append(os.path.join(SRC_ROOT_DIR, 'python')) +from qemu.binutils import binary_get_version from qemu.machine import QEMUMachine def is_readable_executable_file(path): @@ -111,6 +112,7 @@ class Test(avocado.Test): def setUp(self): self._vms = {} + logger = logging.getLogger('core') self.arch = self.params.get('arch', default=self._get_unique_tag_val('arch')) @@ -118,12 +120,28 @@ class Test(avocado.Test): self.machine = self.params.get('machine', default=self._get_unique_tag_val('machine')) + # Verify qemu_bin default_qemu_bin = pick_default_qemu_bin(arch=self.arch) self.qemu_bin = self.params.get('qemu_bin', default=default_qemu_bin) if self.qemu_bin is None: self.cancel("No QEMU binary defined or found in the source tree") + # Verify version + min_version = self._get_unique_tag_val('version-min') + logger.debug('version-min: {}'.format(min_version)) + if min_version: + min_v = [int(n) for n in min_version.split('.')] + if len(min_v) < 3: + min_v.append(0) + logger.debug(min_v) + bin_v = binary_get_version(self.qemu_bin) + bin_v = (bin_v['major'], bin_v['minor'], bin_v['micro']) + logger.debug(bin_v) + fmt = "Test expects version '{}' but QEMU binary is '{}.{}.{}'" + if bin_v[0] < min_v[0] or bin_v[1] < min_v[1] or bin_v[2] < min_v[2]: + self.cancel(fmt.format(min_version, bin_v[0], bin_v[1], bin_v[2])) + def _new_vm(self, *args): vm = QEMUMachine(self.qemu_bin, sock_dir=tempfile.mkdtemp()) if args: -- 2.21.1