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.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/auto_tests/tox_test.c b/auto_tests/tox_test.c
index 0dab2e69..2e2d4538 100644
--- a/auto_tests/tox_test.c
+++ b/auto_tests/tox_test.c
@@ -809,6 +809,100 @@ loop_top:
809} 809}
810END_TEST 810END_TEST
811 811
812#define TCP_RELAY_PORT 33445
813
814START_TEST(test_many_clients_tcp)
815{
816 long long unsigned int cur_time = time(NULL);
817 Tox *toxes[NUM_TOXES];
818 uint32_t i, j;
819 uint32_t to_comp = 974536;
820
821 for (i = 0; i < NUM_TOXES; ++i) {
822 struct Tox_Options opts;
823 tox_options_default(&opts);
824
825 if (i == 0) {
826 opts.tcp_port = TCP_RELAY_PORT;
827 } else {
828 opts.udp_enabled = 0;
829 }
830
831 toxes[i] = tox_new(&opts, 0, 0, 0);
832 ck_assert_msg(toxes[i] != 0, "Failed to create tox instances %u", i);
833 tox_callback_friend_request(toxes[i], accept_friend_request, &to_comp);
834 uint8_t dpk[TOX_PUBLIC_KEY_SIZE];
835 tox_self_get_dht_id(toxes[0], dpk);
836 tox_add_tcp_relay(toxes[i], "::1", TCP_RELAY_PORT, dpk, 0);
837 tox_bootstrap(toxes[i], "::1", 33445, dpk, 0);
838 }
839
840 {
841 TOX_ERR_GET_PORT error;
842 ck_assert_msg(tox_self_get_udp_port(toxes[0], &error) == 33445, "First Tox instance did not bind to udp port 33445.\n");
843 ck_assert_msg(error == TOX_ERR_GET_PORT_OK, "wrong error");
844 ck_assert_msg(tox_self_get_tcp_port(toxes[0], &error) == TCP_RELAY_PORT,
845 "First Tox instance did not bind to tcp port %u.\n", TCP_RELAY_PORT);
846 ck_assert_msg(error == TOX_ERR_GET_PORT_OK, "wrong error");
847 }
848
849 struct {
850 uint16_t tox1;
851 uint16_t tox2;
852 } pairs[NUM_FRIENDS];
853
854 uint8_t address[TOX_ADDRESS_SIZE];
855
856 for (i = 0; i < NUM_FRIENDS; ++i) {
857loop_top:
858 pairs[i].tox1 = rand() % NUM_TOXES;
859 pairs[i].tox2 = (pairs[i].tox1 + rand() % (NUM_TOXES - 1) + 1) % NUM_TOXES;
860
861 for (j = 0; j < i; ++j) {
862 if (pairs[j].tox2 == pairs[i].tox1 && pairs[j].tox1 == pairs[i].tox2)
863 goto loop_top;
864 }
865
866 tox_self_get_address(toxes[pairs[i].tox1], address);
867
868 TOX_ERR_FRIEND_ADD test;
869 uint32_t num = tox_friend_add(toxes[pairs[i].tox2], address, (uint8_t *)"Gentoo", 7, &test);
870
871 if (test == TOX_ERR_FRIEND_ADD_ALREADY_SENT) {
872 goto loop_top;
873 }
874
875 ck_assert_msg(num != UINT32_MAX && test == TOX_ERR_FRIEND_ADD_OK, "Failed to add friend error code: %i", test);
876 }
877
878 while (1) {
879 uint16_t counter = 0;
880
881 for (i = 0; i < NUM_TOXES; ++i) {
882 for (j = 0; j < tox_self_get_friend_list_size(toxes[i]); ++j)
883 if (tox_friend_get_connection_status(toxes[i], j, 0) == TOX_CONNECTION_TCP)
884 ++counter;
885 }
886
887 if (counter == NUM_FRIENDS * 2) {
888 break;
889 }
890
891 for (i = 0; i < NUM_TOXES; ++i) {
892 tox_iterate(toxes[i]);
893 }
894
895 c_sleep(50);
896 }
897
898 for (i = 0; i < NUM_TOXES; ++i) {
899 tox_kill(toxes[i]);
900 }
901
902 printf("test_many_clients_tcp succeeded, took %llu seconds\n", time(NULL) - cur_time);
903}
904END_TEST
905
812#define NUM_GROUP_TOX 32 906#define NUM_GROUP_TOX 32
813 907
814void g_accept_friend_request(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) 908void g_accept_friend_request(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata)
@@ -996,6 +1090,7 @@ Suite *tox_suite(void)
996 DEFTESTCASE(one); 1090 DEFTESTCASE(one);
997 DEFTESTCASE_SLOW(few_clients, 50); 1091 DEFTESTCASE_SLOW(few_clients, 50);
998 DEFTESTCASE_SLOW(many_clients, 150); 1092 DEFTESTCASE_SLOW(many_clients, 150);
1093 DEFTESTCASE_SLOW(many_clients_tcp, 150);
999 DEFTESTCASE_SLOW(many_group, 100); 1094 DEFTESTCASE_SLOW(many_group, 100);
1000 return s; 1095 return s;
1001} 1096}