X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=test%2Fchannels-udp.c;h=0c24a9376e04f979fb80921154e1e7169f6ac863;hp=27265aac420328c9a9d11107f75126b85d7d339f;hb=fec95d1221c2d7e2059d6ba2fe244211ccee95ad;hpb=f1da50294494310d7a299c29af5649d4415bd38a diff --git a/test/channels-udp.c b/test/channels-udp.c index 27265aac..0c24a937 100644 --- a/test/channels-udp.c +++ b/test/channels-udp.c @@ -20,6 +20,7 @@ struct client { meshlink_handle_t *mesh; meshlink_channel_t *channel; size_t received; + bool got_large_packet; }; static void server_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, const void *data, size_t len) { @@ -52,10 +53,14 @@ static void client_receive_cb(meshlink_handle_t *mesh, meshlink_channel_t *chann (void)data; // We expect always the same amount of data from the server. - assert(len == 1000); assert(mesh->priv); struct client *client = mesh->priv; + assert(len == 512 || len == 2000); client->received += len; + + if(len == 2000) { + client->got_large_packet = true; + } } static void status_cb(meshlink_handle_t *mesh, meshlink_node_t *node, bool reachable) { @@ -135,9 +140,21 @@ int main() { assert(clients[i].channel); } + // Send a packet larger than the MTU + + char large_data[2000] = ""; + + for(int i = 0; i < 3; i++) { + assert(meshlink_channel_send(server, channels[i], large_data, sizeof(large_data)) == sizeof(large_data)); + } + + // Assert that packets larger than 64 kiB are not allowed + + assert(meshlink_channel_send(server, channels[0], large_data, 65537) == -1); + // Stream packets from server to clients for 5 seconds at 40 Mbps (1 kB * 500 Hz) - char data[1000]; + char data[512]; memset(data, 'U', sizeof(data)); for(int j = 0; j < 2500; j++) { @@ -165,8 +182,9 @@ int main() { } for(int i = 0; i < 3; i++) { - assert(clients[i].received >= 2400000); - assert(clients[i].received <= 2500000); + assert(clients[i].received >= 1000000); + assert(clients[i].received <= 1282000); + assert(clients[i].got_large_packet); } // Clean up.