summaryrefslogtreecommitdiff
path: root/protocols/Tox/toxcore/auto_tests/tox_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Tox/toxcore/auto_tests/tox_test.c')
-rw-r--r--protocols/Tox/toxcore/auto_tests/tox_test.c395
1 files changed, 0 insertions, 395 deletions
diff --git a/protocols/Tox/toxcore/auto_tests/tox_test.c b/protocols/Tox/toxcore/auto_tests/tox_test.c
deleted file mode 100644
index 43fb7a1cd2..0000000000
--- a/protocols/Tox/toxcore/auto_tests/tox_test.c
+++ /dev/null
@@ -1,395 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <check.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "../toxcore/tox.h"
-
-#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
-#define c_sleep(x) Sleep(1*x)
-#else
-#include <unistd.h>
-#define c_sleep(x) usleep(1000*x)
-#endif
-
-void accept_friend_request(Tox *m, const uint8_t *public_key, const uint8_t *data, uint16_t length, void *userdata)
-{
- if (*((uint32_t *)userdata) != 974536)
- return;
-
- if (length == 7 && memcmp("Gentoo", data, 7) == 0) {
- tox_add_friend_norequest(m, public_key);
- }
-}
-uint32_t messages_received;
-
-void print_message(Tox *m, int friendnumber, const uint8_t *string, uint16_t length, void *userdata)
-{
- if (*((uint32_t *)userdata) != 974536)
- return;
-
- uint8_t cmp_msg[TOX_MAX_MESSAGE_LENGTH];
- memset(cmp_msg, 'G', sizeof(cmp_msg));
-
- if (length == TOX_MAX_MESSAGE_LENGTH && memcmp(string, cmp_msg, sizeof(cmp_msg)) == 0)
- ++messages_received;
-}
-
-uint32_t name_changes;
-
-void print_nickchange(Tox *m, int friendnumber, const uint8_t *string, uint16_t length, void *userdata)
-{
- if (*((uint32_t *)userdata) != 974536)
- return;
-
- if (length == sizeof("Gentoo") && memcmp(string, "Gentoo", sizeof("Gentoo")) == 0)
- ++name_changes;
-}
-
-uint32_t typing_changes;
-
-void print_typingchange(Tox *m, int friendnumber, uint8_t typing, void *userdata)
-{
- if (*((uint32_t *)userdata) != 974536)
- return;
-
- if (!typing)
- typing_changes = 1;
- else
- typing_changes = 2;
-}
-
-uint8_t filenum;
-uint32_t file_accepted;
-uint64_t file_size;
-void file_request_accept(Tox *m, int friendnumber, uint8_t filenumber, uint64_t filesize, const uint8_t *filename,
- uint16_t filename_length, void *userdata)
-{
- if (*((uint32_t *)userdata) != 974536)
- return;
-
- if (filename_length == sizeof("Gentoo.exe") && memcmp(filename, "Gentoo.exe", sizeof("Gentoo.exe")) == 0)
- ++file_accepted;
-
- file_size = filesize;
- tox_file_send_control(m, friendnumber, 1, filenumber, TOX_FILECONTROL_ACCEPT, NULL, 0);
-}
-
-uint32_t file_sent;
-uint32_t sendf_ok;
-void file_print_control(Tox *m, int friendnumber, uint8_t receive_send, uint8_t filenumber, uint8_t control_type,
- const uint8_t *data, uint16_t length, void *userdata)
-{
- if (*((uint32_t *)userdata) != 974536)
- return;
-
- if (receive_send == 0 && control_type == TOX_FILECONTROL_FINISHED)
- tox_file_send_control(m, friendnumber, 1, filenumber, TOX_FILECONTROL_FINISHED, NULL, 0);
-
- if (receive_send == 1 && control_type == TOX_FILECONTROL_FINISHED)
- file_sent = 1;
-
- if (receive_send == 1 && control_type == TOX_FILECONTROL_ACCEPT)
- sendf_ok = 1;
-
-}
-
-uint64_t size_recv;
-uint8_t num;
-void write_file(Tox *m, int friendnumber, uint8_t filenumber, const uint8_t *data, uint16_t length, void *userdata)
-{
- if (*((uint32_t *)userdata) != 974536)
- return;
-
- uint8_t *f_data = malloc(length);
- memset(f_data, num, length);
- ++num;
-
- if (memcmp(f_data, data, length) == 0) {
- size_recv += length;
- } else {
- printf("FILE_CORRUPTED\n");
- }
-}
-
-START_TEST(test_few_clients)
-{
- long long unsigned int con_time, cur_time = time(NULL);
- Tox *tox1 = tox_new(TOX_ENABLE_IPV6_DEFAULT);
- Tox *tox2 = tox_new(TOX_ENABLE_IPV6_DEFAULT);
- Tox *tox3 = tox_new(TOX_ENABLE_IPV6_DEFAULT);
- ck_assert_msg(tox1 || tox2 || tox3, "Failed to create 3 tox instances");
- uint32_t to_compare = 974536;
- tox_callback_friend_request(tox2, accept_friend_request, &to_compare);
- uint8_t address[TOX_FRIEND_ADDRESS_SIZE];
- tox_get_address(tox2, address);
- int test = tox_add_friend(tox3, address, (uint8_t *)"Gentoo", 7);
- ck_assert_msg(test == 0, "Failed to add friend error code: %i", test);
-
- uint8_t off = 1;
-
- while (1) {
- tox_do(tox1);
- tox_do(tox2);
- tox_do(tox3);
-
- if (tox_isconnected(tox1) && tox_isconnected(tox2) && tox_isconnected(tox3) && off) {
- printf("Toxes are online, took %llu seconds\n", time(NULL) - cur_time);
- con_time = time(NULL);
- off = 0;
- }
-
-
- if (tox_get_friend_connection_status(tox2, 0) == 1 && tox_get_friend_connection_status(tox3, 0) == 1)
- break;
-
- c_sleep(50);
- }
-
- printf("tox clients connected took %llu seconds\n", time(NULL) - con_time);
- to_compare = 974536;
- tox_callback_friend_message(tox3, print_message, &to_compare);
- uint8_t msgs[TOX_MAX_MESSAGE_LENGTH + 1];
- memset(msgs, 'G', sizeof(msgs));
- ck_assert_msg(tox_send_message(tox2, 0, msgs, TOX_MAX_MESSAGE_LENGTH + 1) == 0,
- "TOX_MAX_MESSAGE_LENGTH is too small\n");
- ck_assert_msg(tox_send_message(tox2, 0, msgs, TOX_MAX_MESSAGE_LENGTH) != 0, "TOX_MAX_MESSAGE_LENGTH is too big\n");
-
- while (1) {
- messages_received = 0;
- tox_do(tox1);
- tox_do(tox2);
- tox_do(tox3);
-
- if (messages_received)
- break;
-
- c_sleep(50);
- }
-
- printf("tox clients messaging succeeded\n");
-
- tox_callback_name_change(tox3, print_nickchange, &to_compare);
- tox_set_name(tox2, (uint8_t *)"Gentoo", sizeof("Gentoo"));
-
- while (1) {
- name_changes = 0;
- tox_do(tox1);
- tox_do(tox2);
- tox_do(tox3);
-
- if (name_changes)
- break;
-
- c_sleep(50);
- }
-
- uint8_t temp_name[sizeof("Gentoo")];
- tox_get_name(tox3, 0, temp_name);
- ck_assert_msg(memcmp(temp_name, "Gentoo", sizeof("Gentoo")) == 0, "Name not correct");
-
- tox_callback_typing_change(tox2, &print_typingchange, &to_compare);
- tox_set_user_is_typing(tox3, 0, 1);
-
- while (1) {
- typing_changes = 0;
- tox_do(tox1);
- tox_do(tox2);
- tox_do(tox3);
-
-
- if (typing_changes == 2)
- break;
- else
- ck_assert_msg(typing_changes == 0, "Typing fail");
-
- c_sleep(50);
- }
-
- ck_assert_msg(tox_get_is_typing(tox2, 0) == 1, "Typing fail");
- tox_set_user_is_typing(tox3, 0, 0);
-
- while (1) {
- typing_changes = 0;
- tox_do(tox1);
- tox_do(tox2);
- tox_do(tox3);
-
- if (typing_changes == 1)
- break;
- else
- ck_assert_msg(typing_changes == 0, "Typing fail");
-
- c_sleep(50);
- }
-
- ck_assert_msg(tox_get_is_typing(tox2, 0) == 0, "Typing fail");
-
- filenum = file_accepted = file_size = file_sent = sendf_ok = size_recv = 0;
- long long unsigned int f_time = time(NULL);
- tox_callback_file_data(tox3, write_file, &to_compare);
- tox_callback_file_control(tox2, file_print_control, &to_compare);
- tox_callback_file_control(tox3, file_print_control, &to_compare);
- tox_callback_file_send_request(tox3, file_request_accept, &to_compare);
- uint64_t totalf_size = 100 * 1024 * 1024;
- int fnum = tox_new_file_sender(tox2, 0, totalf_size, (uint8_t *)"Gentoo.exe", sizeof("Gentoo.exe"));
- ck_assert_msg(fnum != -1, "tox_new_file_sender fail");
- int fpiece_size = tox_file_data_size(tox2, 0);
- uint8_t *f_data = malloc(fpiece_size);
- uint8_t num = 0;
- memset(f_data, num, fpiece_size);
-
- while (1) {
- file_sent = 0;
- tox_do(tox1);
- tox_do(tox2);
- tox_do(tox3);
-
- if (sendf_ok)
- while (tox_file_send_data(tox2, 0, fnum, f_data, fpiece_size < totalf_size ? fpiece_size : totalf_size) == 0) {
- if (totalf_size <= fpiece_size) {
- sendf_ok = 0;
- tox_file_send_control(tox2, 0, 0, fnum, TOX_FILECONTROL_FINISHED, NULL, 0);
- }
-
- ++num;
- memset(f_data, num, fpiece_size);
-
- totalf_size -= fpiece_size;
- }
-
- if (file_sent && size_recv == file_size)
- break;
-
- uint32_t tox1_interval = tox_do_interval(tox1);
- uint32_t tox2_interval = tox_do_interval(tox2);
- uint32_t tox3_interval = tox_do_interval(tox3);
-
- if (tox2_interval > tox3_interval) {
- c_sleep(tox3_interval);
- } else {
- c_sleep(tox2_interval);
- }
- }
-
- printf("100MB file sent in %llu seconds\n", time(NULL) - f_time);
-
- printf("test_few_clients succeeded, took %llu seconds\n", time(NULL) - cur_time);
-
- tox_kill(tox1);
- tox_kill(tox2);
- tox_kill(tox3);
-}
-END_TEST
-
-#define NUM_TOXES 66
-#define NUM_FRIENDS 20
-
-START_TEST(test_many_clients)
-{
- long long unsigned int cur_time = time(NULL);
- Tox *toxes[NUM_TOXES];
- uint32_t i, j;
- uint32_t to_comp = 974536;
-
- for (i = 0; i < NUM_TOXES; ++i) {
- toxes[i] = tox_new(TOX_ENABLE_IPV6_DEFAULT);
- ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i);
- tox_callback_friend_request(toxes[i], accept_friend_request, &to_comp);
- }
-
- struct {
- uint16_t tox1;
- uint16_t tox2;
- } pairs[NUM_FRIENDS];
-
- uint8_t address[TOX_FRIEND_ADDRESS_SIZE];
-
- for (i = 0; i < NUM_FRIENDS; ++i) {
-loop_top:
- pairs[i].tox1 = rand() % NUM_TOXES;
- pairs[i].tox2 = (pairs[i].tox1 + rand() % (NUM_TOXES - 1) + 1) % NUM_TOXES;
-
- for (j = 0; j < i; ++j) {
- if (pairs[j].tox2 == pairs[i].tox1 && pairs[j].tox1 == pairs[i].tox2)
- goto loop_top;
- }
-
- tox_get_address(toxes[pairs[i].tox1], address);
- int test = tox_add_friend(toxes[pairs[i].tox2], address, (uint8_t *)"Gentoo", 7);
-
- if (test == TOX_FAERR_ALREADYSENT) {
- goto loop_top;
- }
-
- ck_assert_msg(test >= 0, "Failed to add friend error code: %i", test);
- }
-
- while (1) {
- uint16_t counter = 0;
-
- for (i = 0; i < NUM_TOXES; ++i) {
- for (j = 0; j < tox_count_friendlist(toxes[i]); ++j)
- if (tox_get_friend_connection_status(toxes[i], j) == 1)
- ++counter;
- }
-
- if (counter == NUM_FRIENDS * 2) {
- break;
- }
-
- for (i = 0; i < NUM_TOXES; ++i) {
- tox_do(toxes[i]);
- }
-
- c_sleep(50);
- }
-
- printf("test_many_clients succeeded, took %llu seconds\n", time(NULL) - cur_time);
-
- for (i = 0; i < NUM_TOXES; ++i) {
- tox_kill(toxes[i]);
- }
-}
-END_TEST
-
-#define DEFTESTCASE(NAME) \
- TCase *tc_##NAME = tcase_create(#NAME); \
- tcase_add_test(tc_##NAME, test_##NAME); \
- suite_add_tcase(s, tc_##NAME);
-
-#define DEFTESTCASE_SLOW(NAME, TIMEOUT) \
- DEFTESTCASE(NAME) \
- tcase_set_timeout(tc_##NAME, TIMEOUT);
-Suite *tox_suite(void)
-{
- Suite *s = suite_create("Tox");
-
- DEFTESTCASE_SLOW(few_clients, 50);
- DEFTESTCASE_SLOW(many_clients, 150);
- return s;
-}
-
-int main(int argc, char *argv[])
-{
- srand((unsigned int) time(NULL));
-
- Suite *tox = tox_suite();
- SRunner *test_runner = srunner_create(tox);
-
- int number_failed = 0;
- srunner_run_all(test_runner, CK_NORMAL);
- number_failed = srunner_ntests_failed(test_runner);
-
- srunner_free(test_runner);
-
- return number_failed;
-}
-