[libvirt PATCH 5/6] meson: Disable all tests when tests are disabled

Andrea Bolognani abologna at redhat.com
Tue Oct 3 14:56:36 UTC 2023


Currently, passing -Dtests=disabled only disables a subset of
tests: those that are written in C and thus require compilation.
Other tests, such as the syntax-check ones and those that are
implemented as scripts, are always enabled.

There's a potentially dangerous consequence of this behavior:
when tests are disabled, 'meson test' will succeed as if they
had been enabled. No indication of this will be shown, so the
user will likely make the reasonable assumption that everything
is fine when in fact the significantly reduced coverage might
be hiding failures.

To solve this issues, disable *all* tests when asked to do so,
and inject an intentionally failing test to ensure that 'meson
test' doesn't succeed.

Best viewed with 'git show -w'.

Signed-off-by: Andrea Bolognani <abologna at redhat.com>
---
 build-aux/meson.build  |   2 +-
 meson.build            |   7 ++
 src/access/meson.build |  16 ++--
 src/meson.build        | 204 +++++++++++++++++++++--------------------
 4 files changed, 120 insertions(+), 109 deletions(-)

diff --git a/build-aux/meson.build b/build-aux/meson.build
index b5d88a4c44..84405c5ec8 100644
--- a/build-aux/meson.build
+++ b/build-aux/meson.build
@@ -1,6 +1,6 @@
 # Skip syntax-check if not building from git because we get the list of files
 # to check using git commands and it fails if we are not in git repository.
-if git
+if git and build_tests[0]
   flake8_path = ''
   if flake8_prog.found()
     flake8_path = flake8_prog.full_path()
diff --git a/meson.build b/meson.build
index 7ec2a6fd1e..5a1a81d087 100644
--- a/meson.build
+++ b/meson.build
@@ -2072,6 +2072,13 @@ subdir('tools')
 
 if build_tests[0]
   subdir('tests')
+else
+  # Ensure that 'meson test' fails when tests are disabled, as opposed to
+  # misleadingly succeeding at doing absolutely nothing
+  test(
+    'tests-are-disabled',
+    python3_prog, args: [ '-c', 'raise Exception("tests are disabled")' ],
+  )
 endif
 
 subdir('examples')
diff --git a/src/access/meson.build b/src/access/meson.build
index e65f17c0a2..6ca953c932 100644
--- a/src/access/meson.build
+++ b/src/access/meson.build
@@ -105,10 +105,12 @@ access_dep = declare_dependency(
 
 generated_sym_files += access_gen_sym
 
-test(
-  'check-aclperms',
-  python3_prog,
-  args: [ check_aclperms_prog.full_path(), access_perm_h, files('viraccessperm.c') ],
-  env: runutf8,
-  suite: 'script'
-)
+if build_tests[0]
+  test(
+    'check-aclperms',
+    python3_prog,
+    args: [ check_aclperms_prog.full_path(), access_perm_h, files('viraccessperm.c') ],
+    env: runutf8,
+    suite: 'script'
+  )
+endif
diff --git a/src/meson.build b/src/meson.build
index 144f24e526..0c64cef04e 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -942,121 +942,123 @@ meson.add_install_script(
 
 # Check driver files
 
-if host_machine.system() == 'linux'
-  test(
-    'check-symfile',
-    python3_prog,
-    args: [ check_symfile_prog.full_path(), libvirt_syms, libvirt_lib ],
-    env: runutf8,
-    suite: 'script'
-  )
-
-  if conf.has('WITH_REMOTE')
+if build_tests[0]
+  if host_machine.system() == 'linux'
     test(
-      'check-admin-symfile',
+      'check-symfile',
       python3_prog,
-      args: [ check_symfile_prog.full_path(), libvirt_admin_syms, libvirt_admin_lib ],
+      args: [ check_symfile_prog.full_path(), libvirt_syms, libvirt_lib ],
       env: runutf8,
       suite: 'script'
     )
+
+    if conf.has('WITH_REMOTE')
+      test(
+        'check-admin-symfile',
+        python3_prog,
+        args: [ check_symfile_prog.full_path(), libvirt_admin_syms, libvirt_admin_lib ],
+        env: runutf8,
+        suite: 'script'
+      )
+    endif
   endif
-endif
 
-test(
-  'check-symsorting',
-  python3_prog,
-  args: [
-    check_symsorting_prog.full_path(),
-    meson.current_source_dir(),
-    files(sym_files, used_sym_files),
-  ],
-  env: runutf8,
-  suite: 'script'
-)
+  test(
+    'check-symsorting',
+    python3_prog,
+    args: [
+      check_symsorting_prog.full_path(),
+      meson.current_source_dir(),
+      files(sym_files, used_sym_files),
+    ],
+    env: runutf8,
+    suite: 'script'
+  )
 
-test(
-  'check-admin-symsorting',
-  python3_prog,
-  args: [
-    check_symsorting_prog.full_path(),
-    meson.current_source_dir(),
-    libvirt_admin_private_syms,
-  ],
-  env: runutf8,
-  suite: 'script'
-)
+  test(
+    'check-admin-symsorting',
+    python3_prog,
+    args: [
+      check_symsorting_prog.full_path(),
+      meson.current_source_dir(),
+      libvirt_admin_private_syms,
+    ],
+    env: runutf8,
+    suite: 'script'
+  )
 
-test(
-  'check-drivername',
-  python3_prog,
-  args: [
-    check_drivername_prog.full_path(), files(driver_headers),
-    files('libvirt_public.syms'), libvirt_qemu_syms, libvirt_lxc_syms,
-  ],
-  env: runutf8,
-  suite: 'script'
-)
+  test(
+    'check-drivername',
+    python3_prog,
+    args: [
+      check_drivername_prog.full_path(), files(driver_headers),
+      files('libvirt_public.syms'), libvirt_qemu_syms, libvirt_lxc_syms,
+    ],
+    env: runutf8,
+    suite: 'script'
+  )
 
-test(
-  'check-admin-drivername',
-  python3_prog,
-  args: [
-    check_drivername_prog.full_path(), libvirt_admin_public_syms,
-  ],
-  env: runutf8,
-  suite: 'script'
-)
+  test(
+    'check-admin-drivername',
+    python3_prog,
+    args: [
+      check_drivername_prog.full_path(), libvirt_admin_public_syms,
+    ],
+    env: runutf8,
+    suite: 'script'
+  )
 
-test(
-  'check-driverimpls',
-  python3_prog,
-  args: [ check_driverimpls_prog.full_path(), driver_source_files ],
-  env: runutf8,
-  suite: 'script'
-)
+  test(
+    'check-driverimpls',
+    python3_prog,
+    args: [ check_driverimpls_prog.full_path(), driver_source_files ],
+    env: runutf8,
+    suite: 'script'
+  )
 
-test(
-  'check-aclrules',
-  python3_prog,
-  args: [ check_aclrules_prog.full_path(), files('remote/remote_protocol.x'), stateful_driver_source_files ],
-  env: runutf8,
-  suite: 'script'
-)
+  test(
+    'check-aclrules',
+    python3_prog,
+    args: [ check_aclrules_prog.full_path(), files('remote/remote_protocol.x'), stateful_driver_source_files ],
+    env: runutf8,
+    suite: 'script'
+  )
 
-if augparse_prog.found()
-  foreach data : augeas_test_data
-    test(
-      'check-augeas- at 0@'.format(data['name']),
-      augparse_prog,
-      args: [
-        '-I', data['srcdir'],
-        '-I', data['builddir'],
-        data['file'].full_path(),
-      ],
-      suite: 'script'
-    )
-  endforeach
-endif
+  if augparse_prog.found()
+    foreach data : augeas_test_data
+      test(
+        'check-augeas- at 0@'.format(data['name']),
+        augparse_prog,
+        args: [
+          '-I', data['srcdir'],
+          '-I', data['builddir'],
+          data['file'].full_path(),
+        ],
+        suite: 'script'
+      )
+    endforeach
+  endif
 
-if pdwtags_prog.found() and cc.get_id() != 'clang'
-  foreach proto : check_protocols
-    lib = proto['lib']
-    test(
-      'check- at 0@'.format(proto['name']),
-      python3_prog,
-      args: [
-        check_remote_protocol_prog.full_path(),
-        proto['name'],
-        lib.name(),
-        lib.full_path(),
-        pdwtags_prog.full_path(),
-        files('@0 at -structs'.format(proto['name'])),
-      ],
-      env: runutf8,
-      depends: [ lib ],
-      suite: 'script'
-    )
-  endforeach
+  if pdwtags_prog.found() and cc.get_id() != 'clang'
+    foreach proto : check_protocols
+      lib = proto['lib']
+      test(
+        'check- at 0@'.format(proto['name']),
+        python3_prog,
+        args: [
+          check_remote_protocol_prog.full_path(),
+          proto['name'],
+          lib.name(),
+          lib.full_path(),
+          pdwtags_prog.full_path(),
+          files('@0 at -structs'.format(proto['name'])),
+        ],
+        env: runutf8,
+        depends: [ lib ],
+        suite: 'script'
+      )
+    endforeach
+  endif
 endif
 
 # configure pkg-config files for run script
-- 
2.41.0



More information about the libvir-list mailing list