X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=test%2Fport.c;fp=test%2Fport.c;h=cd24f3458caf313fcabfba29cf5d50aad75881c8;hp=0000000000000000000000000000000000000000;hb=8d7deb258ba8311c87b3c501d71c847da2ddd747;hpb=22cdfa47418f42bde9e51bfbc864f2aefc05667e diff --git a/test/port.c b/test/port.c new file mode 100644 index 00000000..cd24f345 --- /dev/null +++ b/test/port.c @@ -0,0 +1,67 @@ +#ifdef NDEBUG +#undef NDEBUG +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "meshlink.h" +#include "devtools.h" +#include "utils.h" + + +int main(void) { + meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); + + meshlink_handle_t *mesh1; + meshlink_handle_t *mesh2; + + // Open two instances + + assert(meshlink_destroy("port_conf.1")); + assert(meshlink_destroy("port_conf.2")); + + mesh1 = meshlink_open("port_conf.1", "foo", "port", DEV_CLASS_BACKBONE); + mesh2 = meshlink_open("port_conf.2", "bar", "port", DEV_CLASS_BACKBONE); + + assert(mesh1); + assert(mesh2); + + meshlink_enable_discovery(mesh1, false); + meshlink_enable_discovery(mesh2, false); + + int port1 = meshlink_get_port(mesh1); + int port2 = meshlink_get_port(mesh2); + assert(port1); + assert(port2); + assert(port1 != port2); + + // bar cannot take foo's port if foo is still open + assert(!meshlink_set_port(mesh2, port1)); + + // bar can take foo's port of foo is closed + meshlink_close(mesh1); + + assert(meshlink_set_port(mesh2, port1)); + assert(meshlink_get_port(mesh2) == port1); + + // foo can open but will now use a different port + mesh1 = meshlink_open("port_conf.1", "foo", "port", DEV_CLASS_BACKBONE); + assert(mesh1); + int port1b = meshlink_get_port(mesh1); + assert(port1b); + assert(port1b != port1); + + assert(!meshlink_set_port(mesh1, port1)); + + // foo can take over bar's old port + assert(meshlink_set_port(mesh1, port2)); + + meshlink_close(mesh1); + meshlink_close(mesh2); +}