X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test%2Finvite-join.c;fp=test%2Finvite-join.c;h=bf3800e39ea4ffdbc86080f8aa11f7a1d1c40ba6;hb=c2b5ef48a8433db03569f621a431857d06fe1d85;hp=0000000000000000000000000000000000000000;hpb=132c36964b2538409bbbd0b3d43386d9077a5e07;p=meshlink diff --git a/test/invite-join.c b/test/invite-join.c new file mode 100644 index 00000000..bf3800e3 --- /dev/null +++ b/test/invite-join.c @@ -0,0 +1,66 @@ +#include +#include +#include + +#include "meshlink.h" + +volatile bool baz_reachable = false; + +void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { + if(!strcmp(node->name, "baz")) + baz_reachable = reachable; +} + +int main(int argc, char *argv[]) { + // Open two new meshlink instance. + + meshlink_handle_t *mesh1 = meshlink_open("invite_join_conf.1", "foo"); + if(!mesh1) + return 1; + + meshlink_handle_t *mesh2 = meshlink_open("invite_join_conf.2", "bar"); + if(!mesh2) + return 1; + + // Start the first instance and have it generate an invitation. + + meshlink_set_node_status_cb(mesh1, status_cb); + + if(!meshlink_start(mesh1)) + return 1; + + meshlink_add_address(mesh1, "localhost"); + char *url = meshlink_invite(mesh1, "baz"); + if(!url) + return 1; + + // Have the second instance join the first. + + if(!meshlink_join(mesh2, url)) + return 1; + + free(url); + + if(!meshlink_start(mesh2)) + return 1; + + // Wait for the two to connect. + + for(int i = 0; i < 20; i++) { + sleep(1); + if(baz_reachable) + break; + } + + if(!baz_reachable) + return 1; + + // Clean up. + + meshlink_stop(mesh2); + meshlink_stop(mesh1); + meshlink_close(mesh2); + meshlink_close(mesh1); + + return 0; +}