X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test%2Fimport-export.c;h=15e213447eedd211f643aba6a2608e9939db7aef;hb=4b6c01b1d5383b1a7417244a31ad4652aab2d5db;hp=b3d52da674599bbec7da4122a6770e800018ec41;hpb=9a2520c36431a8a5fd90451e97f488c22f4decc5;p=meshlink diff --git a/test/import-export.c b/test/import-export.c index b3d52da6..15e21344 100644 --- a/test/import-export.c +++ b/test/import-export.c @@ -1,3 +1,7 @@ +#ifdef NDEBUG +#undef NDEBUG +#endif + #include #include #include @@ -8,9 +12,9 @@ #include "meshlink.h" #include "utils.h" -struct sync_flag bar_reachable; +static struct sync_flag bar_reachable; -void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { +static void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { (void)mesh; if(reachable && !strcmp(node->name, "bar")) { @@ -18,7 +22,9 @@ void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { } } -int main() { +int main(void) { + init_sync_flag(&bar_reachable); + meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); // Open two new meshlink instance. @@ -39,8 +45,8 @@ int main() { // Import and export both side's data - meshlink_add_address(mesh1, "localhost"); - meshlink_add_address(mesh2, "localhost"); + assert(meshlink_set_canonical_address(mesh1, meshlink_get_self(mesh1), "localhost", NULL)); + assert(meshlink_set_canonical_address(mesh2, meshlink_get_self(mesh2), "localhost", NULL)); char *data = meshlink_export(mesh1); assert(data); @@ -51,9 +57,25 @@ int main() { data = meshlink_export(mesh2); assert(data); + assert(meshlink_import(mesh1, data)); + + // Check that importing twice is fine assert(meshlink_import(mesh1, data)); free(data); + // Check that importing garbage is not fine + assert(!meshlink_import(mesh1, "Garbage\n")); + + // Check that foo knows bar, but that it is not reachable. + + time_t last_reachable; + time_t last_unreachable; + meshlink_node_t *bar = meshlink_get_node(mesh1, "bar"); + assert(bar); + assert(!meshlink_get_node_reachability(mesh1, bar, &last_reachable, &last_unreachable)); + assert(!last_reachable); + assert(!last_unreachable); + // Start both instances meshlink_set_node_status_cb(mesh1, status_cb); @@ -76,6 +98,24 @@ int main() { assert(pmtu); + // Check that we now have reachability information + + assert(meshlink_get_node_reachability(mesh1, bar, &last_reachable, &last_unreachable)); + assert(last_reachable); + assert(!last_unreachable); + + // Stop the meshes. + + meshlink_stop(mesh1); + meshlink_stop(mesh2); + + // Check that bar is no longer reachable + + assert(!meshlink_get_node_reachability(mesh1, bar, &last_reachable, &last_unreachable)); + assert(last_reachable); + assert(last_unreachable); + assert(last_reachable <= last_unreachable); + // Clean up. meshlink_close(mesh2);