mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 15:36:14 +01:00
Merge branch '487-ci-memcheck' into 'master'
Add CI job for running tests under Valgrind Closes #487 See merge request GNOME/glib!169
This commit is contained in:
commit
daa308dd6e
@ -14,7 +14,7 @@ variables:
|
||||
MESON_COMMON_OPTIONS: "--buildtype debug --fatal-meson-warnings"
|
||||
|
||||
fedora-x86_64:
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v2
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v3
|
||||
stage: build
|
||||
except:
|
||||
- tags
|
||||
@ -84,7 +84,7 @@ debian-stable-x86_64:
|
||||
- "_build/${CI_JOB_NAME}-report.xml"
|
||||
|
||||
G_DISABLE_ASSERT:
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v2
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v3
|
||||
stage: build
|
||||
except:
|
||||
- tags
|
||||
@ -111,6 +111,40 @@ G_DISABLE_ASSERT:
|
||||
- "_build/meson-logs"
|
||||
- "_build/${CI_JOB_NAME}-report.xml"
|
||||
|
||||
valgrind:
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v3
|
||||
stage: analysis
|
||||
except:
|
||||
- tags
|
||||
variables:
|
||||
MESON_TEST_TIMEOUT_MULTIPLIER: 10
|
||||
script:
|
||||
- meson ${MESON_COMMON_OPTIONS}
|
||||
--werror
|
||||
-Dsystemtap=true
|
||||
-Ddtrace=true
|
||||
-Dfam=true
|
||||
-Dinstalled_tests=true
|
||||
_build
|
||||
- ninja -C _build
|
||||
- bash -x ./.gitlab-ci/run-tests.sh
|
||||
--log-file _build/meson-logs/testlog-valgrind.json
|
||||
--wrap "valgrind --tool=memcheck --error-exitcode=1 --track-origins=yes --leak-check=full --leak-resolution=high --num-callers=50 --show-leak-kinds=definite,possible --show-error-list=yes --suppressions=${CI_PROJECT_DIR}/glib.supp"
|
||||
--no-suite no-valgrind
|
||||
--no-suite slow
|
||||
# FIXME: Remove this when we have zero valgrind leaks.
|
||||
# https://gitlab.gnome.org/GNOME/glib/issues/333
|
||||
allow_failure: true
|
||||
artifacts:
|
||||
reports:
|
||||
junit: "_build/${CI_JOB_NAME}-report.xml"
|
||||
name: "glib-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||||
when: always
|
||||
paths:
|
||||
- "_build/config.h"
|
||||
- "_build/glib/glibconfig.h"
|
||||
- "_build/meson-logs"
|
||||
|
||||
.cross-template: &cross-template
|
||||
stage: build
|
||||
except:
|
||||
@ -255,7 +289,7 @@ freebsd-12-x86_64:
|
||||
- "_build/${CI_JOB_NAME}-report.xml"
|
||||
|
||||
coverage:
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v2
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v3
|
||||
stage: coverage
|
||||
except:
|
||||
- tags
|
||||
@ -268,7 +302,7 @@ coverage:
|
||||
coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'
|
||||
|
||||
scan-build:
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v2
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v3
|
||||
stage: analysis
|
||||
except:
|
||||
- tags
|
||||
@ -301,7 +335,7 @@ pages:
|
||||
- public
|
||||
|
||||
dist-job:
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v2
|
||||
image: registry.gitlab.gnome.org/gnome/glib/fedora:v3
|
||||
stage: build
|
||||
only:
|
||||
- tags
|
||||
|
@ -47,6 +47,7 @@ RUN dnf -y install \
|
||||
shared-mime-info \
|
||||
systemtap-sdt-devel \
|
||||
unzip \
|
||||
valgrind \
|
||||
wget \
|
||||
xz \
|
||||
zlib-devel \
|
||||
|
@ -52,6 +52,7 @@ for line in args.infile:
|
||||
duration = data['duration']
|
||||
return_code = data['returncode']
|
||||
log = data['stdout']
|
||||
log_stderr = data.get('stderr', '')
|
||||
|
||||
unit = {
|
||||
'suite': suite_name,
|
||||
@ -59,6 +60,7 @@ for line in args.infile:
|
||||
'duration': duration,
|
||||
'returncode': return_code,
|
||||
'stdout': log,
|
||||
'stderr': log_stderr,
|
||||
}
|
||||
|
||||
units = suites.setdefault(suite_name, [])
|
||||
@ -103,7 +105,7 @@ for name, units in suites.items():
|
||||
failure.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||
failure.set('name', unit['name'])
|
||||
failure.set('type', 'error')
|
||||
failure.text = unit['stdout']
|
||||
failure.text = unit['stdout'] + '\n' + unit['stderr']
|
||||
|
||||
output = ET.tostring(testsuites, encoding='unicode')
|
||||
outfile.write(output)
|
||||
|
@ -2,10 +2,21 @@
|
||||
|
||||
set +e
|
||||
|
||||
case "$1" in
|
||||
--log-file)
|
||||
log_file="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
log_file="_build/meson-logs/testlog.json"
|
||||
esac
|
||||
|
||||
meson test \
|
||||
-C _build \
|
||||
--timeout-multiplier ${MESON_TEST_TIMEOUT_MULTIPLIER} \
|
||||
--no-suite flaky
|
||||
--no-suite flaky \
|
||||
"$@"
|
||||
|
||||
exit_code=$?
|
||||
|
||||
@ -13,6 +24,6 @@ python3 .gitlab-ci/meson-junit-report.py \
|
||||
--project-name=glib \
|
||||
--job-id "${CI_JOB_NAME}" \
|
||||
--output "_build/${CI_JOB_NAME}-report.xml" \
|
||||
_build/meson-logs/testlog.json
|
||||
"${log_file}"
|
||||
|
||||
exit $exit_code
|
||||
|
@ -798,6 +798,7 @@ test_store_past_end (void)
|
||||
g_assert_cmpint (g_list_model_get_n_items (model), ==, 1);
|
||||
item = g_list_model_get_item (model, 0);
|
||||
g_assert_nonnull (item);
|
||||
g_object_unref (item);
|
||||
item = g_list_model_get_item (model, G_MAXUINT);
|
||||
g_assert_null (item);
|
||||
|
||||
|
71
glib.supp
71
glib.supp
@ -22,6 +22,7 @@
|
||||
{
|
||||
gnutls-init-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:gtls_gnutls_init
|
||||
@ -30,6 +31,7 @@
|
||||
{
|
||||
gnutls-init-realloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:realloc
|
||||
...
|
||||
fun:gtls_gnutls_init
|
||||
@ -38,6 +40,7 @@
|
||||
{
|
||||
g-tls-backend-gnutls-init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:g_once_impl
|
||||
fun:g_tls_backend_gnutls_init
|
||||
}
|
||||
@ -45,6 +48,7 @@
|
||||
{
|
||||
p11-tokens-init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:create_tokens_inlock
|
||||
@ -55,6 +59,7 @@
|
||||
{
|
||||
g-local-vfs-getpwnam
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:getpwnam
|
||||
@ -64,6 +69,7 @@
|
||||
{
|
||||
glib-init-malloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_quark_init
|
||||
@ -74,6 +80,7 @@
|
||||
{
|
||||
glib-init-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_quark_init
|
||||
@ -84,6 +91,7 @@
|
||||
{
|
||||
gobject-init-malloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:gobject_init_ctor
|
||||
@ -92,6 +100,7 @@
|
||||
{
|
||||
gobject-init-realloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:realloc
|
||||
...
|
||||
fun:gobject_init_ctor
|
||||
@ -100,6 +109,7 @@
|
||||
{
|
||||
gobject-init-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:gobject_init_ctor
|
||||
@ -108,6 +118,7 @@
|
||||
{
|
||||
g-type-register-dynamic
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_type_register_dynamic
|
||||
@ -116,6 +127,7 @@
|
||||
{
|
||||
g-type-register-static
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_type_register_static
|
||||
@ -124,6 +136,7 @@
|
||||
{
|
||||
g-type-register-static-realloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible,reachable
|
||||
fun:realloc
|
||||
...
|
||||
fun:g_type_register_static
|
||||
@ -132,14 +145,34 @@
|
||||
{
|
||||
g-type-register-static-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_type_register_static
|
||||
}
|
||||
|
||||
{
|
||||
g-type-register-fundamental
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible,reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_type_register_fundamental
|
||||
}
|
||||
|
||||
{
|
||||
g-type-register-fundamental-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible,reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_type_register_fundamental
|
||||
}
|
||||
|
||||
{
|
||||
g-type-add-interface-dynamic
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_type_add_interface_dynamic
|
||||
@ -148,6 +181,7 @@
|
||||
{
|
||||
g-type-add-interface-static
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_type_add_interface_static
|
||||
@ -174,6 +208,7 @@
|
||||
{
|
||||
g-test-rand-init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_rand_new_with_seed_array
|
||||
@ -185,6 +220,7 @@
|
||||
{
|
||||
g-test-rand-init2
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_rand_new_with_seed_array
|
||||
@ -197,6 +233,7 @@
|
||||
{
|
||||
g-quark-table-new
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:g_hash_table_new
|
||||
...
|
||||
fun:quark_new
|
||||
@ -205,6 +242,7 @@
|
||||
{
|
||||
g-quark-table-resize
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
...
|
||||
fun:g_hash_table_resize
|
||||
...
|
||||
@ -214,6 +252,7 @@
|
||||
{
|
||||
g-type-interface-init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:type_iface_vtable_base_init_Wm
|
||||
@ -231,6 +270,7 @@
|
||||
{
|
||||
g-type-class-init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:g_type_create_instance
|
||||
...
|
||||
fun:type_class_init_Wm
|
||||
@ -335,6 +375,7 @@
|
||||
{
|
||||
g-io-module-default-singleton-malloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_type_create_instance
|
||||
@ -345,6 +386,7 @@
|
||||
{
|
||||
g-io-module-default-singleton-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_type_create_instance
|
||||
@ -357,6 +399,7 @@
|
||||
{
|
||||
g-io-module-default-singleton
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:g_type_create_instance
|
||||
...
|
||||
fun:_g_io_module_get_default
|
||||
@ -365,6 +408,7 @@
|
||||
{
|
||||
g-io-module-default-singleton-module
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_module_open
|
||||
@ -375,6 +419,7 @@
|
||||
{
|
||||
g-io-module-default-singleton-name
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_strdup
|
||||
@ -385,6 +430,7 @@
|
||||
{
|
||||
g-get-language-names-malloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_get_language_names
|
||||
@ -393,6 +439,7 @@
|
||||
{
|
||||
g-get-language-names-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_get_language_names
|
||||
@ -401,6 +448,7 @@
|
||||
{
|
||||
g-static-mutex
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_static_mutex_get_mutex_impl
|
||||
@ -409,6 +457,7 @@
|
||||
{
|
||||
g-system-thread-init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible,reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_system_thread_new
|
||||
@ -417,6 +466,7 @@
|
||||
{
|
||||
g-io-module-default-proxy-resolver-gnome
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_proxy_resolver_gnome_init
|
||||
@ -428,6 +478,7 @@
|
||||
{
|
||||
g-threaded-resolver-getaddrinfo-config
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:__resolv_conf_allocate
|
||||
@ -707,9 +758,11 @@
|
||||
}
|
||||
|
||||
# g_set_user_dirs() deliberately leaks the previous cached g_get_user_*() values.
|
||||
# These will not all be reachable on exit.
|
||||
{
|
||||
g_set_user_dirs_str
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:definite,reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:set_str_if_different
|
||||
@ -717,9 +770,11 @@
|
||||
}
|
||||
|
||||
# g_set_user_dirs() deliberately leaks the previous cached g_get_user_*() values.
|
||||
# These will not all be reachable on exit.
|
||||
{
|
||||
g_set_user_dirs_strv
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:definite,reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:set_strv_if_different
|
||||
@ -730,6 +785,7 @@
|
||||
{
|
||||
g_get_system_data_dirs
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_build_system_data_dirs
|
||||
@ -740,6 +796,7 @@
|
||||
{
|
||||
g_get_user_data_dir
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:realloc
|
||||
...
|
||||
fun:g_build_user_data_dir
|
||||
@ -750,6 +807,7 @@
|
||||
{
|
||||
desktop_file_dirs_malloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:desktop_file_dirs_lock
|
||||
@ -759,6 +817,7 @@
|
||||
{
|
||||
desktop_file_dirs_realloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:realloc
|
||||
...
|
||||
fun:desktop_file_dirs_lock
|
||||
@ -768,6 +827,7 @@
|
||||
{
|
||||
desktop_file_dir_unindexed_setup_search
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:desktop_file_dir_unindexed_setup_search
|
||||
@ -778,6 +838,7 @@
|
||||
{
|
||||
g_io_extension_point_register
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_io_extension_point_register
|
||||
@ -787,6 +848,7 @@
|
||||
{
|
||||
g_strerror
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_locale_to_utf8
|
||||
@ -797,6 +859,7 @@
|
||||
{
|
||||
g_socket_connection_factory_register_type
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_socket_connection_factory_register_type
|
||||
@ -806,6 +869,7 @@
|
||||
{
|
||||
g_dbus_error_quark
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_dbus_error_register_error_domain
|
||||
@ -816,6 +880,7 @@
|
||||
{
|
||||
g_private_set_alloc0
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_private_set_alloc0
|
||||
@ -823,6 +888,7 @@
|
||||
{
|
||||
g_private_set_alloc0-calloc
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:g_private_set_alloc0
|
||||
@ -832,6 +898,7 @@
|
||||
{
|
||||
g_main_context_push_thread_default
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_queue_new
|
||||
@ -842,6 +909,7 @@
|
||||
{
|
||||
g_file_info_attribute_cache
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:ensure_attribute_hash
|
||||
@ -851,6 +919,7 @@
|
||||
{
|
||||
g_file_info_attribute_cache2
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:ensure_attribute_hash
|
||||
@ -860,6 +929,7 @@
|
||||
{
|
||||
g_file_info_attribute_cache3
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:malloc
|
||||
...
|
||||
fun:lookup_namespace
|
||||
@ -869,6 +939,7 @@
|
||||
{
|
||||
g_file_info_attribute_cache4
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:reachable
|
||||
fun:calloc
|
||||
...
|
||||
fun:lookup_namespace
|
||||
|
@ -412,6 +412,8 @@ test_g_rec_mutex_locker (void)
|
||||
/* Verify that the mutex is unlocked again */
|
||||
thread = g_thread_new ("rec mutex unlocked", rec_mutex_unlocked_thread, &rec_mutex);
|
||||
g_thread_join (thread);
|
||||
|
||||
g_rec_mutex_clear (&rec_mutex);
|
||||
}
|
||||
|
||||
/* Thread function to check that an rw lock given in @data cannot be writer locked */
|
||||
@ -478,6 +480,8 @@ test_g_rw_lock_lockers (void)
|
||||
* the locks taken above have been correctly released. */
|
||||
g_assert_true (g_rw_lock_writer_trylock (&lock));
|
||||
g_rw_lock_writer_unlock (&lock);
|
||||
|
||||
g_rw_lock_clear (&lock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -117,7 +117,7 @@ foreach test_name : python_tests
|
||||
python,
|
||||
args: ['-B', files(test_name)],
|
||||
env: test_env,
|
||||
suite: ['gobject'],
|
||||
suite: ['gobject', 'no-valgrind'],
|
||||
)
|
||||
|
||||
if installed_tests_enabled
|
||||
|
Loading…
Reference in New Issue
Block a user