X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=test%2Futils.c;h=53f83d30fb44a6ac21bea13a904ebd0039e3a0f0;hb=HEAD;hp=c526ff0ddbcd7d17ecbf59305f18a7d05544484a;hpb=6b125b5b68e2657eae9b36f23d7f569fb9e49f8d;p=meshlink diff --git a/test/utils.c b/test/utils.c index c526ff0d..872060b1 100644 --- a/test/utils.c +++ b/test/utils.c @@ -1,4 +1,4 @@ -#define _GNU_SOURCE 1 +#define _GNU_SOURCE #ifdef NDEBUG #undef NDEBUG @@ -16,6 +16,7 @@ void init_sync_flag(struct sync_flag *s) { assert(pthread_mutex_init(&s->mutex, NULL) == 0); assert(pthread_cond_init(&s->cond, NULL) == 0); + s->flag = false; } void set_sync_flag(struct sync_flag *s, bool value) { @@ -25,6 +26,12 @@ void set_sync_flag(struct sync_flag *s, bool value) { assert(pthread_mutex_unlock(&s->mutex) == 0); } +void reset_sync_flag(struct sync_flag *s) { + assert(pthread_mutex_lock(&s->mutex) == 0); + s->flag = false; + assert(pthread_mutex_unlock(&s->mutex) == 0); +} + bool check_sync_flag(struct sync_flag *s) { bool flag; assert(pthread_mutex_lock(&s->mutex) == 0); @@ -102,11 +109,31 @@ void open_meshlink_pair(meshlink_handle_t **pa, meshlink_handle_t **pb, const ch *pb = b; } +void open_meshlink_pair_ephemeral(meshlink_handle_t **pa, meshlink_handle_t **pb, const char *prefix) { + // Create two new MeshLink instances + + *pa = *pb = NULL; + + meshlink_handle_t *a = meshlink_open_ephemeral("a", prefix, DEV_CLASS_BACKBONE); + meshlink_handle_t *b = meshlink_open_ephemeral("b", prefix, DEV_CLASS_BACKBONE); + + assert(a); + assert(b); + + meshlink_enable_discovery(a, false); + meshlink_enable_discovery(b, false); + + link_meshlink_pair(a, b); + + *pa = a; + *pb = b; +} + // Don't poll in the application thread, use a condition variable to signal when the peer is online. static void pair_status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { (void)node; - if(reachable) { + if(reachable && meshlink_get_self(mesh) != node) { set_sync_flag(mesh->priv, true); } }