Squashed 'external/toxcore/c-toxcore/' changes from 03e9fbf3703..e740b4e3b2e
e740b4e3b2e feat: Implement Tox network profiler git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: e740b4e3b2e3aa594ab259e2a80153f5eed8fd16
This commit is contained in:
@ -67,6 +67,7 @@ auto_test(invalid_udp_proxy)
|
||||
auto_test(lan_discovery)
|
||||
auto_test(lossless_packet)
|
||||
auto_test(lossy_packet)
|
||||
auto_test(netprof)
|
||||
auto_test(network)
|
||||
auto_test(onion)
|
||||
auto_test(overflow_recvq)
|
||||
|
@ -111,12 +111,12 @@ static void test_basic(void)
|
||||
|
||||
// Sending the handshake
|
||||
ck_assert_msg(net_send(ns, logger, sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
&localhost) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
&localhost, nullptr) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
"An attempt to send the initial handshake minus last byte failed.");
|
||||
|
||||
do_tcp_server_delay(tcp_s, mono_time, 50);
|
||||
|
||||
ck_assert_msg(net_send(ns, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost) == 1,
|
||||
ck_assert_msg(net_send(ns, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost, nullptr) == 1,
|
||||
"The attempt to send the last byte of handshake failed.");
|
||||
|
||||
free(handshake);
|
||||
@ -155,7 +155,7 @@ static void test_basic(void)
|
||||
msg_length = sizeof(r_req) - i;
|
||||
}
|
||||
|
||||
ck_assert_msg(net_send(ns, logger, sock, r_req + i, msg_length, &localhost) == msg_length,
|
||||
ck_assert_msg(net_send(ns, logger, sock, r_req + i, msg_length, &localhost, nullptr) == msg_length,
|
||||
"Failed to send request after completing the handshake.");
|
||||
i += msg_length;
|
||||
|
||||
@ -234,12 +234,12 @@ static struct sec_TCP_con *new_tcp_con(const Logger *logger, const Memory *mem,
|
||||
"Failed to encrypt the outgoing handshake.");
|
||||
|
||||
ck_assert_msg(net_send(ns, logger, sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
&localhost) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
&localhost, nullptr) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
"Failed to send the first portion of the handshake to the TCP relay server.");
|
||||
|
||||
do_tcp_server_delay(tcp_s, mono_time, 50);
|
||||
|
||||
ck_assert_msg(net_send(ns, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost) == 1,
|
||||
ck_assert_msg(net_send(ns, logger, sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1, &localhost, nullptr) == 1,
|
||||
"Failed to send last byte of handshake.");
|
||||
|
||||
do_tcp_server_delay(tcp_s, mono_time, 50);
|
||||
@ -283,7 +283,7 @@ static int write_packet_tcp_test_connection(const Logger *logger, struct sec_TCP
|
||||
localhost.ip = get_loopback();
|
||||
localhost.port = 0;
|
||||
|
||||
ck_assert_msg(net_send(con->ns, logger, con->sock, packet, packet_size, &localhost) == packet_size,
|
||||
ck_assert_msg(net_send(con->ns, logger, con->sock, packet, packet_size, &localhost, nullptr) == packet_size,
|
||||
"Failed to send a packet.");
|
||||
return 0;
|
||||
}
|
||||
@ -524,7 +524,7 @@ static void test_client(void)
|
||||
ip_port_tcp_s.port = net_htons(ports[random_u32(rng) % NUM_PORTS]);
|
||||
ip_port_tcp_s.ip = get_loopback();
|
||||
|
||||
TCP_Client_Connection *conn = new_tcp_connection(logger, mem, mono_time, rng, ns, &ip_port_tcp_s, self_public_key, f_public_key, f_secret_key, nullptr);
|
||||
TCP_Client_Connection *conn = new_tcp_connection(logger, mem, mono_time, rng, ns, &ip_port_tcp_s, self_public_key, f_public_key, f_secret_key, nullptr, nullptr);
|
||||
// TCP sockets might need a moment before they can be written to.
|
||||
c_sleep(50);
|
||||
do_tcp_connection(logger, mono_time, conn, nullptr);
|
||||
@ -560,7 +560,7 @@ static void test_client(void)
|
||||
crypto_new_keypair(rng, f2_public_key, f2_secret_key);
|
||||
ip_port_tcp_s.port = net_htons(ports[random_u32(rng) % NUM_PORTS]);
|
||||
TCP_Client_Connection *conn2 = new_tcp_connection(logger, mem, mono_time, rng, ns, &ip_port_tcp_s, self_public_key, f2_public_key,
|
||||
f2_secret_key, nullptr);
|
||||
f2_secret_key, nullptr, nullptr);
|
||||
c_sleep(50);
|
||||
|
||||
// The client should call this function (defined earlier) during the routing process.
|
||||
@ -657,7 +657,7 @@ static void test_client_invalid(void)
|
||||
ip_port_tcp_s.port = net_htons(ports[random_u32(rng) % NUM_PORTS]);
|
||||
ip_port_tcp_s.ip = get_loopback();
|
||||
TCP_Client_Connection *conn = new_tcp_connection(logger, mem, mono_time, rng, ns, &ip_port_tcp_s,
|
||||
self_public_key, f_public_key, f_secret_key, nullptr);
|
||||
self_public_key, f_public_key, f_secret_key, nullptr, nullptr);
|
||||
|
||||
// Run the client's main loop but not the server.
|
||||
mono_time_update(mono_time);
|
||||
|
120
auto_tests/netprof_test.c
Normal file
120
auto_tests/netprof_test.c
Normal file
@ -0,0 +1,120 @@
|
||||
/** Auto Tests: basic network profile functionality test (UDP only)
|
||||
* TODO(JFreegman): test TCP packets as well
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../toxcore/tox_private.h"
|
||||
#include "../toxcore/util.h"
|
||||
|
||||
#include "auto_test_support.h"
|
||||
#include "check_compat.h"
|
||||
|
||||
#define NUM_TOXES 2
|
||||
|
||||
static void test_netprof(AutoTox *autotoxes)
|
||||
{
|
||||
// Send some messages to create fake traffic
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
for (uint32_t j = 0; j < NUM_TOXES; ++j) {
|
||||
tox_friend_send_message(autotoxes[j].tox, 0, TOX_MESSAGE_TYPE_NORMAL, (const uint8_t *)"test", 4, nullptr);
|
||||
}
|
||||
|
||||
iterate_all_wait(autotoxes, NUM_TOXES, ITERATION_INTERVAL);
|
||||
}
|
||||
|
||||
// idle traffic for a while
|
||||
for (size_t i = 0; i < 100; ++i) {
|
||||
iterate_all_wait(autotoxes, NUM_TOXES, ITERATION_INTERVAL);
|
||||
}
|
||||
|
||||
const Tox *tox1 = autotoxes[0].tox;
|
||||
|
||||
const unsigned long long UDP_count_sent1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
||||
TOX_NETPROF_DIRECTION_SENT);
|
||||
const unsigned long long UDP_count_recv1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
||||
TOX_NETPROF_DIRECTION_RECV);
|
||||
const unsigned long long TCP_count_sent1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_TCP,
|
||||
TOX_NETPROF_DIRECTION_SENT);
|
||||
const unsigned long long TCP_count_recv1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_TCP,
|
||||
TOX_NETPROF_DIRECTION_RECV);
|
||||
|
||||
const unsigned long long UDP_bytes_sent1 = tox_netprof_get_packet_total_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
||||
TOX_NETPROF_DIRECTION_SENT);
|
||||
const unsigned long long UDP_bytes_recv1 = tox_netprof_get_packet_total_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
||||
TOX_NETPROF_DIRECTION_RECV);
|
||||
const unsigned long long TCP_bytes_sent1 = tox_netprof_get_packet_total_bytes(tox1, TOX_NETPROF_PACKET_TYPE_TCP,
|
||||
TOX_NETPROF_DIRECTION_SENT);
|
||||
const unsigned long long TCP_bytes_recv1 = tox_netprof_get_packet_total_bytes(tox1, TOX_NETPROF_PACKET_TYPE_TCP,
|
||||
TOX_NETPROF_DIRECTION_RECV);
|
||||
|
||||
ck_assert(UDP_count_recv1 > 0 && UDP_count_sent1 > 0);
|
||||
ck_assert(UDP_bytes_recv1 > 0 && UDP_bytes_sent1 > 0);
|
||||
|
||||
(void)TCP_count_sent1;
|
||||
(void)TCP_bytes_sent1;
|
||||
(void)TCP_bytes_recv1;
|
||||
(void)TCP_count_recv1;
|
||||
|
||||
unsigned long long total_sent_count = 0;
|
||||
unsigned long long total_recv_count = 0;
|
||||
unsigned long long total_sent_bytes = 0;
|
||||
unsigned long long total_recv_bytes = 0;
|
||||
|
||||
// tox1 makes sure the sum value of all packet ID's is equal to the totals
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
// this id isn't valid for UDP packets but we still want to call the
|
||||
// functions and make sure they return some non-zero value
|
||||
if (i == TOX_NETPROF_PACKET_ID_TCP_DATA) {
|
||||
ck_assert(tox_netprof_get_packet_id_count(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_SENT) > 0);
|
||||
ck_assert(tox_netprof_get_packet_id_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_SENT) > 0);
|
||||
ck_assert(tox_netprof_get_packet_id_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_SENT) > 0);
|
||||
ck_assert(tox_netprof_get_packet_id_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_RECV) > 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
total_sent_count += tox_netprof_get_packet_id_count(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_SENT);
|
||||
total_recv_count += tox_netprof_get_packet_id_count(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_RECV);
|
||||
|
||||
total_sent_bytes += tox_netprof_get_packet_id_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_SENT);
|
||||
total_recv_bytes += tox_netprof_get_packet_id_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP, i,
|
||||
TOX_NETPROF_DIRECTION_RECV);
|
||||
}
|
||||
|
||||
const unsigned long long total_packets = total_sent_count + total_recv_count;
|
||||
ck_assert_msg(total_packets == UDP_count_sent1 + UDP_count_recv1,
|
||||
"%llu does not match %llu\n", total_packets, UDP_count_sent1 + UDP_count_recv1);
|
||||
|
||||
ck_assert_msg(total_sent_count == UDP_count_sent1, "%llu does not match %llu\n", total_sent_count, UDP_count_sent1);
|
||||
ck_assert_msg(total_recv_count == UDP_count_recv1, "%llu does not match %llu\n", total_recv_count, UDP_count_recv1);
|
||||
|
||||
|
||||
const unsigned long long total_bytes = total_sent_bytes + total_recv_bytes;
|
||||
ck_assert_msg(total_bytes == UDP_bytes_sent1 + UDP_bytes_recv1,
|
||||
"%llu does not match %llu\n", total_bytes, UDP_bytes_sent1 + UDP_bytes_recv1);
|
||||
|
||||
ck_assert_msg(total_sent_bytes == UDP_bytes_sent1, "%llu does not match %llu\n", total_sent_bytes, UDP_bytes_sent1);
|
||||
ck_assert_msg(total_recv_bytes == UDP_bytes_recv1, "%llu does not match %llu\n", total_recv_bytes, UDP_bytes_recv1);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
setvbuf(stdout, nullptr, _IONBF, 0);
|
||||
|
||||
Run_Auto_Options autotox_opts = default_run_auto_options();
|
||||
autotox_opts.graph = GRAPH_COMPLETE;
|
||||
|
||||
run_auto_test(nullptr, NUM_TOXES, test_netprof, 0, &autotox_opts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#undef NUM_TOXES
|
@ -202,7 +202,7 @@ static int handle_test_4(void *object, const IP_Port *source, const uint8_t *pac
|
||||
* Use Onion_Path path to send data of length to dest.
|
||||
* Maximum length of data is ONION_MAX_DATA_SIZE.
|
||||
*/
|
||||
static void send_onion_packet(const Networking_Core *net, const Random *rng, const Onion_Path *path, const IP_Port *dest, const uint8_t *data, uint16_t length)
|
||||
static void send_onion_packet(Networking_Core *net, const Random *rng, const Onion_Path *path, const IP_Port *dest, const uint8_t *data, uint16_t length)
|
||||
{
|
||||
uint8_t packet[ONION_MAX_PACKET_SIZE];
|
||||
const int len = create_onion_packet(rng, packet, sizeof(packet), path, dest, data, length);
|
||||
|
Reference in New Issue
Block a user