X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=test%2Fduplicate.c;h=7905bb5384310edeae4f4d004bd816a60452a6a4;hp=fdb4c12e78203c2660abf9e447d119fc1fec6a6c;hb=9a2520c36431a8a5fd90451e97f488c22f4decc5;hpb=ea20fcfcded669ce8fbbda3a1f93f354ed254603 diff --git a/test/duplicate.c b/test/duplicate.c index fdb4c12e..7905bb53 100644 --- a/test/duplicate.c +++ b/test/duplicate.c @@ -2,20 +2,21 @@ #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; + set_sync_flag(&duplicate_detected, true); meshlink_blacklist(mesh, node); } int main() { + meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb); + // Open meshlink instances static const char *name[4] = {"foo", "bar", "baz", "foo"}; @@ -25,12 +26,9 @@ 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); - - if(!mesh[i]) { - fprintf(stderr, "Could not initialize configuration for node %d\n", i); - return 1; - } + assert(mesh[i]); meshlink_add_address(mesh[i], "localhost"); meshlink_enable_discovery(mesh[i], false); @@ -44,11 +42,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 +57,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; }