X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test%2Fduplicate.c;h=df9f86be1afd704fe16c45b36b07f53df34f7fc5;hb=6b125b5b68e2657eae9b36f23d7f569fb9e49f8d;hp=fdb4c12e78203c2660abf9e447d119fc1fec6a6c;hpb=a0b633156ddb653ac7f1cc809a1ba6cf86a928e1;p=meshlink diff --git a/test/duplicate.c b/test/duplicate.c index fdb4c12e..df9f86be 100644 --- a/test/duplicate.c +++ b/test/duplicate.c @@ -1,21 +1,28 @@ +#ifdef NDEBUG +#undef NDEBUG +#endif + #include #include #include #include -#include +#include #include "meshlink.h" +#include "utils.h" -static volatile bool duplicate_detected; +static struct sync_flag duplicate_detected; static void handle_duplicate(meshlink_handle_t *mesh, meshlink_node_t *node) { - meshlink_node_t *self = meshlink_get_self(mesh); - fprintf(stderr, "%s: detected duplicate node %s\n", self->name, node->name); - duplicate_detected = true; - meshlink_blacklist(mesh, node); + set_sync_flag(&duplicate_detected, true); + assert(meshlink_blacklist(mesh, node)); } -int main() { +int main(void) { + init_sync_flag(&duplicate_detected); + + meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); + // Open meshlink instances static const char *name[4] = {"foo", "bar", "baz", "foo"}; @@ -25,14 +32,11 @@ int main() { char dirname[100]; snprintf(dirname, sizeof dirname, "duplicate_conf.%d", i); + assert(meshlink_destroy(dirname)); mesh[i] = meshlink_open(dirname, name[i], "duplicate", DEV_CLASS_BACKBONE); + assert(mesh[i]); - if(!mesh[i]) { - fprintf(stderr, "Could not initialize configuration for node %d\n", i); - return 1; - } - - meshlink_add_address(mesh[i], "localhost"); + assert(meshlink_set_canonical_address(mesh[i], meshlink_get_self(mesh[i]), "localhost", NULL)); meshlink_enable_discovery(mesh[i], false); meshlink_set_node_duplicate_cb(mesh[i], handle_duplicate); @@ -44,11 +48,12 @@ int main() { for(int i = 0; i < 4; i++) { data[i] = meshlink_export(mesh[i]); + assert(data[i]); } for(int i = 0; i < 3; i++) { - meshlink_import(mesh[i], data[i + 1]); - meshlink_import(mesh[i + 1], data[i]); + assert(meshlink_import(mesh[i], data[i + 1])); + assert(meshlink_import(mesh[i + 1], data[i])); } for(int i = 0; i < 4; i++) { @@ -58,32 +63,16 @@ int main() { // Start the meshes for(int i = 0; i < 4; i++) { - if(!meshlink_start(mesh[i])) { - fprintf(stderr, "Could not start mesh %d\n", i); - return 1; - } + assert(meshlink_start(mesh[i])); } // Wait for the duplicate node to be detected - for(int i = 0; i < 20; i++) { - sleep(1); - - if(duplicate_detected) { - break; - } - } - - if(!duplicate_detected) { - fprintf(stderr, "Failed to detect duplicate node after 20 seconds\n"); - return 1; - } + assert(wait_sync_flag(&duplicate_detected, 20)); // Clean up for(int i = 0; i < 4; i++) { meshlink_close(mesh[i]); } - - return 0; }