]> git.meshlink.io Git - meshlink-tiny/blob - test/utils.h
Add support for devtool_reset_node_counters to the full MeshLink shim.
[meshlink-tiny] / test / utils.h
1 #ifndef MESHLINK_TEST_UTILS_H
2 #define MESHLINK_TEST_UTILS_H
3
4 #include <assert.h>
5 #include <time.h>
6 #include <pthread.h>
7
8 #include "../src/meshlink-tiny.h"
9
10 // Simple synchronisation between threads
11 struct sync_flag {
12         pthread_mutex_t mutex;
13         pthread_cond_t cond;
14         bool flag;
15 };
16
17 extern void init_sync_flag(struct sync_flag *s);
18 extern void set_sync_flag(struct sync_flag *s, bool value);
19 extern void reset_sync_flag(struct sync_flag *s);
20 extern bool check_sync_flag(struct sync_flag *s);
21 extern bool wait_sync_flag(struct sync_flag *s, int seconds);
22
23 /// Create a pair of meshlink instances that are already joined together.
24 extern void open_meshlink_pair(meshlink_handle_t **a, meshlink_handle_t **b, const char *prefix);
25 extern void open_meshlink_pair_ephemeral(meshlink_handle_t **a, meshlink_handle_t **b, const char *prefix);
26
27 /// Start a pair of meshlink instances and wait for them to connect together.
28 extern void start_meshlink_pair(meshlink_handle_t *a, meshlink_handle_t *b);
29 extern void start_full_tiny_pair(meshlink_handle_t *a, meshlink_handle_t *b);
30
31 /// Stop a pair of meshlink instances.
32 extern void stop_meshlink_pair(meshlink_handle_t *a, meshlink_handle_t *b);
33 extern void stop_full_tiny_pair(meshlink_handle_t *a, meshlink_handle_t *b);
34
35 /// Stop and cleanup a pair of meshlink instances.
36 extern void close_meshlink_pair(meshlink_handle_t *a, meshlink_handle_t *b);
37 extern void close_full_tiny_pair(meshlink_handle_t *a, meshlink_handle_t *b);
38
39 /// Link two meshlink instances.
40 extern void link_meshlink_pair(meshlink_handle_t *a, meshlink_handle_t *b);
41
42 /// Default log callback
43 extern void log_cb(meshlink_handle_t *mesh, meshlink_log_level_t level, const char *text);
44
45 #define assert_after(cond, timeout)\
46         do {\
47                 for(int i = 0; i++ <= timeout;) {\
48                         if(cond)\
49                                 break;\
50                         if(i == timeout)\
51                                 assert(cond);\
52                         sleep(1);\
53                 }\
54         } while(0)
55
56 #endif
57
58 /// Compare two timespec values.
59 static inline bool timespec_lt(const struct timespec *a, const struct timespec *b) {
60         if(a->tv_sec == b->tv_sec) {
61                 return a->tv_nsec < b->tv_nsec;
62         } else {
63                 return a->tv_sec < b->tv_sec;
64         }
65 }