Merge branch '30x-faster-testing' into 'master'

tests: Speed up bus-dispatch OOM testing by a factor of 30

See merge request dbus/dbus!328
This commit is contained in:
Simon McVittie 2022-07-18 13:06:58 +00:00
commit 440aa8edf0
12 changed files with 265 additions and 131 deletions

View file

@ -4797,25 +4797,27 @@ setenv_TEST_LAUNCH_HELPER_CONFIG(const DBusString *test_data_dir,
}
static dbus_bool_t
bus_dispatch_test_conf (const DBusString *test_data_dir,
const char *filename,
dbus_bool_t use_launcher)
bus_dispatch_test_conf (const char *test_data_dir_cstr,
const char *filename,
dbus_bool_t use_launcher)
{
BusContext *context;
DBusConnection *foo;
DBusConnection *bar;
DBusConnection *baz;
DBusError error;
DBusString test_data_dir;
_dbus_string_init_const (&test_data_dir, test_data_dir_cstr);
_dbus_test_diag ("%s:%s...", _DBUS_FUNCTION_NAME, filename);
/* save the config name for the activation helper */
if (!setenv_TEST_LAUNCH_HELPER_CONFIG (test_data_dir, filename))
if (!setenv_TEST_LAUNCH_HELPER_CONFIG (&test_data_dir, filename))
_dbus_test_fatal ("no memory setting TEST_LAUNCH_HELPER_CONFIG");
dbus_error_init (&error);
context = bus_context_new_test (test_data_dir, filename);
context = bus_context_new_test (&test_data_dir, filename);
if (context == NULL)
{
_dbus_test_not_ok ("%s:%s - bus_context_new_test() failed",
@ -4972,22 +4974,24 @@ bus_dispatch_test_conf (const DBusString *test_data_dir,
#if defined(ENABLE_TRADITIONAL_ACTIVATION) && !defined(DBUS_WIN)
static dbus_bool_t
bus_dispatch_test_conf_fail (const DBusString *test_data_dir,
const char *filename)
bus_dispatch_test_conf_fail (const char *test_data_dir_cstr,
const char *filename)
{
BusContext *context;
DBusConnection *foo;
DBusError error;
DBusString test_data_dir;
_dbus_string_init_const (&test_data_dir, test_data_dir_cstr);
_dbus_test_diag ("%s:%s...", _DBUS_FUNCTION_NAME, filename);
/* save the config name for the activation helper */
if (!setenv_TEST_LAUNCH_HELPER_CONFIG (test_data_dir, filename))
if (!setenv_TEST_LAUNCH_HELPER_CONFIG (&test_data_dir, filename))
_dbus_test_fatal ("no memory setting TEST_LAUNCH_HELPER_CONFIG");
dbus_error_init (&error);
context = bus_context_new_test (test_data_dir, filename);
context = bus_context_new_test (&test_data_dir, filename);
if (context == NULL)
{
_dbus_test_not_ok ("%s:%s - bus_context_new_test() failed",
@ -5036,37 +5040,41 @@ bus_dispatch_test_conf_fail (const DBusString *test_data_dir,
}
#endif
dbus_bool_t
bus_dispatch_test (const char *test_data_dir_cstr)
{
DBusString test_data_dir;
_dbus_string_init_const (&test_data_dir, test_data_dir_cstr);
#ifdef ENABLE_TRADITIONAL_ACTIVATION
/* run normal activation tests */
_dbus_verbose ("Normal activation tests\n");
if (!bus_dispatch_test_conf (&test_data_dir,
"valid-config-files/debug-allow-all.conf", FALSE))
dbus_bool_t
bus_test_normal_activation (const char *test_data_dir_cstr)
{
if (!bus_dispatch_test_conf (test_data_dir_cstr,
"valid-config-files/debug-allow-all.conf", FALSE))
return FALSE;
#ifndef DBUS_WIN
/* run launch-helper activation tests */
_dbus_verbose ("Launch helper activation tests\n");
if (!bus_dispatch_test_conf (&test_data_dir,
"valid-config-files-system/debug-allow-all-pass.conf", TRUE))
return FALSE;
/* run select launch-helper activation tests on broken service files */
if (!bus_dispatch_test_conf_fail (&test_data_dir,
"valid-config-files-system/debug-allow-all-fail.conf"))
return FALSE;
#endif
#endif
return TRUE;
}
#ifndef DBUS_WIN
dbus_bool_t
bus_test_helper_activation (const char *test_data_dir_cstr)
{
if (!bus_dispatch_test_conf (test_data_dir_cstr,
"valid-config-files-system/debug-allow-all-pass.conf", TRUE))
return FALSE;
return TRUE;
}
dbus_bool_t
bus_test_failed_helper_activation (const char *test_data_dir_cstr)
{
/* run select launch-helper activation tests on broken service files */
if (!bus_dispatch_test_conf_fail (test_data_dir_cstr,
"valid-config-files-system/debug-allow-all-fail.conf"))
return FALSE;
return TRUE;
}
#endif /* !DBUS_WIN */
#endif /* ENABLE_TRADITIONAL_ACTIVATION */
dbus_bool_t
bus_dispatch_sha1_test (const char *test_data_dir_cstr)
{

View file

@ -36,7 +36,9 @@
typedef dbus_bool_t (* BusConnectionForeachFunction) (DBusConnection *connection,
void *data);
dbus_bool_t bus_dispatch_test (const char *test_data_dir_cstr);
dbus_bool_t bus_test_normal_activation (const char *test_data_dir_cstr);
dbus_bool_t bus_test_helper_activation (const char *test_data_dir_cstr);
dbus_bool_t bus_test_failed_helper_activation (const char *test_data_dir_cstr);
dbus_bool_t bus_dispatch_sha1_test (const char *test_data_dir_cstr);
dbus_bool_t bus_config_parser_test (const char *test_data_dir_cstr);
dbus_bool_t bus_config_parser_trivial_test (const char *test_data_dir_cstr);

View file

@ -146,15 +146,18 @@ if(DBUS_ENABLE_EMBEDDED_TESTS)
add_test_executable(test-platform-mutex test-platform-mutex.c ${DBUS_INTERNAL_LIBRARIES} dbus-testutils)
set(SOURCES bus/main.c)
set(SOURCES bus/main.c bus/common.c bus/common.h)
add_test_executable(test-bus "${SOURCES}" dbus-daemon-internal dbus-testutils ${EXPAT_LIBRARIES})
set_target_properties(test-bus PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_CLIENT_DEFINITIONS})
set(SOURCES bus/dispatch.c)
add_test_executable(test-bus-dispatch "${SOURCES}" dbus-daemon-internal dbus-testutils ${EXPAT_LIBRARIES})
set_target_properties(test-bus-dispatch PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_CLIENT_DEFINITIONS})
if(ENABLE_TRADITIONAL_ACTIVATION)
set(SOURCES bus/normal-activation.c bus/common.c bus/common.h)
add_test_executable(test-bus-normal-activation "${SOURCES}" dbus-daemon-internal dbus-testutils ${EXPAT_LIBRARIES})
set_target_properties(test-bus-normal-activation PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_CLIENT_DEFINITIONS})
endif()
set(SOURCES bus/dispatch-sha1.c)
set(SOURCES bus/dispatch-sha1.c bus/common.c bus/common.h)
add_test_executable(test-bus-dispatch-sha1 "${SOURCES}" dbus-daemon-internal dbus-testutils ${EXPAT_LIBRARIES})
set_target_properties(test-bus-dispatch-sha1 PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_CLIENT_DEFINITIONS})
@ -163,6 +166,14 @@ if(DBUS_ENABLE_EMBEDDED_TESTS)
if(ENABLE_TRADITIONAL_ACTIVATION)
add_test_executable(test-bus-launch-helper-oom bus/launch-helper-oom.c launch-helper-internal dbus-testutils)
add_helper_executable(dbus-daemon-launch-helper-for-tests bus/launch-helper-for-tests.c launch-helper-internal)
set(SOURCES bus/failed-helper-activation.c bus/common.c bus/common.h)
add_test_executable(test-bus-failed-helper-activation "${SOURCES}" dbus-daemon-internal dbus-testutils ${EXPAT_LIBRARIES})
set_target_properties(test-bus-failed-helper-activation PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_CLIENT_DEFINITIONS})
set(SOURCES bus/helper-activation.c bus/common.c bus/common.h)
add_test_executable(test-bus-helper-activation "${SOURCES}" dbus-daemon-internal dbus-testutils ${EXPAT_LIBRARIES})
set_target_properties(test-bus-helper-activation PROPERTIES COMPILE_FLAGS ${DBUS_INTERNAL_CLIENT_DEFINITIONS})
endif()
endif()
endif()

View file

@ -87,16 +87,21 @@ endif
uninstallable_test_programs += \
test-platform-mutex \
test-bus \
test-bus-dispatch \
test-bus-dispatch-sha1 \
test-marshal-recursive \
test-message-internals \
$(NULL)
if ENABLE_TRADITIONAL_ACTIVATION
uninstallable_test_programs += test-normal-activation
endif
if DBUS_UNIX
if ENABLE_TRADITIONAL_ACTIVATION
uninstallable_test_programs += test-bus-launch-helper-oom
uninstallable_test_programs += test-bus-system
uninstallable_test_programs += test-failed-helper-activation
uninstallable_test_programs += test-helper-activation
# this is used by the tests but is not, itself, a test
TEST_BINARIES += dbus-daemon-launch-helper-for-tests
endif ENABLE_TRADITIONAL_ACTIVATION
@ -199,19 +204,13 @@ test_bus_system_LDADD = \
libdbus-testutils.la \
$(NULL)
test_bus_SOURCES = bus/main.c
test_bus_SOURCES = bus/main.c bus/common.c bus/common.h
test_bus_LDADD = \
$(top_builddir)/bus/libdbus-daemon-internal.la \
libdbus-testutils.la \
$(NULL)
test_bus_dispatch_SOURCES = bus/dispatch.c
test_bus_dispatch_LDADD = \
$(top_builddir)/bus/libdbus-daemon-internal.la \
libdbus-testutils.la \
$(NULL)
test_bus_dispatch_sha1_SOURCES = bus/dispatch-sha1.c
test_bus_dispatch_sha1_SOURCES = bus/dispatch-sha1.c bus/common.c bus/common.h
test_bus_dispatch_sha1_LDADD = \
$(top_builddir)/bus/libdbus-daemon-internal.la \
libdbus-testutils.la \
@ -220,6 +219,26 @@ test_bus_dispatch_sha1_LDADD = \
test_hash_SOURCES = internals/hash.c
test_hash_LDADD = libdbus-testutils.la
test_failed_helper_activation_SOURCES = \
bus/failed-helper-activation.c \
bus/common.c \
bus/common.h \
$(NULL)
test_failed_helper_activation_LDADD = \
$(top_builddir)/bus/libdbus-daemon-internal.la \
libdbus-testutils.la \
$(NULL)
test_helper_activation_SOURCES = \
bus/helper-activation.c \
bus/common.c \
bus/common.h \
$(NULL)
test_helper_activation_LDADD = \
$(top_builddir)/bus/libdbus-daemon-internal.la \
libdbus-testutils.la \
$(NULL)
test_marshal_recursive_SOURCES = \
internals/dbus-marshal-recursive-util.c \
internals/dbus-marshal-recursive-util.h \
@ -257,6 +276,16 @@ test_misc_internals_SOURCES = \
$(NULL)
test_misc_internals_LDADD = libdbus-testutils.la
test_normal_activation_SOURCES = \
bus/normal-activation.c \
bus/common.c \
bus/common.h \
$(NULL)
test_normal_activation_LDADD = \
$(top_builddir)/bus/libdbus-daemon-internal.la \
libdbus-testutils.la \
$(NULL)
test_platform_mutex_SOURCES = test-platform-mutex.c
test_platform_mutex_LDADD = \
$(top_builddir)/dbus/libdbus-internal.la \

View file

@ -1,7 +1,8 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright 2003-2009 Red Hat, Inc.
* Copyright 2011-2018 Collabora Ltd.
* Copyright 2011-2022 Collabora Ltd.
* SPDX-License-Identifier: AFL-2.1 or GPL-2-or-later
*
* Licensed under the Academic Free License version 2.1
*
@ -18,17 +19,14 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#include <config.h>
#include "bus/test.h"
#include <dbus/dbus-test-tap.h>
#include "bus/audit.h"
#include "bus/selinux.h"
#include "test/bus/common.h"
#include "test/test-utils.h"
#ifndef DBUS_ENABLE_EMBEDDED_TESTS
@ -49,12 +47,13 @@ test_post_hook (void)
bus_audit_shutdown ();
}
static DBusTestCase test = { "dispatch", bus_dispatch_test };
int
main (int argc, char **argv)
bus_test_main (int argc,
char **argv,
size_t n_tests,
const DBusTestCase *tests)
{
return _dbus_test_main (argc, argv, 1, &test,
return _dbus_test_main (argc, argv, n_tests, tests,
(DBUS_TEST_FLAGS_CHECK_MEMORY_LEAKS |
DBUS_TEST_FLAGS_CHECK_FD_LEAKS |
DBUS_TEST_FLAGS_REQUIRE_DATA),

21
test/bus/common.h Normal file
View file

@ -0,0 +1,21 @@
/*
* Copyright 2022 Collabora Ltd.
* SPDX-License-Identifier: MIT
*/
#ifndef TEST_BUS_COMMON_H
#define TEST_BUS_COMMON_H
#ifndef DBUS_ENABLE_EMBEDDED_TESTS
#error This file is only relevant for the embedded tests
#endif
#include "bus/test.h"
#include "test/test-utils.h"
int bus_test_main (int argc,
char **argv,
size_t n_tests,
const DBusTestCase *tests);
#endif

View file

@ -22,41 +22,12 @@
*/
#include <config.h>
#include "bus/test.h"
#include <dbus/dbus-test-tap.h>
#include "bus/audit.h"
#include "bus/selinux.h"
#include "test/test-utils.h"
#ifndef DBUS_ENABLE_EMBEDDED_TESTS
#error This file is only relevant for the embedded tests
#endif
static void
test_pre_hook (void)
{
}
static void
test_post_hook (void)
{
if (_dbus_getenv ("DBUS_TEST_SELINUX"))
bus_selinux_shutdown ();
bus_audit_shutdown ();
}
#include "test/bus/common.h"
static DBusTestCase test = { "dispatch-sha1", bus_dispatch_sha1_test };
int
main (int argc, char **argv)
{
return _dbus_test_main (argc, argv, 1, &test,
(DBUS_TEST_FLAGS_CHECK_MEMORY_LEAKS |
DBUS_TEST_FLAGS_CHECK_FD_LEAKS |
DBUS_TEST_FLAGS_REQUIRE_DATA),
test_pre_hook, test_post_hook);
return bus_test_main (argc, argv, 1, &test);
}

View file

@ -0,0 +1,37 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright 2003-2009 Red Hat, Inc.
* Copyright 2011-2018 Collabora Ltd.
*
* Licensed under the Academic Free License version 2.1
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#include <config.h>
#include "test/bus/common.h"
static DBusTestCase test =
{
"failed-helper-activation",
bus_test_failed_helper_activation
};
int
main (int argc, char **argv)
{
return bus_test_main (argc, argv, 1, &test);
}

View file

@ -0,0 +1,33 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright 2003-2009 Red Hat, Inc.
* Copyright 2011-2018 Collabora Ltd.
*
* Licensed under the Academic Free License version 2.1
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#include <config.h>
#include "test/bus/common.h"
static DBusTestCase test = { "helper-activation", bus_test_helper_activation };
int
main (int argc, char **argv)
{
return bus_test_main (argc, argv, 1, &test);
}

View file

@ -23,32 +23,7 @@
*/
#include <config.h>
#include "bus/test.h"
#include <dbus/dbus-test-tap.h>
#include "bus/audit.h"
#include "bus/selinux.h"
#include "test/test-utils.h"
#ifndef DBUS_ENABLE_EMBEDDED_TESTS
#error This file is only relevant for the embedded tests
#endif
static void
test_pre_hook (void)
{
}
static void
test_post_hook (void)
{
if (_dbus_getenv ("DBUS_TEST_SELINUX"))
bus_selinux_shutdown ();
bus_audit_shutdown ();
}
#include "test/bus/common.h"
static DBusTestCase tests[] =
{
@ -63,9 +38,5 @@ static DBusTestCase tests[] =
int
main (int argc, char **argv)
{
return _dbus_test_main (argc, argv, _DBUS_N_ELEMENTS (tests), tests,
(DBUS_TEST_FLAGS_CHECK_MEMORY_LEAKS |
DBUS_TEST_FLAGS_CHECK_FD_LEAKS |
DBUS_TEST_FLAGS_REQUIRE_DATA),
test_pre_hook, test_post_hook);
return bus_test_main (argc, argv, _DBUS_N_ELEMENTS (tests), tests);
}

View file

@ -0,0 +1,33 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright 2003-2009 Red Hat, Inc.
* Copyright 2011-2018 Collabora Ltd.
*
* Licensed under the Academic Free License version 2.1
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#include <config.h>
#include "test/bus/common.h"
static DBusTestCase test = { "normal-activation", bus_test_normal_activation };
int
main (int argc, char **argv)
{
return bus_test_main (argc, argv, 1, &test);
}

View file

@ -230,25 +230,17 @@ if embedded_tests
tests += [
{
'name': 'bus',
'srcs': [ 'bus/main.c' ],
'srcs': [ 'bus/main.c', 'bus/common.c' ],
'link': [ libdbus_testutils, libdbus_daemon_internal, ],
'install': false,
},
{
'name': 'bus-dispatch-sha1',
'srcs': [ 'bus/dispatch-sha1.c' ],
'srcs': [ 'bus/dispatch-sha1.c', 'bus/common.c' ],
'link': [ libdbus_testutils, libdbus_daemon_internal, ],
'install': false,
'suite': ['slow'],
},
{
'name': 'bus-dispatch',
'srcs': [ 'bus/dispatch.c' ],
'link': [ libdbus_testutils, libdbus_daemon_internal, ],
'install': false,
'suite': ['slow'],
'timeout': 3000,
},
{
'name': 'marshal-recursive',
'srcs': [
@ -273,8 +265,35 @@ if embedded_tests
},
]
if use_traditional_activation
tests += [
{
'name': 'bus-normal-activation',
'srcs': [ 'bus/normal-activation.c', 'bus/common.c' ],
'link': [ libdbus_testutils, libdbus_daemon_internal, ],
'install': false,
'suite': ['slow'],
'timeout': 1000,
},
]
endif
if use_traditional_activation and platform_unix
tests += [
{
'name': 'bus-failed-helper-activation',
'srcs': [ 'bus/failed-helper-activation.c', 'bus/common.c' ],
'link': [ libdbus_testutils, libdbus_daemon_internal, ],
'install': false,
},
{
'name': 'bus-helper-activation',
'srcs': [ 'bus/helper-activation.c', 'bus/common.c' ],
'link': [ libdbus_testutils, libdbus_daemon_internal, ],
'install': false,
'suite': ['slow'],
'timeout': 1000,
},
{
'name': 'bus-launch-helper-oom',
'srcs': [ 'bus/launch-helper-oom.c' ],