diff options
Diffstat (limited to 'auto_tests/tox_test.c')
-rw-r--r-- | auto_tests/tox_test.c | 97 |
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 | } |
904 | END_TEST | 904 | END_TEST |
905 | 905 | ||
906 | #define NUM_TCP_RELAYS 3 | ||
907 | |||
908 | START_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) { | ||
952 | loop_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 | } | ||
999 | END_TEST | ||
1000 | |||
1001 | |||
906 | #define NUM_GROUP_TOX 32 | 1002 | #define NUM_GROUP_TOX 32 |
907 | 1003 | ||
908 | void g_accept_friend_request(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) | 1004 | void 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 | } |