]> git.meshlink.io Git - meshlink/blobdiff - test/channels-no-partial.c
Never automatically try to bind to ports >= 32768.
[meshlink] / test / channels-no-partial.c
index caa308fbb69cba4a2b9c5c3a1d5c67d4a28a4e92..43792be39ec7a671034995cdef47a94e61777457 100644 (file)
@@ -1,3 +1,7 @@
+#ifdef NDEBUG
+#undef NDEBUG
+#endif
+
 #include <assert.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -22,6 +26,8 @@ int main(int argc, char *argv[]) {
        (void)argc;
        (void)argv;
 
+       meshlink_set_log_cb(NULL, MESHLINK_DEBUG, log_cb);
+
        // Start two new meshlink instance.
 
        meshlink_handle_t *mesh_a;
@@ -36,13 +42,17 @@ int main(int argc, char *argv[]) {
        meshlink_node_t *b = meshlink_get_node(mesh_a, "b");
        assert(b);
 
-       meshlink_channel_t *channel = meshlink_channel_open_ex(mesh_a, b, 1, NULL, NULL, 0, MESHLINK_CHANNEL_NO_PARTIAL);
+       meshlink_channel_t *channel = meshlink_channel_open_ex(mesh_a, b, 1, NULL, NULL, 0, MESHLINK_CHANNEL_TCP | MESHLINK_CHANNEL_NO_PARTIAL);
        assert(channel);
 
+       // Stop a to ensure we get deterministic behaviour for the channel send queue.
+
+       meshlink_stop(mesh_a);
+
        // Verify that no partial sends succeed.
        // If rejected sends would fit an empty send buffer, 0 should be returned, otherwise -1.
 
-       char buf[256] = "";
+       char buf[512] = "data";
 
        meshlink_set_channel_sndbuf(mesh_a, channel, 256);
        assert(meshlink_channel_send(mesh_a, channel, buf, 257) == -1);
@@ -56,12 +66,27 @@ int main(int argc, char *argv[]) {
        assert(meshlink_channel_send(mesh_a, channel, buf, 29) == 0);
        assert(meshlink_channel_send(mesh_a, channel, buf, 513) == -1);
 
+       // Restart a to ensure it gets to flush the channel send queue.
+
+       assert(meshlink_start(mesh_a));
+
        assert_after(!meshlink_channel_get_sendq(mesh_a, channel), 30);
        assert(meshlink_channel_send(mesh_a, channel, buf, 512) == 512);
 
-       // Clean up.
+       // Check that we can change the NO_PARTIAL flag
+
+       assert_after(!meshlink_channel_get_sendq(mesh_a, channel), 30);
+       meshlink_set_channel_sndbuf(mesh_a, channel, 256);
+       assert(meshlink_channel_send(mesh_a, channel, buf, 257) == -1);
+       meshlink_set_channel_flags(mesh_a, channel, 0);
+       assert(meshlink_channel_send(mesh_a, channel, buf, 257) == 256);
+
+       assert_after(!meshlink_channel_get_sendq(mesh_a, channel), 30);
+       meshlink_set_channel_flags(mesh_a, channel, MESHLINK_CHANNEL_NO_PARTIAL);
+       assert(meshlink_channel_send(mesh_a, channel, buf, 257) == -1);
+       assert(meshlink_channel_send(mesh_a, channel, buf, 256) == 256);
 
-       close_meshlink_pair(mesh_a, mesh_b, "channels_no_partial");
+       // Clean up.
 
-       return 0;
+       close_meshlink_pair(mesh_a, mesh_b);
 }