]> git.meshlink.io Git - meshlink/commitdiff
Add a test for changing ports and handling of port conflicts.
authorGuus Sliepen <guus@meshlink.io>
Sun, 6 Nov 2022 22:18:22 +0000 (23:18 +0100)
committerGuus Sliepen <guus@meshlink.io>
Sun, 6 Nov 2022 22:22:42 +0000 (23:22 +0100)
test/Makefile.am
test/port.c [new file with mode: 0644]

index 688d8b7d5861d29b4e53a6cb8d17206ad43f97ed..94a6317d8b6034d765f915942fcd7e13bd1f9705 100644 (file)
@@ -25,6 +25,7 @@ TESTS = \
        metering-slowping \
        metering-tcponly \              
        meta-connections \
+       port \
        sign-verify \
        storage-policy \
        trio \
@@ -73,6 +74,7 @@ check_PROGRAMS = \
        metering-slowping \
        metering-tcponly \
        meta-connections \
+       port \
        sign-verify \
        storage-policy \
        stream \
@@ -167,6 +169,9 @@ metering_tcponly_LDADD = $(top_builddir)/src/libmeshlink.la
 meta_connections_SOURCES = meta-connections.c netns_utils.c netns_utils.h utils.c utils.h
 meta_connections_LDADD = $(top_builddir)/src/libmeshlink.la
 
+port_SOURCES = port.c utils.c utils.h
+port_LDADD = $(top_builddir)/src/libmeshlink.la
+
 sign_verify_SOURCES = sign-verify.c utils.c utils.h
 sign_verify_LDADD = $(top_builddir)/src/libmeshlink.la
 
diff --git a/test/port.c b/test/port.c
new file mode 100644 (file)
index 0000000..cd24f34
--- /dev/null
@@ -0,0 +1,67 @@
+#ifdef NDEBUG
+#undef NDEBUG
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/time.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "meshlink.h"
+#include "devtools.h"
+#include "utils.h"
+
+
+int main(void) {
+       meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
+
+       meshlink_handle_t *mesh1;
+       meshlink_handle_t *mesh2;
+
+       // Open two instances
+
+       assert(meshlink_destroy("port_conf.1"));
+       assert(meshlink_destroy("port_conf.2"));
+
+       mesh1 = meshlink_open("port_conf.1", "foo", "port", DEV_CLASS_BACKBONE);
+       mesh2 = meshlink_open("port_conf.2", "bar", "port", DEV_CLASS_BACKBONE);
+
+       assert(mesh1);
+       assert(mesh2);
+
+       meshlink_enable_discovery(mesh1, false);
+       meshlink_enable_discovery(mesh2, false);
+
+       int port1 = meshlink_get_port(mesh1);
+       int port2 = meshlink_get_port(mesh2);
+       assert(port1);
+       assert(port2);
+       assert(port1 != port2);
+
+       // bar cannot take foo's port if foo is still open
+       assert(!meshlink_set_port(mesh2, port1));
+
+       // bar can take foo's port of foo is closed
+       meshlink_close(mesh1);
+
+       assert(meshlink_set_port(mesh2, port1));
+       assert(meshlink_get_port(mesh2) == port1);
+
+       // foo can open but will now use a different port
+       mesh1 = meshlink_open("port_conf.1", "foo", "port", DEV_CLASS_BACKBONE);
+       assert(mesh1);
+       int port1b = meshlink_get_port(mesh1);
+       assert(port1b);
+       assert(port1b != port1);
+
+       assert(!meshlink_set_port(mesh1, port1));
+
+       // foo can take over bar's old port
+       assert(meshlink_set_port(mesh1, port2));
+
+       meshlink_close(mesh1);
+       meshlink_close(mesh2);
+}