]>
git.proxmox.com Git - systemd.git/blob - src/libsystemd/sd-bus/test-bus-track.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
4 #include <sys/socket.h>
11 static bool track_cb_called_x
= false;
12 static bool track_cb_called_y
= false;
14 static int track_cb_x(sd_bus_track
*t
, void *userdata
) {
16 log_error("TRACK CB X");
18 assert_se(!track_cb_called_x
);
19 track_cb_called_x
= true;
21 /* This means b's name disappeared. Let's now disconnect, to make sure the track handling on disconnect works
24 assert_se(shutdown(sd_bus_get_fd(sd_bus_track_get_bus(t
)), SHUT_RDWR
) >= 0);
28 static int track_cb_y(sd_bus_track
*t
, void *userdata
) {
31 log_error("TRACK CB Y");
33 assert_se(!track_cb_called_y
);
34 track_cb_called_y
= true;
36 /* We got disconnected, let's close everything */
38 r
= sd_event_exit(sd_bus_get_event(sd_bus_track_get_bus(t
)), EXIT_SUCCESS
);
44 int main(int argc
, char *argv
[]) {
45 _cleanup_(sd_event_unrefp
) sd_event
*event
= NULL
;
46 _cleanup_(sd_bus_track_unrefp
) sd_bus_track
*x
= NULL
, *y
= NULL
;
47 _cleanup_(sd_bus_unrefp
) sd_bus
*a
= NULL
, *b
= NULL
;
48 bool use_system_bus
= false;
52 test_setup_logging(LOG_INFO
);
54 r
= sd_event_default(&event
);
57 r
= sd_bus_open_user(&a
);
58 if (IN_SET(r
, -ECONNREFUSED
, -ENOENT
)) {
59 r
= sd_bus_open_system(&a
);
60 if (IN_SET(r
, -ECONNREFUSED
, -ENOENT
))
61 return log_tests_skipped("Failed to connect to bus");
62 use_system_bus
= true;
66 r
= sd_bus_attach_event(a
, event
, SD_EVENT_PRIORITY_NORMAL
);
70 r
= sd_bus_open_system(&b
);
72 r
= sd_bus_open_user(&b
);
75 r
= sd_bus_attach_event(b
, event
, SD_EVENT_PRIORITY_NORMAL
);
78 /* Watch b's name from a */
79 r
= sd_bus_track_new(a
, &x
, track_cb_x
, NULL
);
82 r
= sd_bus_get_unique_name(b
, &unique
);
85 r
= sd_bus_track_add_name(x
, unique
);
88 /* Watch's a's own name from a */
89 r
= sd_bus_track_new(a
, &y
, track_cb_y
, NULL
);
92 r
= sd_bus_get_unique_name(a
, &unique
);
95 r
= sd_bus_track_add_name(y
, unique
);
98 /* Now make b's name disappear */
101 r
= sd_event_loop(event
);
104 assert_se(track_cb_called_x
);
105 assert_se(track_cb_called_y
);