]> git.meshlink.io Git - meshlink/blob - test/ephemeral.c
Handle host config files without a public key.
[meshlink] / test / ephemeral.c
1 #ifdef NDEBUG
2 #undef NDEBUG
3 #endif
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <sys/time.h>
8 #include <assert.h>
9
10 #include "meshlink.h"
11 #include "utils.h"
12
13 int main() {
14         meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
15
16         // Open two ephemeral meshlink instance.
17
18         meshlink_handle_t *mesh1 = meshlink_open_ephemeral("foo", "ephemeral", DEV_CLASS_BACKBONE);
19         meshlink_handle_t *mesh2 = meshlink_open_ephemeral("bar", "ephemeral", DEV_CLASS_BACKBONE);
20
21         assert(mesh1);
22         assert(mesh2);
23
24         meshlink_set_log_cb(mesh1, MESHLINK_DEBUG, log_cb);
25         meshlink_set_log_cb(mesh2, MESHLINK_DEBUG, log_cb);
26
27         // Exchange data
28
29         char *export1 = meshlink_export(mesh1);
30         char *export2 = meshlink_export(mesh2);
31
32         assert(export1);
33         assert(export2);
34
35         assert(meshlink_import(mesh1, export2));
36         assert(meshlink_import(mesh2, export1));
37
38         free(export1);
39         free(export2);
40
41         // Check that they know each other
42
43         assert(meshlink_get_node(mesh1, "bar"));
44         assert(meshlink_get_node(mesh2, "foo"));
45
46         // Close the ephemeral instances and reopen them.
47
48         meshlink_close(mesh1);
49         meshlink_close(mesh2);
50
51         mesh1 = meshlink_open_ephemeral("foo", "ephemeral", DEV_CLASS_BACKBONE);
52         mesh2 = meshlink_open_ephemeral("bar", "ephemeral", DEV_CLASS_BACKBONE);
53
54         assert(mesh1);
55         assert(mesh2);
56
57         meshlink_set_log_cb(mesh1, MESHLINK_DEBUG, log_cb);
58         meshlink_set_log_cb(mesh2, MESHLINK_DEBUG, log_cb);
59
60         // Check that the nodes no longer know each other
61
62         assert(!meshlink_get_node(mesh1, "bar"));
63         assert(!meshlink_get_node(mesh2, "foo"));
64
65         // That's it.
66
67         meshlink_close(mesh1);
68         meshlink_close(mesh2);
69 }