Files
glib/gobject/tests/meson.build
Marco Trevisan (Treviño) a7ab382d90 build: Mark all the failing and flacky tests with thread sanitizer
Sadly many tests don't pass with thread sanitizer, but better to
mark them as such to try to fix them in the future

See also: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
2025-02-11 15:11:50 +01:00

312 lines
8.4 KiB
Meson

subdir('performance')
marshalers_h = custom_target('marshalers_h',
output : 'marshalers.h',
input : 'marshalers.list',
command : [
python, glib_genmarshal,
'--prefix=test',
'--valist-marshallers',
'--output=@OUTPUT@',
'--quiet',
'--header',
'@INPUT@',
],
)
marshalers_c = custom_target('marshalers_c',
output : 'marshalers.c',
input : 'marshalers.list',
command : [
python, glib_genmarshal,
'--prefix=test',
'--valist-marshallers',
'--include-header=marshalers.h',
'--output=@OUTPUT@',
'--quiet',
'--body',
'@INPUT@',
],
)
# We must embed custom-dispatch.exe with an application
# manifest to pacify UAC in order to run on 32-bit Windows
# builds, otherwise the test will not run as UAC will kill it.
extra_custom_dispatch_objs = []
if embed_uac_manifest
uac_exe_pkg = 'gobject'
uac_exe_name = 'custom-dispatch'
# Well, we have to forgo the xxx.exe.manifest in the output listing, since
# compile_resources doesn't like to consume targets with multiple outputs,
# and the xxx.exe.manifest and xxx.rc are tied together
uac_rc = custom_target(
'@0@.rc'.format(uac_exe_name),
output: ['@0@.rc'.format(uac_exe_name)],
command: [gen_uac_manifest,
'-p=@0@'.format(uac_exe_pkg),
'-n=@0@'.format(uac_exe_name),
'--pkg-version=@0@'.format(meson.project_version()),
'--output-dir=@OUTDIR@'],
)
extra_custom_dispatch_objs = import('windows').compile_resources(uac_rc)
endif
gobject_tests = {
'notify-init' : {},
'notify-init2' : {},
'custom-dispatch' : {
'extra_objs' : extra_custom_dispatch_objs,
},
'qdata' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'accumulator' : {
'source' : ['accumulator.c', marshalers_h, marshalers_c],
},
'basics-gobject' : {},
'boxed' : {},
'defaultiface' : {
'source' : ['defaultiface.c', 'testmodule.c'],
},
'deftype' : { 'protocol': 'exitcode' },
'deprecated-properties' : {},
'dynamictype' : {
'source' : ['dynamictype.c', 'testmodule.c'],
},
'enums' : {},
'max-version' : {'install': false},
'override' : {},
'param' : {},
'references' : {},
'basic-signals' : {},
'singleton' : {},
'threadtests' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'dynamictests' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'binding' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'bindinggroup' : {},
'properties' : {},
'properties-introspection' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'reference' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/3148
'can_fail' : host_system == 'gnu' or
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'thread' in glib_sanitizers,
},
'flags' : {},
'value' : {},
'type' : {},
'gobject-private' : {
'source' : 'private.c',
},
'closure' : {},
'closure-refcount' : {
'suite': ['slow'],
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'object' : {},
'signal-handler' : {},
'ifaceproperties' : {},
'signals' : {
'source' : ['signals.c', marshalers_h, marshalers_c],
},
'signalgroup' : {},
'testing' : {},
'type-flags' : {},
'objects-refcount1' : {
'c_args': cc.get_supported_arguments([
'-DG_DISABLE_CAST_CHECKS',
'-Werror',
'-Wcast-align=strict',
]),
},
'objects-refcount2' : {'suite' : ['slow']},
'properties-refcount1' : {
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'properties-refcount2' : {'suite' : ['slow']},
'properties-refcount3' : {
'suite' : ['slow'],
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'properties-refcount4' : {},
'signals-refcount1' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=1'],
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'signals-refcount2' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=2'],
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
'signals-refcount3' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=3'],
},
'signals-refcount4' : {
'source' : 'signals-refcount.c',
'c_args' : ['-DTESTNUM=4'],
# FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1672
'can_fail': 'thread' in glib_sanitizers,
},
}
if have_cxx
gobject_tests += {
'cxx' : {
'protocol': 'exitcode',
'source' : ['cxx.cpp'],
'suite' : ['cpp'],
},
}
foreach std, arg: cxx_standards
gobject_tests += {
'cxx-@0@'.format(std) : {
'protocol': 'exitcode',
'source' : ['cxx.cpp'],
'suite' : ['cpp'],
'cpp_args' : [arg],
},
}
endforeach
endif
if cc.get_id() != 'msvc'
gobject_tests += {'autoptr' : {}}
endif
python_tests = {
'genmarshal.py' : {},
'gobject-query.py' : {
'depends' : gobject_query,
'can_fail' : host_system == 'windows',
},
'mkenums.py' : {},
}
test_env = environment()
test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
test_deps = [libm, thread_dep, libglib_dep, libgobject_dep]
test_cargs = ['-DG_LOG_DOMAIN="GLib-GObject"', '-UG_DISABLE_ASSERT']
test_cpp_args = test_cargs
foreach test_name, extra_args : gobject_tests
source = extra_args.get('source', test_name + '.c')
extra_objs = extra_args.get('extra_objs', [])
install = installed_tests_enabled and extra_args.get('install', true)
if install
test_conf = configuration_data()
test_conf.set('installed_tests_dir', installed_tests_execdir)
test_conf.set('program', test_name)
test_conf.set('env', '')
configure_file(
input: installed_tests_template_tap,
output: test_name + '.test',
install_dir: installed_tests_metadir,
install_tag: 'tests',
configuration: test_conf
)
endif
exe = executable(test_name, source, extra_objs,
c_args : test_cargs + extra_args.get('c_args', []),
cpp_args : test_cpp_args + extra_args.get('cpp_args', []),
dependencies : test_deps + extra_args.get('dependencies', []),
install_dir: installed_tests_execdir,
install_tag: 'tests',
install: install,
)
suite = ['gobject'] + extra_args.get('suite', [])
timeout = suite.contains('slow') ? test_timeout_slow : test_timeout
if extra_args.get('can_fail', false)
suite += 'failing'
endif
# FIXME: https://gitlab.gnome.org/GNOME/glib/issues/1316
# aka https://bugs.debian.org/880883
if test_name == 'closure-refcount' and ['arm', 'aarch64'].contains(host_machine.cpu_family())
timeout = timeout * 10
endif
test(test_name,
exe,
protocol : extra_args.get('protocol', test_protocol),
env : test_env,
timeout : timeout,
suite : suite,
)
endforeach
foreach test_name, extra_args : python_tests
depends = [extra_args.get('depends', [])]
suite = ['gobject', 'no-valgrind']
if extra_args.get('can_fail', false)
suite += 'failing'
endif
test(
test_name,
python,
protocol : extra_args.get('protocol', test_protocol),
depends: depends,
args: ['-B', files(test_name)],
env: test_env,
suite: suite,
)
if installed_tests_enabled
install_data(
files(test_name),
install_dir: installed_tests_execdir,
install_tag: 'tests',
install_mode: 'rwxr-xr-x',
)
test_conf = configuration_data()
test_conf.set('installed_tests_dir', installed_tests_execdir)
test_conf.set('program', test_name)
test_conf.set('env', '')
configure_file(
input: installed_tests_template_tap,
output: test_name + '.test',
install_dir: installed_tests_metadir,
install_tag: 'tests',
configuration: test_conf,
)
endif
endforeach
# TAP test runner for Python tests
if installed_tests_enabled
install_data(
files('taptestrunner.py'),
install_dir: installed_tests_execdir,
install_tag: 'tests',
)
endif