X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Ftest-bus-chat.c;h=459d39fdee5070664fc6f1103b621c2d6a9debff;hb=7989e1f2d79891ff73dea0ede1c98c47b62547db;hp=bdcca18c84f808639e39c00374b5a75aa52165b7;hpb=2c93b4efeca3ccf38d604d85490b796e875e2c31;p=elogind.git diff --git a/src/libsystemd-bus/test-bus-chat.c b/src/libsystemd-bus/test-bus-chat.c index bdcca18c8..459d39fde 100644 --- a/src/libsystemd-bus/test-bus-chat.c +++ b/src/libsystemd-bus/test-bus-chat.c @@ -27,10 +27,18 @@ #include "log.h" #include "util.h" +#include "macro.h" #include "sd-bus.h" #include "bus-message.h" #include "bus-error.h" +#include "bus-match.h" +#include "bus-internal.h" + +static int match_callback(sd_bus *bus, int error, sd_bus_message *m, void *userdata) { + log_info("Match triggered! interface=%s member=%s", strna(sd_bus_message_get_interface(m)), strna(sd_bus_message_get_member(m))); + return 0; +} static int object_callback(sd_bus *bus, int error, sd_bus_message *m, void *userdata) { int r; @@ -77,9 +85,9 @@ static int server_init(sd_bus **_bus) { goto fail; } - r = sd_bus_get_peer(bus, &id); + r = sd_bus_get_server_id(bus, &id); if (r < 0) { - log_error("Failed to get peer ID: %s", strerror(-r)); + log_error("Failed to get server ID: %s", strerror(-r)); goto fail; } @@ -105,6 +113,20 @@ static int server_init(sd_bus **_bus) { goto fail; } + r = sd_bus_add_match(bus, "type='signal',interface='foo.bar',member='Notify'", match_callback, NULL); + if (r < 0) { + log_error("Failed to add match: %s", strerror(-r)); + goto fail; + } + + r = sd_bus_add_match(bus, "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'", match_callback, NULL); + if (r < 0) { + log_error("Failed to add match: %s", strerror(-r)); + goto fail; + } + + bus_match_dump(&bus->match_callbacks, 0); + *_bus = bus; return 0; @@ -423,6 +445,26 @@ static void* client2(void*p) { sd_bus_message_unref(m); m = NULL; + r = sd_bus_message_new_signal( + bus, + "/foobar", + "foo.bar", + "Notify", + &m); + if (r < 0) { + log_error("Failed to allocate signal: %s", strerror(-r)); + goto finish; + } + + r = sd_bus_send(bus, m, NULL); + if (r < 0) { + log_error("Failed to issue signal: %s", bus_error_message(&error, -r)); + goto finish; + } + + sd_bus_message_unref(m); + m = NULL; + r = sd_bus_message_new_method_call( bus, "org.freedesktop.systemd.test", @@ -543,8 +585,10 @@ int main(int argc, char *argv[]) { int q, r; r = server_init(&bus); - if (r < 0) - return EXIT_FAILURE; + if (r < 0) { + log_info("Failed to connect to bus, skipping tests."); + return EXIT_TEST_SKIP; + } log_info("Initialized..."); @@ -561,9 +605,15 @@ int main(int argc, char *argv[]) { q = pthread_join(c1, &p); if (q != 0) return EXIT_FAILURE; + if (PTR_TO_INT(p) < 0) + return EXIT_FAILURE; + q = pthread_join(c2, &p); if (q != 0) return EXIT_FAILURE; + if (PTR_TO_INT(p) < 0) + return EXIT_FAILURE; + if (r < 0) return EXIT_FAILURE;