diff options
Diffstat (limited to 'auto_tests')
-rw-r--r-- | auto_tests/tox_test.c | 95 |
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 | } |
810 | END_TEST | 810 | END_TEST |
811 | 811 | ||
812 | #define TCP_RELAY_PORT 33445 | ||
813 | |||
814 | START_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) { | ||
857 | loop_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 | } | ||
904 | END_TEST | ||
905 | |||
812 | #define NUM_GROUP_TOX 32 | 906 | #define NUM_GROUP_TOX 32 |
813 | 907 | ||
814 | void g_accept_friend_request(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) | 908 | void 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 | } |