summaryrefslogtreecommitdiff
path: root/auto_tests
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2015-05-20 15:52:03 -0400
committerirungentoo <irungentoo@gmail.com>2015-05-20 15:52:03 -0400
commit7315ad08dde478f9f1c82b7a88aff46ce3f24888 (patch)
treef3225a052791d18a0f57f9cb8ee1ddcaba36958a /auto_tests
parent8760aba257b5f96d082a58abbc9fb4ca2dd73638 (diff)
parent782d68cdc34121c84837a41fa97dce03575e76a4 (diff)
Merge branch 'tcp_server'
Diffstat (limited to 'auto_tests')
-rw-r--r--auto_tests/tox_test.c192
1 files changed, 192 insertions, 0 deletions
diff --git a/auto_tests/tox_test.c b/auto_tests/tox_test.c
index 0dab2e69..142a178f 100644
--- a/auto_tests/tox_test.c
+++ b/auto_tests/tox_test.c
@@ -809,6 +809,196 @@ loop_top:
809} 809}
810END_TEST 810END_TEST
811 811
812#define TCP_RELAY_PORT 33448
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 ck_assert_msg(tox_add_tcp_relay(toxes[i], "::1", TCP_RELAY_PORT, dpk, 0), "add relay error");
837 ck_assert_msg(tox_bootstrap(toxes[i], "::1", 33445, dpk, 0), "Bootstrap error");
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
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
812#define NUM_GROUP_TOX 32 1002#define NUM_GROUP_TOX 32
813 1003
814void 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)
@@ -996,6 +1186,8 @@ Suite *tox_suite(void)
996 DEFTESTCASE(one); 1186 DEFTESTCASE(one);
997 DEFTESTCASE_SLOW(few_clients, 50); 1187 DEFTESTCASE_SLOW(few_clients, 50);
998 DEFTESTCASE_SLOW(many_clients, 150); 1188 DEFTESTCASE_SLOW(many_clients, 150);
1189 DEFTESTCASE_SLOW(many_clients_tcp, 20);
1190 DEFTESTCASE_SLOW(many_clients_tcp_b, 20);
999 DEFTESTCASE_SLOW(many_group, 100); 1191 DEFTESTCASE_SLOW(many_group, 100);
1000 return s; 1192 return s;
1001} 1193}