summaryrefslogtreecommitdiff
path: root/auto_tests/tox_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'auto_tests/tox_test.c')
-rw-r--r--auto_tests/tox_test.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/auto_tests/tox_test.c b/auto_tests/tox_test.c
index 4dcc6ada..52c21f48 100644
--- a/auto_tests/tox_test.c
+++ b/auto_tests/tox_test.c
@@ -903,6 +903,102 @@ loop_top:
903} 903}
904END_TEST 904END_TEST
905 905
906#define NUM_TCP_RELAYS 3
907
908START_TEST(test_many_clients_tcp_b)
909{
910 long long unsigned int cur_time = time(NULL);
911 Tox *toxes[NUM_TOXES];
912 uint32_t i, j;
913 uint32_t to_comp = 974536;
914
915 for (i = 0; i < NUM_TOXES; ++i) {
916 struct Tox_Options opts;
917 tox_options_default(&opts);
918
919 if (i < NUM_TCP_RELAYS) {
920 opts.tcp_port = TCP_RELAY_PORT + i;
921 } else {
922 opts.udp_enabled = 0;
923 }
924
925 toxes[i] = tox_new(&opts, 0, 0, 0);
926 ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i);
927 tox_callback_friend_request(toxes[i], accept_friend_request, &to_comp);
928 uint8_t dpk[TOX_PUBLIC_KEY_SIZE];
929 tox_self_get_dht_id(toxes[(i % NUM_TCP_RELAYS)], dpk);
930 ck_assert_msg(tox_add_tcp_relay(toxes[i], "::1", TCP_RELAY_PORT + (i % NUM_TCP_RELAYS), dpk, 0), "add relay error");
931 tox_self_get_dht_id(toxes[0], dpk);
932 ck_assert_msg(tox_bootstrap(toxes[i], "::1", 33445, dpk, 0), "Bootstrap error");
933 }
934
935 {
936 TOX_ERR_GET_PORT error;
937 ck_assert_msg(tox_self_get_udp_port(toxes[0], &error) == 33445, "First Tox instance did not bind to udp port 33445.\n");
938 ck_assert_msg(error == TOX_ERR_GET_PORT_OK, "wrong error");
939 ck_assert_msg(tox_self_get_tcp_port(toxes[0], &error) == TCP_RELAY_PORT,
940 "First Tox instance did not bind to tcp port %u.\n", TCP_RELAY_PORT);
941 ck_assert_msg(error == TOX_ERR_GET_PORT_OK, "wrong error");
942 }
943
944 struct {
945 uint16_t tox1;
946 uint16_t tox2;
947 } pairs[NUM_FRIENDS];
948
949 uint8_t address[TOX_ADDRESS_SIZE];
950
951 for (i = 0; i < NUM_FRIENDS; ++i) {
952loop_top:
953 pairs[i].tox1 = rand() % NUM_TOXES;
954 pairs[i].tox2 = (pairs[i].tox1 + rand() % (NUM_TOXES - 1) + 1) % NUM_TOXES;
955
956 for (j = 0; j < i; ++j) {
957 if (pairs[j].tox2 == pairs[i].tox1 && pairs[j].tox1 == pairs[i].tox2)
958 goto loop_top;
959 }
960
961 tox_self_get_address(toxes[pairs[i].tox1], address);
962
963 TOX_ERR_FRIEND_ADD test;
964 uint32_t num = tox_friend_add(toxes[pairs[i].tox2], address, (uint8_t *)"Gentoo", 7, &test);
965
966 if (test == TOX_ERR_FRIEND_ADD_ALREADY_SENT) {
967 goto loop_top;
968 }
969
970 ck_assert_msg(num != UINT32_MAX && test == TOX_ERR_FRIEND_ADD_OK, "Failed to add friend error code: %i", test);
971 }
972
973 while (1) {
974 uint16_t counter = 0;
975
976 for (i = 0; i < NUM_TOXES; ++i) {
977 for (j = 0; j < tox_self_get_friend_list_size(toxes[i]); ++j)
978 if (tox_friend_get_connection_status(toxes[i], j, 0) == TOX_CONNECTION_TCP)
979 ++counter;
980 }
981
982 if (counter == NUM_FRIENDS * 2) {
983 break;
984 }
985
986 for (i = 0; i < NUM_TOXES; ++i) {
987 tox_iterate(toxes[i]);
988 }
989
990 c_sleep(50);
991 }
992
993 for (i = 0; i < NUM_TOXES; ++i) {
994 tox_kill(toxes[i]);
995 }
996
997 printf("test_many_clients_tcp_b succeeded, took %llu seconds\n", time(NULL) - cur_time);
998}
999END_TEST
1000
1001
906#define NUM_GROUP_TOX 32 1002#define NUM_GROUP_TOX 32
907 1003
908void g_accept_friend_request(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) 1004void g_accept_friend_request(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata)
@@ -1091,6 +1187,7 @@ Suite *tox_suite(void)
1091 DEFTESTCASE_SLOW(few_clients, 50); 1187 DEFTESTCASE_SLOW(few_clients, 50);
1092 DEFTESTCASE_SLOW(many_clients, 150); 1188 DEFTESTCASE_SLOW(many_clients, 150);
1093 DEFTESTCASE_SLOW(many_clients_tcp, 150); 1189 DEFTESTCASE_SLOW(many_clients_tcp, 150);
1190 DEFTESTCASE_SLOW(many_clients_tcp_b, 20);
1094 DEFTESTCASE_SLOW(many_group, 100); 1191 DEFTESTCASE_SLOW(many_group, 100);
1095 return s; 1192 return s;
1096} 1193}