X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test%2Fchannels-fork.c;h=38ae9b19e19bdfbf0990c15e4c96d4d7e1d33544;hb=4b6c01b1d5383b1a7417244a31ad4652aab2d5db;hp=e0db621aee94b55ab2472c87a39ddce6dc1d1821;hpb=9a2520c36431a8a5fd90451e97f488c22f4decc5;p=meshlink diff --git a/test/channels-fork.c b/test/channels-fork.c index e0db621a..38ae9b19 100644 --- a/test/channels-fork.c +++ b/test/channels-fork.c @@ -1,4 +1,9 @@ #define _GNU_SOURCE 1 + +#ifdef NDEBUG +#undef NDEBUG +#endif + #include #include #include @@ -16,6 +21,7 @@ #include "../src/meshlink.h" static struct sync_flag bar_responded; +static struct sync_flag foo_connected; static struct sync_flag foo_gone; static void foo_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { @@ -39,7 +45,7 @@ static void bar_status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool r static void bar_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { // Echo the data back. if(len) { - meshlink_channel_send(mesh, channel, data, len); + assert(meshlink_channel_send(mesh, channel, data, len) == (ssize_t)len); } else { meshlink_channel_close(mesh, channel); } @@ -62,6 +68,7 @@ static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint meshlink_set_node_status_cb(mesh, bar_status_cb); meshlink_set_channel_receive_cb(mesh, channel, bar_receive_cb); + set_sync_flag(&foo_connected, true); if(data) { bar_receive_cb(mesh, channel, data, len); @@ -84,12 +91,12 @@ static int main1(int rfd, int wfd) { meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); assert(meshlink_destroy("channels_fork_conf.1")); - meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.1", "foo", "channels", DEV_CLASS_BACKBONE); + meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.1", "foo", "channels-fork", DEV_CLASS_BACKBONE); assert(mesh); meshlink_enable_discovery(mesh, false); - meshlink_add_address(mesh, "localhost"); + assert(meshlink_set_canonical_address(mesh, meshlink_get_self(mesh), "localhost", NULL)); char *data = meshlink_export(mesh); assert(data); @@ -140,12 +147,12 @@ static int main2(int rfd, int wfd) { meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); assert(meshlink_destroy("channels_fork_conf.2")); - meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.2", "bar", "channels", DEV_CLASS_BACKBONE); + meshlink_handle_t *mesh = meshlink_open("channels_fork_conf.2", "bar", "channels-fork", DEV_CLASS_BACKBONE); assert(mesh); meshlink_enable_discovery(mesh, false); - meshlink_add_address(mesh, "localhost"); + assert(meshlink_set_canonical_address(mesh, meshlink_get_self(mesh), "localhost", NULL)); char *data = meshlink_export(mesh); assert(data); @@ -166,6 +173,7 @@ static int main2(int rfd, int wfd) { assert(meshlink_start(mesh)); + assert(wait_sync_flag(&foo_connected, 20)); assert(wait_sync_flag(&foo_gone, 20)); meshlink_close(mesh); @@ -178,11 +186,15 @@ static void alarm_handler(int sig) { assert(0); } -int main() { +int main(void) { + init_sync_flag(&bar_responded); + init_sync_flag(&foo_connected); + init_sync_flag(&foo_gone); + int fda[2], fdb[2]; - assert(pipe2(fda, 0) != -1); - assert(pipe2(fdb, 0) != -1); + assert(pipe(fda) != -1); + assert(pipe(fdb) != -1); if(!fork()) { return main2(fdb[0], fda[1]);