meson: Enable (almost) all tests
authorArnaud Rebillout <arnaud.rebillout@collabora.com>
Wed, 31 Oct 2018 05:45:11 +0000 (12:45 +0700)
committerArun Raghavan <arun@arunraghavan.net>
Sat, 8 Jun 2019 09:56:56 +0000 (11:56 +0200)
Signed-off-by: Arnaud Rebillout <arnaud.rebillout@collabora.com>
meson.build
meson_options.txt
src/meson.build
src/tests/meson.build [new file with mode: 0644]
src/tests/test-daemon.meson.sh [new file with mode: 0644]

index 7823312..a1f97f2 100644 (file)
@@ -416,6 +416,10 @@ if webrtc_dep.found()
   cdata.set('HAVE_WEBRTC', 1)
 endif
 
+# Test dependencies
+
+check_dep = dependency('check', version : '>= 0.9.10', required : get_option('tests'))
+
 # Now generate config.h from everything above
 configure_file(output : 'config.h', configuration : cdata)
 
@@ -483,7 +487,7 @@ summary = [
   'Enable SoXR (resampler):       @0@'.format(soxr_dep.found()),
   'Enable WebRTC echo canceller:  @0@'.format(webrtc_dep.found()),
 #  'Enable gcov coverage:          @0@'.format(${ENABLE_GCOV}),
-#  'Enable unit tests:             @0@'.format(${ENABLE_TESTS}),
+  'Enable unit tests:             @0@'.format(get_option('tests')),
   '',
   'Database:                      @0@'.format(get_option('database')),
   'Legacy Database Entry Support: @0@'.format(get_option('legacy-database-entry-format')),
index d4bb036..86f9739 100644 (file)
@@ -1,3 +1,7 @@
+option('tests',
+       type : 'boolean',
+       description : 'Enable unit tests')
+
 option('system_user',
         type : 'string', value : 'pulse',
         description : 'User for running the PulseAudio daemon as a system-wide instance (pulse)')
index 05385cb..a299a9a 100644 (file)
@@ -192,4 +192,7 @@ subdir('pulse')
 subdir('pulsecore')
 subdir('daemon')
 subdir('modules')
+if get_option('tests')
+  subdir('tests')
+endif
 subdir('utils')
diff --git a/src/tests/meson.build b/src/tests/meson.build
new file mode 100644 (file)
index 0000000..e5bb57a
--- /dev/null
@@ -0,0 +1,218 @@
+# Note that a few tests have dependencies on src/modules.
+#
+# The syntax for tests declaration is:
+#
+#   test name, sources, deps, [extra libs, extra flags]
+#
+
+# Default tests
+
+default_tests = [
+  [ 'asyncmsgq-test', 'asyncmsgq-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'asyncq-test', 'asyncq-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'channelmap-test', 'channelmap-test.c',
+    [ check_dep, libpulse_dep ] ],
+  [ 'close-test', 'close-test.c',
+    [            libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'core-util-test', 'core-util-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep ] ],
+  [ 'cpu-mix-test', [ 'cpu-mix-test.c', 'runtime-test-util.h' ],
+    [ check_dep, libm_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'cpu-remap-test', [ 'cpu-remap-test.c', 'runtime-test-util.h' ],
+    [ check_dep, libm_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'cpu-sconv-test', [ 'cpu-sconv-test.c', 'runtime-test-util.h' ],
+    [ check_dep, libm_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'cpu-volume-test', [ 'cpu-volume-test.c', 'runtime-test-util.h' ],
+    [ check_dep, libm_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'format-test', 'format-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'get-binary-name-test', 'get-binary-name-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep ] ],
+  [ 'hook-list-test', 'hook-list-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'json-test', 'json-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep ] ],
+  [ 'lfe-filter-test', 'lfe-filter-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'lock-autospawn-test', 'lock-autospawn-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'mainloop-test', 'mainloop-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep ] ],
+  [ 'memblock-test', 'memblock-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'memblockq-test', 'memblockq-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'mix-test', 'mix-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'mult-s16-test', [ 'mult-s16-test.c', 'runtime-test-util.h' ],
+    [ check_dep, libm_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'proplist-test', 'proplist-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'queue-test', 'queue-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'resampler-test', 'resampler-test.c',
+    [            libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'rtpoll-test', 'rtpoll-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'smoother-test', 'smoother-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'strlist-test', 'strlist-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'thread-mainloop-test', 'thread-mainloop-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'thread-test', 'thread-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'utf8-test', 'utf8-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep ] ],
+  [ 'volume-test', 'volume-test.c',
+    [ check_dep, libm_dep, libpulse_dep, libpulsecommon_dep ] ],
+]
+
+if host_machine.system() != 'windows'
+  default_tests += [
+    [ 'sigbus-test', 'sigbus-test.c',
+      [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+    [ 'usergroup-test', 'usergroup-test.c',
+      [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  ]
+endif
+
+if host_machine.system() != 'darwin'
+  default_tests += [
+    [ 'once-test', 'once-test.c',
+      [ check_dep, thread_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  ]
+endif
+
+if cc.has_header('sys/eventfd.h')
+  default_tests += [
+    [ 'srbchannel-test', 'srbchannel-test.c',
+      [ check_dep, libpulse_dep, libpulsecommon_dep ] ]
+  ]
+endif
+
+if alsa_dep.found()
+  default_tests += [
+    [ 'alsa-mixer-path-test', 'alsa-mixer-path-test.c',
+      [ alsa_dep, check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ],
+      libalsa_util ]
+  ]
+endif
+
+if glib_dep.found()
+  default_tests += [
+    [ 'mainloop-test-glib', 'mainloop-test.c',
+      [ check_dep, glib_dep, libpulse_dep, libpulsecommon_dep, libpulse_mainloop_glib_dep ],
+      [], ['-DGLIB_MAIN_LOOP'] ]
+  ]
+endif
+
+# No-run tests
+
+norun_tests = [
+  [ 'flist-test', 'flist-test.c',
+    [ libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'ipacl-test', 'ipacl-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'lo-latency-test', [ 'lo-latency-test.c', 'lo-test-util.c', 'lo-test-util.h' ],
+    [ check_dep, libm_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'mcalign-test', 'mcalign-test.c',
+    [ libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'pacat-simple', 'pacat-simple.c',
+    [ libpulse_dep, libpulse_simple_dep ] ],
+  [ 'parec-simple', 'parec-simple.c',
+    [ libpulse_dep, libpulse_simple_dep ] ],
+  [ 'remix-test', 'remix-test.c',
+    [ libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'rtstutter', 'rtstutter.c',
+    [ libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'sig2str-test', 'sig2str-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'stripnul', 'stripnul.c',
+    [ libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+# TODO
+#  [ 'echo-cancel-test'],
+]
+
+if cc.has_header_symbol('signal.h', 'SIGXCPU')
+  norun_tests += [
+    [ 'cpulimit-test', [ 'cpulimit-test.c', '../daemon/cpulimit.c', '../daemon/cpulimit.h' ],
+      [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+    [ 'cpulimit-test2', [ 'cpulimit-test.c', '../daemon/cpulimit.c', '../daemon/cpulimit.h' ],
+      [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ],
+      [], ['-DTEST2'] ],
+  ]
+endif
+
+if alsa_dep.found()
+  norun_tests += [
+    [ 'alsa-time-test', 'alsa-time-test.c', [ alsa_dep ] ]
+  ]
+endif
+
+if gtk_dep.found() and glib_dep.found()
+  norun_tests += [
+    [ 'gtk-test', 'gtk-test.c',
+      [ gtk_dep, libpulse_dep, libpulse_mainloop_glib_dep ] ]
+  ]
+endif
+
+# Generate tests
+
+test_env = environment()
+test_env.set('MAKE_CHECK', '1')
+
+foreach t : default_tests + norun_tests
+  name = t[0]
+  sources = t[1]
+  deps = t[2]
+  extra_libs = t.get(3, [])
+  extra_flags = t.get(4, [])
+
+  exe = executable(name, sources,
+    c_args : pa_c_args + extra_flags,
+    include_directories : [ configinc, topinc ],
+    dependencies : deps,
+    link_with : extra_libs,
+  )
+
+  test(name, exe,
+    env : test_env
+  )
+endforeach
+
+# These tests need a running pulseaudio daemon
+
+daemon_tests = [
+  [ 'connect-stress', 'connect-stress.c',
+    [ check_dep, libpulse_dep ] ],
+  [ 'extended-test', 'extended-test.c',
+    [ check_dep, libm_dep, libpulse_dep ] ],
+  [ 'interpol-test', 'interpol-test.c',
+    [ check_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep ] ],
+  [ 'sync-playback', 'sync-playback.c',
+    [ check_dep, libm_dep, libpulse_dep ] ],
+]
+
+daemon_test_names = []
+
+foreach t : daemon_tests
+  name = t[0]
+  sources = t[1]
+  deps = t[2]
+
+  daemon_test_names += name
+
+  executable(name, sources,
+    c_args : pa_c_args,
+    include_directories : [ configinc, topinc ],
+    dependencies : deps,
+  )
+endforeach
+
+test_daemon_meson_sh = find_program('test-daemon.meson.sh')
+run_target('test-daemon',
+  command : [ test_daemon_meson_sh ] + daemon_test_names
+)
diff --git a/src/tests/test-daemon.meson.sh b/src/tests/test-daemon.meson.sh
new file mode 100644 (file)
index 0000000..11e29eb
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -e
+set -u
+
+PATH=${MESON_BUILD_ROOT}/src/daemon:${MESON_BUILD_ROOT}/src/tests:${MESON_BUILD_ROOT}/src/utils:${PATH}
+export PATH
+
+${MESON_SOURCE_ROOT}/src/tests/test-daemon.sh $@