diff options
author | michael bishop <cleverca22@gmail.com> | 2016-09-12 11:36:49 -0300 |
---|---|---|
committer | Ansa89 <ansalonistefano@gmail.com> | 2017-04-01 17:47:34 +0200 |
commit | 200ee1cace2f17537e6982ac447ea65d7c7a00b3 (patch) | |
tree | 5c3cdfd8be52b9b621d859eed877c38d88314f08 /auto_tests | |
parent | 124d9e0446856002d9d19abddae12107345d67bc (diff) |
initial version of tox_loop
Diffstat (limited to 'auto_tests')
-rw-r--r-- | auto_tests/tox_loop_test.c | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/auto_tests/tox_loop_test.c b/auto_tests/tox_loop_test.c new file mode 100644 index 00000000..56e78bda --- /dev/null +++ b/auto_tests/tox_loop_test.c | |||
@@ -0,0 +1,135 @@ | |||
1 | |||
2 | |||
3 | #include "helpers.h" | ||
4 | |||
5 | #include "../toxcore/tox.h" | ||
6 | |||
7 | #include <check.h> | ||
8 | #include <pthread.h> | ||
9 | #include <stdio.h> | ||
10 | #include <stdlib.h> | ||
11 | #include <unistd.h> | ||
12 | |||
13 | #define TCP_RELAY_PORT 33448 | ||
14 | /* The Travis-CI container responds poorly to ::1 as a localhost address | ||
15 | * You're encouraged to -D FORCE_TESTS_IPV6 on a local test */ | ||
16 | #ifdef FORCE_TESTS_IPV6 | ||
17 | #define TOX_LOCALHOST "::1" | ||
18 | #else | ||
19 | #define TOX_LOCALHOST "127.0.0.1" | ||
20 | #endif | ||
21 | |||
22 | struct loop_test { | ||
23 | int start_count, stop_count; | ||
24 | pthread_mutex_t mutex; | ||
25 | Tox *tox; | ||
26 | }; | ||
27 | |||
28 | void tox_loop_cb_start(Tox *tox, void *user_data) | ||
29 | { | ||
30 | struct loop_test *userdata = user_data; | ||
31 | pthread_mutex_lock(&userdata->mutex); | ||
32 | userdata->start_count++; | ||
33 | } | ||
34 | |||
35 | void tox_loop_cb_stop(Tox *tox, void *user_data) | ||
36 | { | ||
37 | struct loop_test *userdata = user_data; | ||
38 | userdata->stop_count++; | ||
39 | pthread_mutex_unlock(&userdata->mutex); | ||
40 | } | ||
41 | |||
42 | void *tox_loop_worker(void *data) | ||
43 | { | ||
44 | struct loop_test *userdata = data; | ||
45 | int retval = tox_loop(userdata->tox, data); | ||
46 | return (void *)retval; | ||
47 | } | ||
48 | |||
49 | START_TEST(test_tox_loop) | ||
50 | { | ||
51 | pthread_t worker1, worker2; | ||
52 | struct Tox_Options opts; | ||
53 | struct loop_test userdata; | ||
54 | uint8_t dpk[TOX_PUBLIC_KEY_SIZE]; | ||
55 | int retval; | ||
56 | |||
57 | userdata.start_count = 0; | ||
58 | userdata.stop_count = 0; | ||
59 | pthread_mutex_init(&userdata.mutex, NULL); | ||
60 | |||
61 | tox_options_default(&opts); | ||
62 | opts.tcp_port = TCP_RELAY_PORT; | ||
63 | userdata.tox = tox_new(&opts, 0); | ||
64 | tox_callback_loop_begin(userdata.tox, tox_loop_cb_start); | ||
65 | tox_callback_loop_end(userdata.tox, tox_loop_cb_stop); | ||
66 | pthread_create(&worker1, NULL, tox_loop_worker, &userdata); | ||
67 | |||
68 | tox_self_get_dht_id(userdata.tox, dpk); | ||
69 | |||
70 | tox_options_default(&opts); | ||
71 | struct loop_test userdata_tcp; | ||
72 | userdata_tcp.start_count = 0; | ||
73 | userdata_tcp.stop_count = 0; | ||
74 | pthread_mutex_init(&userdata_tcp.mutex, NULL); | ||
75 | userdata_tcp.tox = tox_new(&opts, 0); | ||
76 | tox_callback_loop_begin(userdata_tcp.tox, tox_loop_cb_start); | ||
77 | tox_callback_loop_end(userdata_tcp.tox, tox_loop_cb_stop); | ||
78 | pthread_create(&worker2, NULL, tox_loop_worker, &userdata_tcp); | ||
79 | |||
80 | pthread_mutex_lock(&userdata_tcp.mutex); | ||
81 | TOX_ERR_BOOTSTRAP error = 0; | ||
82 | ck_assert_msg(tox_add_tcp_relay(userdata_tcp.tox, TOX_LOCALHOST, TCP_RELAY_PORT, dpk, &error), "add relay error, %i", | ||
83 | error); | ||
84 | ck_assert_msg(tox_bootstrap(userdata_tcp.tox, TOX_LOCALHOST, 33445, dpk, 0), "Bootstrap error"); | ||
85 | pthread_mutex_unlock(&userdata_tcp.mutex); | ||
86 | |||
87 | sleep(10); | ||
88 | |||
89 | tox_loop_stop(userdata.tox); | ||
90 | pthread_join(worker1, (void **)&retval); | ||
91 | ck_assert_msg(retval == 0, "tox_loop didn't return 0"); | ||
92 | |||
93 | tox_kill(userdata.tox); | ||
94 | ck_assert_msg(userdata.start_count == userdata.stop_count, "start and stop must match"); | ||
95 | |||
96 | tox_loop_stop(userdata_tcp.tox); | ||
97 | pthread_join(worker2, (void **)&retval); | ||
98 | ck_assert_msg(retval == 0, "tox_loop didn't return 0"); | ||
99 | |||
100 | tox_kill(userdata_tcp.tox); | ||
101 | ck_assert_msg(userdata_tcp.start_count == userdata_tcp.stop_count, "start and stop must match"); | ||
102 | } | ||
103 | END_TEST | ||
104 | |||
105 | #ifdef TRAVIS_ENV | ||
106 | uint8_t timeout_mux = 20; | ||
107 | #else | ||
108 | uint8_t timeout_mux = 10; | ||
109 | #endif | ||
110 | |||
111 | static Suite *tox_suite(void) | ||
112 | { | ||
113 | Suite *s = suite_create("Tox loop"); | ||
114 | |||
115 | /* test the new tox_loop function */ | ||
116 | DEFTESTCASE_SLOW(tox_loop, 4 * timeout_mux); | ||
117 | |||
118 | return s; | ||
119 | } | ||
120 | |||
121 | int main(int argc, char *argv[]) | ||
122 | { | ||
123 | srand((unsigned int) time(NULL)); | ||
124 | |||
125 | Suite *tox = tox_suite(); | ||
126 | SRunner *test_runner = srunner_create(tox); | ||
127 | |||
128 | int number_failed = 0; | ||
129 | srunner_run_all(test_runner, CK_NORMAL); | ||
130 | number_failed = srunner_ntests_failed(test_runner); | ||
131 | |||
132 | srunner_free(test_runner); | ||
133 | |||
134 | return number_failed; | ||
135 | } | ||