1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-27 01:55:22 +03:00

test-bus-util: add a simple test for bus_request_name_async_may_reload_dbus()

This shows a minor memleak:
==1883== 24 bytes in 1 blocks are definitely lost in loss record 1 of 1
==1883==    at 0x4C2DBAB: malloc (vg_replace_malloc.c:299)
==1883==    by 0x4E9D385: malloc_multiply (alloc-util.h:69)
==1883==    by 0x4EA2959: bus_request_name_async_may_reload_dbus (bus-util.c:1841)
==1883==    by ...

The exchange of messages is truncated at two different points: once right
after the first callback is requested, and the second time after the full
sequence has run (usually resulting in an error because of policy).
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2018-06-04 15:15:17 +02:00
parent 83b6c1a6b1
commit 24924cc959
2 changed files with 51 additions and 0 deletions

View File

@ -656,6 +656,10 @@ tests += [
'src/core/umount.h'],
[],
[libmount]],
[['src/test/test-bus-util.c'],
[],
[]],
]
############################################################

47
src/test/test-bus-util.c Normal file
View File

@ -0,0 +1,47 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "bus-util.h"
#include "log.h"
static void test_name_async(unsigned n_messages) {
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
int r;
unsigned i;
log_info("/* %s (%u) */", __func__, n_messages);
r = bus_open_system_watch_bind_with_description(&bus, "test-bus");
if (r < 0) {
log_error_errno(r, "Failed to connect to bus: %m");
return;
}
r = bus_request_name_async_may_reload_dbus(bus, NULL, "org.freedesktop.systemd.test-bus-util", 0, NULL);
if (r < 0) {
log_error_errno(r, "Failed to request name: %m");
return;
}
for (i = 0; i < n_messages; i++) {
r = sd_bus_process(bus, NULL);
log_debug("stage %u: sd_bus_process returned %d", i, r);
if (r < 0) {
log_notice_errno(r, "Processing failed: %m");
return;
}
if (r > 0 && i + 1 < n_messages)
(void) sd_bus_wait(bus, USEC_PER_SEC / 3);
}
}
int main(int argc, char **argv) {
log_set_max_level(LOG_DEBUG);
log_parse_environment();
log_open();
test_name_async(0);
test_name_async(20);
return 0;
}