summaryrefslogtreecommitdiff
path: root/auto_tests
diff options
context:
space:
mode:
authormichael bishop <cleverca22@gmail.com>2016-09-12 11:36:49 -0300
committerAnsa89 <ansalonistefano@gmail.com>2017-04-01 17:47:34 +0200
commit200ee1cace2f17537e6982ac447ea65d7c7a00b3 (patch)
tree5c3cdfd8be52b9b621d859eed877c38d88314f08 /auto_tests
parent124d9e0446856002d9d19abddae12107345d67bc (diff)
initial version of tox_loop
Diffstat (limited to 'auto_tests')
-rw-r--r--auto_tests/tox_loop_test.c135
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
22struct loop_test {
23 int start_count, stop_count;
24 pthread_mutex_t mutex;
25 Tox *tox;
26};
27
28void 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
35void 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
42void *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
49START_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}
103END_TEST
104
105#ifdef TRAVIS_ENV
106uint8_t timeout_mux = 20;
107#else
108uint8_t timeout_mux = 10;
109#endif
110
111static 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
121int 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}