ff3512a77e
f785959eace chore: add to_string functions for netprof enums a95b7957288 cleanup: Heap allocate network profile objects a3c80149edd feat: Implement Tox network profiler ac812871a2e feat: implement the last 2 missing network struct functions and make use of them 29d1043be0b test: friend request test now tests min/max message sizes 93aafd78c1f fix: friend requests with very long messages are no longer dropped 819aa2b2618 feat: Add option to disable DNS lookups in toxcore. 0ac23cee035 fix: windows use of REUSEADDR 7d2811d302d chore(ci): make bazel server shutdown faster 1dc399ba20d chore: Use vcpkg instead of conan in the MSVC build. 14d823165d9 chore: Migrate to conan 2. bdd17c16787 cleanup: Allocate logger using tox memory allocator. b396c061515 chore(deps): bump third_party/cmp from `2ac6bca` to `52bfcfa` 2e94da60d09 feat(net): add missing connect to network struct 41fb1839c7b chore: Add check to ensure version numbers agree. 934a8301113 chore: Release 0.2.20 3acef4bf044 fix: Add missing free in dht_get_nodes_response event. git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: f785959eacebc59590f756b133b52601c335a1d1
122 lines
5.4 KiB
C
122 lines
5.4 KiB
C
/** Auto Tests: basic network profile functionality test (UDP only)
|
|
* TODO(JFreegman): test TCP packets as well
|
|
*/
|
|
|
|
#include <inttypes.h>
|
|
#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 uint64_t UDP_count_sent1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
|
TOX_NETPROF_DIRECTION_SENT);
|
|
const uint64_t UDP_count_recv1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
|
TOX_NETPROF_DIRECTION_RECV);
|
|
const uint64_t TCP_count_sent1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_TCP,
|
|
TOX_NETPROF_DIRECTION_SENT);
|
|
const uint64_t TCP_count_recv1 = tox_netprof_get_packet_total_count(tox1, TOX_NETPROF_PACKET_TYPE_TCP,
|
|
TOX_NETPROF_DIRECTION_RECV);
|
|
|
|
const uint64_t UDP_bytes_sent1 = tox_netprof_get_packet_total_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
|
TOX_NETPROF_DIRECTION_SENT);
|
|
const uint64_t UDP_bytes_recv1 = tox_netprof_get_packet_total_bytes(tox1, TOX_NETPROF_PACKET_TYPE_UDP,
|
|
TOX_NETPROF_DIRECTION_RECV);
|
|
const uint64_t TCP_bytes_sent1 = tox_netprof_get_packet_total_bytes(tox1, TOX_NETPROF_PACKET_TYPE_TCP,
|
|
TOX_NETPROF_DIRECTION_SENT);
|
|
const uint64_t 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;
|
|
|
|
uint64_t total_sent_count = 0;
|
|
uint64_t total_recv_count = 0;
|
|
uint64_t total_sent_bytes = 0;
|
|
uint64_t 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 uint64_t total_packets = total_sent_count + total_recv_count;
|
|
ck_assert_msg(total_packets == UDP_count_sent1 + UDP_count_recv1,
|
|
"%" PRIu64 "does not match %" PRIu64 "\n", total_packets, UDP_count_sent1 + UDP_count_recv1);
|
|
|
|
ck_assert_msg(total_sent_count == UDP_count_sent1, "%" PRIu64 " does not match %" PRIu64 "\n", total_sent_count, UDP_count_sent1);
|
|
ck_assert_msg(total_recv_count == UDP_count_recv1, "%" PRIu64 " does not match %" PRIu64"\n", total_recv_count, UDP_count_recv1);
|
|
|
|
|
|
const uint64_t total_bytes = total_sent_bytes + total_recv_bytes;
|
|
ck_assert_msg(total_bytes == UDP_bytes_sent1 + UDP_bytes_recv1,
|
|
"%" PRIu64 "does not match %" PRIu64 "\n", total_bytes, UDP_bytes_sent1 + UDP_bytes_recv1);
|
|
|
|
ck_assert_msg(total_sent_bytes == UDP_bytes_sent1, "%" PRIu64 " does not match %" PRIu64 "\n", total_sent_bytes, UDP_bytes_sent1);
|
|
ck_assert_msg(total_recv_bytes == UDP_bytes_recv1, "%" PRIu64 " does not match %" PRIu64 "\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
|